web-dev-qa-db-ja.com

バイナリファイルからMySQLバイナリログ座標を取得するにはどうすればよいですか?

大規模な(120 GB)MySQLデータベースのレプリケーションをセットアップしようとして、めちゃくちゃになりました。

マスターをシャットダウンし、データファイルをコピーして、マスターを再起動しました。これでスレーブをセットアップして起動しましたが、レプリケーションのセットアップに必要なMASTER_LOG_FILEMASTER_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つを使用する必要があると思いますが、どちらを使用するかわかりません。

4
Kryten

うまくいけば、まだ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の位置がファイルサイズであることを話しました

あなたも尋ねました

mASTER_LOG_POSを以前の時点に設定するとどうなりますか?

はい、それらのbinlogイベントを再生し、問題を引き起こします。

4
RolandoMySQLDBA