リカバリの日時ではなく、ログの位置で指定するには、--start-position
および --stop-position
オプションを
mysqlbinlog
で使用します。これは、開始/終了時間のオプションと同様の使い方をします。日時の部分をログ位置の番号とします。ログのどの部分をリカバリするのかを位置で指定すると、より正確なリカバリができます。SQL
ステートメントへのダメージが起きたときに、大量のトランザクションが発生していた場合などに有用です。位置番号を確認するには、予期していないトランザクションがあった時間帯で
mysqlbinlog
を実行します。このとき、結果を確認用にテキスト
ファイルにリダイレクトします。この操作は次のように行います。
shell>mysqlbinlog --start-date="2005-04-20 9:55:00" \
--stop-date="2005-04-20 10:05:00" \
/var/log/mysql/bin.123456 > /tmp/mysql_restore.sql
このコマンドは、/tmp
ディレクトリのテキスト
ファイルに小さく作成します。このテキスト
ファイルには、有害な SQL
ステートメントを実行した時間の SQL
ステートメントがあります。このファイルをテキスト
ファイルで開き、リピートすると害になるステートメントを探します。停止点と開始点に指定するバイナリ
ログの位置を確認します。位置は、番号が後続する
log_pos
とラベルで見分けます。前回のバックアップ
ファイルをリストアした後、この位置番号を使用して、バイナリ
ログ
ファイルを処理します。たとえば、次のようにコマンドを使用します。
shell>mysqlbinlog --stop-position="368312" /var/log/mysql/bin.123456 \
| mysql -u root -p
shell>mysqlbinlog --start-position="368315" /var/log/mysql/bin.123456 \
| mysql -u root -p
最初のコマンドは停止位置までのトランザクションすべてをリカバリします。2
番目のコマンドは、開始位置からバイナリ
ログの終わりまでのトランザクションすべてをリカバリします。mysqlbinlog
の出力には SQL ステートメントを記録する前の
SET TIMESTAMP
ステートメントを含むため、リカバリしたデータおよび関連する
MySQL
ログはトランザクションを実行したオリジナルの時刻を反映します。