mysqlbinlog
ユーティリティを使用して、バイナリログファイル(see
項4.10.4. 「バイナリログ」)を調べることができます。
shell> mysqlbinlog hostname-bin.001
上記の例では、バイナリログ
hostname-bin.001
に含まれるすべてのクエリが、クエリにかかった時間、クエリを発行したスレッドの
ID、クエリ発行時のタイムスタンプなどの情報とともに出力されます。
mysqlbinlog
の出力を
mysql
クライアントに送信できます。これは、古いバックアップでリカバリするときに使用します(see
項4.5.1. 「データベースのバックアップ」)。
shell> mysqlbinlog hostname-bin.001 | mysql
または
shell> mysqlbinlog hostname-bin.[0-9]* | mysql
また、mysqlbinlog
の出力をテキストファイルにリダイレクトし、そのテキストファイルを編集(何らかの理由で実行したくないクエリを削除)し、テキストファイルから
mysql
に対してクエリを実行することもできます。
mysqlbinlog
には
position=#
オプションがあり、バイナリログでのオフセットが
#
以上のクエリだけを出力することができます。
MySQL サーバで実行するバイナリログが複数ある場合、単一の MySQL 接続で実行する方が安全です。以下は、安全でない例です。
shell>mysqlbinlog hostname-bin.001 | mysql # DANGER!!
shell>mysqlbinlog hostname-bin.002 | mysql # DANGER!!
最初のバイナリログに CREATE TEMPORARY
TABLE
が含まれ、2
番目のバイナリログにこのテンポラリテーブルを使用するクエリが含まれていると、問題が発生します。最初の
mysql
が終了すると、テンポラリテーブルが破棄されるので、2
番目の mysql
は ``unknown table''
を報告することになります。これが、すべてのバイナリログを単一の接続で実行すべき理由です。テンポラリテーブルを使用する場合には特に気を付けてください。2
つの方法があります。
shell> mysqlbinlog hostname-bin.001 hostname-bin.002 | mysql
shell>mysqlbinlog hostname-bin.001 > /tmp/queries.sql
shell>mysqlbinlog hostname-bin.002 >> /tmp/queries.sql
shell>mysql -e "source /tmp/queries.sql"
MySQL 4.0.14 以降、mysqlbinlog
は、バイナリログから LOAD DATA
INFILE
を実行するための
mysql
に対する適切な入力を提供できるようになっています。ロードするデータがバイナリログに含まれるため(これは
MySQL 4.0 の場合です。MySQL 3.23
ではロードされたデータがバイナリログに書き込まれないため、バイナリログの内容を実行するにはオリジナルファイルが必要でした)、mysqlbinlog
はこのデータをテンポラリファイルにコピーして
LOAD DATA INFILE
コマンドを出力し、mysql
にこのテンポラリファイルをロードさせます。テンポラリファイルが作成されるデフォルトのディレクトリはテンポラリディレクトリです。これは、mysqlbinlog
の local-load
オプションで変更できます。
MySQL 4.1
より前は、同じ名前のテンポラリテーブルを使用する複数の異なるスレッドのクエリがバイナリログに含まれていました。そのため、これらのクエリが混ざっている場合、mysqlbinlog
は mysql
に対して適切な出力を提供できませんでした。これは、MySQL
4.1 で解決されています。
また、mysqlbinlog
--read-from-remote-server
を使用して、リモート MySQL
サーバから直接バイナリログを読み取ることも可能です。ただし、より簡単に、稼動中の
MySQL
サーバにバイナリログを適用できるようにするため、これはいずれ廃止する予定です。
詳細については、mysqlbinlog --help
を実行してください。
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.