リカバリの開始時間と終了時間を指示するには、mysqlbinlog に --start-datetime
および --stop-datetime
オプションを DATETIME
フォーマットで指定します。例として、2005 年 4 月 20 日午前 10 時ちょうどに、大きなテーブルを削除する SQL ステートメントが実行されたとします。テーブルとデータをリストアするには、前夜のバックアップをリストアして、次のコマンドを実行します。
shell> mysqlbinlog --stop-datetime="2005-04-20 9:59:59" \
/var/log/mysql/bin.123456 | mysql -u root -p
このコマンドは、すべてのデータを --stop-datetime
オプションで指定された日時までリカバリします。数時間たって、入力された誤った SQL ステートメントを検出しなかった場合、その後発生したアクティビティーもリカバリする必要がある可能性があります。これに基づいて、次のように開始日時で mysqlbinlog を再度実行できます。
shell> mysqlbinlog --start-datetime="2005-04-20 10:01:00" \
/var/log/mysql/bin.123456 | mysql -u root -p
このコマンドでは、午前 10:01 から記録された SQL ステートメントが再実行されます。前夜のダンプファイルのリストアと 2 つの mysqlbinlog コマンドの組み合わせでは、午前 10:00 の 1 秒前までのすべてのものと午前 10:01 からのすべてのものをリストアします。
ポイントインタイムリカバリのこの方法を使用するには、ログを調べて、コマンドに指定する正確な時間を確認してください。ログファイルの内容を実行せずに表示するには、次のコマンドを使用します。
shell> mysqlbinlog /var/log/mysql/bin.123456 > /tmp/mysql_restore.sql
次に、テキストエディタで /tmp/mysql_restore.sql
ファイルを開き、それを調べます。
mysqlbinlog に時間を指定して、特定の変更を除外することは、除外されるステートメントと同時に複数のステートメントが実行された場合、うまく機能しません。