皆さんこんにちは。ニジボックス Advent Calendar23日目の記事です。
今回は、レプリケーションについて勉強する機会が有ったので、そのまとめを書いていきます。
概要をさらっと書くだけなので張り方については他の記事を参照してね。
#はじめに
レプリケーションとは、mysqlの標準機能の一つで、あるDBに変更を加えたクエリをそのまま実行することでレプリカDBを作成、維持する機能のこと。
用途としては、バックアップ、書き込み用読み込み用で分けて負荷分散など。
また、張り方は以下の様に自由がききます。
・[マスタ]→[スレーブ]
・[マスタ]→[スレーブ]→[スレーブ2]
・[マスタ]→[スレーブ]
↓
[スレーブ2]
#役割
###レプリケーションユーザ
マスタDBに住むREPLICATION SLAVE 権限を持ったユーザ。
パスワードはプレーンテキストで保持されるので専用ユーザを作るべき。
マスタDBでの実行クエリログ(log_bin)を作成し、スレーブDBに伝えてくれる。
###マスタDB
コピー元になるDBのこと。
###スレーブDB
レプリケーションユーザのログをコピーし自DBにクエリを流していく。
(スレーブ側の処理能力が著しく低いとマスターのクエリを捌けず最新の状態を保てないので、処理能力はある程度近くする必要がある。あとバージョンも。)
#ステータスの見方
こちら実際に動いているレプリケーションのステータスの見方です。(行数が多いので、最小限の行だけだしています。)
mysql> show slave status\G
*************************** 1. row ***************************
Master_Host: 127.0.0.1 #マスタのIP
Master_User: replica #マスタのレプリケーションユーザ名
Master_Port: 3306 #マスタのポート番号
Master_Log_File: mysql-bin.000003 #最新logファイル名
Read_Master_Log_Pos: 31122248 #マスタの最新クエリ番号
Relay_Log_Pos: 30512168
#最後に実行したクエリ番号。
#Read_Master_Log_Posと差が有ると同期が追い付いてない!
Relay_Master_Log_File: mysql-bin.000003
Slave_IO_Running: Yes
#始めに見るべき項目。マスタの実行ログを取得しているか
Slave_SQL_Running: Yes
#始めに見るべき項目その2。クエリを実行しているか
#noの場合Last_Errorにエラー内容が図れている
#同期を図っているか
Last_Errno: 0
Last_Error: #エラー内容