大規模な(120 GB)MySQLデータベースのレプリケーションをセットアップしようとして、めちゃくちゃになりました。
マスターをシャットダウンし、データファイルをコピーして、マスターを再起動しました。これでスレーブをセットアップして起動しましたが、レプリケーションのセットアップに必要なMASTER_LOG_FILE
とMASTER_LOG_POS
の値の取得を怠っていたことがわかりました。
データファイルのそのままのコピーがまだ残っています。これらのファイルからMASTER_LOG_FILE
およびMASTER_LOG_POS
を特定する方法はありますか?
関連質問:
MASTER_LOG_POS
を以前の時点に設定するとどうなりますか?編集
私はmysqlbinlog
コマンドを調査していて、次のコマンドを実行して正しい情報のように見えるものを発見しました:
mysqlbinlog --to-last-log --start-datetime='2015-06-21 20:05:00'
mysql-bin.000006 | grep end_log_pos
出力は次のようになります。
... a whole bunch more lines ...
#150621 20:10:21 server id 1 end_log_pos 720159843 Query thread_id=901489 exec_time=0 error_code=0
#150621 20:10:21 server id 1 end_log_pos 720161877 Query thread_id=901489 exec_time=0 error_code=0
#150621 20:10:21 server id 1 end_log_pos 720162762 Query thread_id=901489 exec_time=0 error_code=0
#150621 20:10:22 server id 1 end_log_pos 720164796 Query thread_id=901489 exec_time=0 error_code=0
#150621 20:10:22 server id 1 end_log_pos 720164815 Stop
私はこれらの最後の2つの位置の1つを使用する必要があると思いますが、どちらを使用するかわかりません。
うまくいけば、まだmysqldをスレーブで起動していません。
たまたま、binlogの位置は、すべてのbinlogイベントの最後のbinlogサイズでもあります。あなたの場合、スレーブが見る最後のbinlogを使用できます。これはmysql-bin.000006
。ファイルサイズを取得し、それを位置として使用します。
したがって、スレーブで実行します
STOP SLAVE;
CHANGE MASTER TO
MASTER_Host='...',
MASTER_PORT=3306,
MASTER_USER='repluser',
MASTER_PASSWORD='replpassword',
MASTER_LOG_FILE='mysql-bin.00006',
MASTER_LOG_POS=720164815;
START SLAVE;
そしてそれはそれでうまくいくはずです!!!
私は以前にbinlogの位置がファイルサイズであることを話しました
Nov 30, 2012
: MySQL binlogファイルが破損したかどうかをどのように監視できますか?Oct 20, 2011
: ディスク容量の停止があったときにMy SQL DBマスターからマスターへのレプリケーションを処理する方法あなたも尋ねました
mASTER_LOG_POSを以前の時点に設定するとどうなりますか?
はい、それらのbinlogイベントを再生し、問題を引き起こします。