注意: 更新ログは廃止され、代わりにバイナリログが使用されます。See 項4.10.4. 「バイナリログ」。 バイナリログは、以前の更新ログの機能をすべて備え、加えて別の機能も追加されています。MySQL 5.0 で更新ログはなくなります。
mysqld
を
--log-update[=file_name]
オプションで起動すると、データを更新するすべての
SQL
コマンドがログファイルに記録されます。ファイル名を指定しなければ、ホストマシンの名前がデフォルト名になります。ファイル名を指定し、パスを指定しない場合、ファイルはデータディレクトリに作成されます。file_name
に拡張子がない場合、mysqld
はfile_name.###
の形式でログファイル名を生成します。ここで
###
は、mysqladmin
refresh
、mysqladmin
flush-logs
、および FLUSH LOGS
ステートメントが実行されるたびに、およびサーバが再起動するたびにインクリメントされる番号です。
注意: 上記スキームが有効であるために、更新ログが使用するディレクトリ内では、更新ログ + 何らかの拡張子など、番号と誤認されるようなファイル名のファイルを作成してはいけません。
--log
オプションまたは
-l
オプションを使用した場合、mysqld
は hostname.log
という名前の一般ログファイルを作成します。再起動やリフレッシュを行っても新規ログファイルは生成されません(いったん閉じて、再度開くだけです)。この場合、以下のようにして(Unix
上)ログファイルをコピーすることができます。
mv hostname.log hostname-old.log mysqladmin flush-logs cp hostname-old.log to-backup-directory rm hostname-old.log
更新ログは、データを実際に更新したステートメントだけを記録します。UPDATE
または DELETE
の WHERE
指定でレコードが見つからなかった場合、そのステートメントはログに書き込まれません。カラムの値を、すでにある同じ値で更新した
UPDATE
ステートメントもスキップされます。
更新ログの書き込みは、クエリが完了した直後でロックの解除前に、またはコミットの前に行われます。このため、ログは実行順序どおりに書き込まれます。
更新ログファイルからデータベースを更新するには、以下を実行します。ここでは、更新ログ名の形式を
file_name.###
と仮定しています。
shell> ls -1 -t -r file_name.[0-9]* | xargs cat | mysql
ls
は、すべてのログファイルを正しい順序で取得するために使用します。
これは、クラッシュ後にバックアップファイルの状態にまで戻す、あるいはバックアップ後からクラッシュまでの間の更新を繰り返す場合などに役立ちます。
This is a translation of the MySQL Reference Manual that can be found at dev.mysql.com. The original Reference Manual is in English, and this translation is not necessarily as up to date as the English version.