MySQLのレプリケーションサーバからレプリケーションを追加する
前提
- マスター1台
- スレーブ2台以上
- ディスク容量がパンパンでtarで固める余裕がない
手順
・スレーブ1台停止
mysql> STOP SLAVE;
・停止したスレーブ(fuga)の状態確認、Master_Log_FileとRead_Master_Log_Posをメモ
mysql> SHOW SLAVE STATUS¥G; *************************** 1. row *************************** 〜略〜 Master_Host: hoge Master_User: repl Master_Port: 3306 Connect_Retry: 60 Master_Log_File: mysql-bin.000002 Read_Master_Log_Pos: 106 Relay_Log_File: fuga-relay-bin.000001 Relay_Log_Pos: 106 〜略〜
・停止したスレーブ(fuga)から、データベースをdump
fuga2# mysqldump -urepl -p -hfuga --all-databases --default-character-set=binary --opt --single-transaction --hex-blob --order-by-primary > /tmp/fuga.sql ※--single-transactionオプションを使用しているときは、一定の状態でダンプされるのはInnoDBテーブルのみだということを留意してください。例えば、このオプションを使用中にダンプされたMyISAMやMEMORYテーブルは状態が変化する可能性があるとのこと。
・新しいスレーブ(fuga2)にデータベースをインポート
fuga2# mysql --default-character-set=binary < /tmp/fuga.sql
・新しいスレーブにマスターの情報を設定
mysql> STOP SLAVE; mysql> CHANGE MASTER TO Master_Host = 'hoge', Master_User = 'repl', Master_Port = 3306, Master_Password = 'pass', Master_Log_File='mysql-bin.000002', Master_Log_Pos=106; mysql> SHOW SLAVE STATUS¥G;
・スレーブの確認
mysql> SHOW SLAVE STATUS¥G;
・問題なかったらスレーブ開始
mysql> START SLAVE;
・マスターで更新してみて、レプリケーションに反映されるか確認