2007年12月29日土曜日

レプリケーション時のエラースキップ



MySQLのレプリケーションで、稼動中のマスターDBからスレーブDBに


データをコピーし、レプリケーションを開始したところ


ところどころで、error 1060 プライマリーキーの重複などのエラーがでました。


最初は、



SET GLOBAL SQL_SLAVE_SKIP_COUNTER=1;
START SLAVE SQL_THREAD;


として、処理を再開していましたが、大量に出てきてこりゃ手に負えないわということで


my.cnf に以下を追記し再起動



[mysqld]
slave-skip-errors=1060


一応、今のところ問題なくレプリケーションしてます。


そもそも、稼動中のMySQLのレプリケーションのやり方を詳しく説明しているのを見つけることができず


とりあえずで、以下の手順でスレーブを作りました。


(1)マスターをコピーして、スレーブに移動


(2)マスターのバイナリーログをながめてレプリケーション開始のポジションを決める。


(3)スレーブの設定に slave-skip-errors をセットして問題ないエラーを回避する


マスターをシャットダウン(テーブルロック)できたら、こんなことにはならなかったと思うのですが


まぁ、止めたくなかったのでコピーを稼動中にするはめに。


更新処理がどんどん進めば、スレーブのデータのずれも


上書きされて、まぁ問題ないかと。


スレーブは基本参照用に使うつもりなので


致命的なデータのずれさえなければ、そんなに整合性にはこだわらなくても


いいのかとおもいます。マスターとの同期に時間的なずれがそもそもあるしね。