前回の続きです。
マスター、スレーブで使う為のDBを立ち上げを終えたら、マスターから出力される更新ログを随時スレーブ側で受け取り、反映出来るようにします。
マスターの更新ログは前回my.cnfでpid出力先として指定した /usr/local/mysql/dataの中に出力されているはずですので、一度確認してみるといいでしょう。
出力されていなければ設定が間違っている可能性が高いので、もう一度前回の記事をご覧下さい。
マスター側DBでレプリケーション用ユーザーを作成する
マスター側DBにクライアントでルートでログイン
(ここでは省略していますが、パスワード設定を必ずパスワードは設定しておく事)
mysql -u root
ユーザー作成
GRANT REPLICATION SLAVE ON *.* TO repl@'127.0.0.1' IDENTIFIED BY '任意のパスワード';
マスター・スレーブを同期させる
マスターのDB更新を一旦禁止する
現在のマスター側のデータを維持するため、DB更新を一旦禁止。
FLUSH TABLES WITH READ LOCK; EXIT; /etc/init.d/mysqld_master stop
マスターのデータを全て取得する
cd /usr/local/mysql/data tar -cvf /usr/src/backup.tar .
マスターのログファイル一覧をメモする
以下の通り実行し、出力されたFileとPositionの内容をメモ。
Fileなら mysql-bin.XXXXX
Positionなら数字が出力される。
mysql -u root SHOW MASTER STATUS; EXIT;
取得したデータをスレーブ側に展開する
tar -xvf /usr/src/backup.tar -C /usr/local/mysql_slave/data
次の通りslave/data内を確認して、binファイルがコピーされていればOK
ls /usr/local/mysql_slave/data
マスター側の更新を有効にする
mysql -u root UNLOCK TABLES; EXIT;
スレーブ側のDBに接続して設定を行う
/usr/local/mysql_slave/bin/mysql -u root -P 13006 CHANGE MASTER TO MASTER_HOST='127.0.0.1', MASTER_USER='repl', MASTER_PASSWORD='設定したパスワード', MASTER_LOG_FILE='先程メモしたFile', MASTER_LOG_POS=先程メモしたPosition; START SLAVE;
実際に動作を確認する
これ以降、マスター側でのDB更新は全てスレーブに反映される。
マスター側で任意のDB/テーブルを作成、更新後、スレーブに接続して反映されているか確認する。