・slave02 のレプリケーションが止まってたのに
取込前にマスターのバイナリログが消えたから。
■構成
・マスター:master01
・スレーブ:slave01
・これから作るスレーブ:slave02
■前提
・slave01 は既に存在していてレプリケーション構築済み。
・slave02 は mysql インストール済み。データはすべて消えても良い。
・master01 は止めてはいけないが slave01・slave02 は止めてよい。
■手順
・slave01 を止めて、データファイルを取得
・slave02 のデータファイルを置き換える(余計なファイルもあるので一部消す)
・slave02 のレプリケーションに関わる設定を変更する
# コピー先(新しくスレーブにするサーバ) で準備
ssh username@slave02
# slave02 で mysql 停止
mysql -uroot -p
show slave status\G
stop slave;
quit
/etc/init.d/mysql stop
ps aux | grep mysql # プロセスが存在しないことを確認
# slave02 で /var/lib/mysql をリネーム
mv /var/lib/mysql /var/lib/mysql_backupdata
# コピー元(既にスレーブになっているサーバ) でファイル取得
# master01-slave01 のレプリケーションを停止
ssh username@slave01
mysql -uroot -p
show slave status\G
stop slave;
show slave status\G
# slave01 の show slave status\G の内容を記録
echo "show slave status\G" | mysql -uroot -p > slave01_show_slave_status.txt
# slave01 で mysql を停止
hostname # 念のため確認(マスター止めてしまわないように)
/etc/init.d/mysql stop
ps aux | grep mysql
# slave01 の /var/lib/mysql を tar.gz で固める
tar cvzf ~/slave01_mysql_data.tar.gz /var/lib/mysql
# slave01 で mysql を起動
/etc/init.d/mysql start
# master01-slave01 でレプリケーションを再開
# やる前に動作確認すること。
ssh username@slave01
mysql -uroot -p
show slave status\G
stop slave;
show slave status\G
# slave01 で固めたファイルを slave02 に転送
scp ~/slave01_mysql_data.tar.gz username@slave02:/home/username/slave01_mysql_data.tar.gz
# 再びコピー先で作業
ssh username@slave02
# slave02 でそのファイルを展開して、コピーする
tar xvfz ~/slave01_mysql_data.tar.gz
# slave02 で下記に該当するファイルを削除
・.info ファイル
・.index ファイル
・バイナリログ (サーバ名-bin.数字)
・リレーログ (サーバ名-relay-bin.数字)
# slave02 で mysql を起動
/etc/init.d/mysql start
# slave02 で change master を実行
# 設定値には、slave01 で取っておいた show slave status の値を用いる。
mysql -uroot -p
CHANGE MASTER TO
MASTER_HOST='master01のIPアドレス'
, MASTER_USER='レプリケーション用ユーザ名'
, MASTER_PORT='3306'
, MASTER_PASSWORD = 'レプリケーション用パスワード'
, MASTER_LOG_FILE='slave01 の Relay_Master_Log_Fileの値'
, MASTER_LOG_POS='slave01 の Exec_Master_Log_Posの値'
# slave02 で start slave する
start slave;
# おわり。