Replication on MySQL (2008/12/16)

スレーブをマスターへ

mysql> stop slave io_thread;
mysql> show processlist\G		-> "Has read all relay log" を確認
mysql> reset master;

スレーブ(A)から別のスレーブ(B)を複製

スレーブ(A)のmysqldを停止して、 データディレクトリをまるごとスレーブ(B)へコピー。
新規にスレーブを作成する場合には /etc/my.cnf もコピーして、 server-id などを変更。
データ障害などが起こってスレーブ(B)を作り直す場合には /etc/my.cnf の relay-log をスレーブ(A)と同じ値に変更。
基本的に、以上の操作で稼働するはず。
relay-logの名前を変更するには スレーブ(B)にて以下を実行。
※一旦マスターに格上げ
mysql> stop slave io_thread;
mysql> show processlist\G		-> "Has read all relay log" を確認
mysql> reset master;
/etc/my.cnf の名前を変更する。
mysql> stop slave io_thread;		-> この辺不要かも?
mysql> show processlist\G		-> "Has read all relay log" を確認
mysql> show slave status\G		-> Relay_Log_File、Relay_Log_Pos を記録
mysql> reset master;
mysql> reset slave;
mysql> change master to
    -> master_host = 'XXX',
    -> master_user = 'XXX',
    -> master_password = 'XXX',
    -> master_log_file = (Relay_log_Fileの値)
    -> master_log_pos = (Relay_Log_Posの値);
mysql> start slave;