shimxmemo

メモをのこすよ!

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;

・マスターで更新してみて、レプリケーションに反映されるか確認