mysqlがミスってしまった場合の対象方法
DB-SERVER-MASTER
DB-SERVER-SLAVE
の単純な2者の関係で組んでいるのだが コピー時に変更差分を受け付けてしまった
おかげでスレーブのスタートに失敗している。
これではバックアップとかもままならないので、スレーブの復帰を目的とした
設定を行う。
MySQLのバージョンは 前回ソースからビルドしたものを利用します。
5.0.44(つまりバージョン変更はなしって事で、大まかなバージョンが
一致していれば大方大丈夫のようです。)
まずは何はともあれ、バックアップ
mysql> mysqldump --default-character-set=utf8 -u root DBNAME1 >dump0315
mysql> mysqldump --default-character-set=utf8 -u root DBNAME2 >dump2-0315
まずは古いバイナリーログはどの道いらなくなるので捨てる。
チェックする。
mysql> SHOW BINARY LOGS
+------------------+------------+
| Log_name | File_size |
+------------------+------------+
| mysql-bin.000012 | 1073742766 |
| mysql-bin.000013 | 1073741907 |
| mysql-bin.000014 | 1073742236 |
+------------------+------------+
mysql> PURGE MASTER LOGS TO 'mysql-bin.000013';
これで12まで消える。
日時以前だとこの方法を利用する。
mysql> PURGE MASTER LOGS BEFORE '2008-03-01 12:00:00';
MYSQLを読み専用モードロックを実施
mysqlコンソール上で
FLUSH TABLES WITH READ LOCK;
binlogの位置を確認
SHOW MASTER STATUS;
ここで出てくるファイルの位置と、ポジションが後のCHANGE MASTER TO構文で
利用するので控えて置く。
tar で固めてスレーブサーバに移動
tar -cvf /var/tmp/mysql-flashtable.tar /var/lib/mysql/
テーブルロックの解除
UNLOCK TABLES;
テーブルロックはファイルの取得が完了してからで問題ない。
そのためこの作成はかなり短時間で実行可能だと思う。
容量がでかいとかかるので要注意
scp /var/tmp/mysql-flashtable.tar DB-SERVER-SLAVER:/var/tmp/
CHANGE MASTER TO
master_host = DB-SERVER-MASTER,
master_user = replicator,
master_password = PASSWORD,
MASTER_LOG_FILE = 'mysql-bin.000013' ,
MASTER_LOG_POS = 365473474;
POSとファイルは、READフラッシュを実行した際に取得したポイントを確認。
参考になりました。
http://www.irori.org/doc/mysql-rep.html