mysqlbinlog — バイナリログファイルを処理するためのユーティリティ

サーバが生成するバイナリログファイルはバイナリフォーマットで書かれています。これらのファイルをテキストフォーマットで確認するには、mysqlbinlogユーティリティを使用してください。それに加えて、複製セットアップ内のスレーブサーバによって書き出されたリレイログファイルを読み取るのにmysqlbinlogを使用することもできます。リレイログはバイナリログファイルと同じフォーマットです。

mysqlbinlogは以下のように起動してください。

shell> mysqlbinlog [options] log_file ...

例えば、binlog.000003と名づけられたバイナリログファイルの内容を表示するにはこのコマンドを使用してください。

shell> mysqlbinlog binlog.0000003

出力にはbinlog.000003内の全てのイベントが含まれています。イベント情報は実行されたステートメント、実行に必要な時間、発行したクライアントのスレッドID、実行時のタイムスタンプ等が含まれています。

ログ内にステートメントを再付加するためにmysqlbinlogの出力は再実行することができます(例えば、mysqlの入力として使用することで)。これはサーバがクラッシュした再のリカバリオペレーションとして便利にです。他の使用例は、後にこのセクションに登場するディスカッションを参照してください。

通常、バイナリログファイルを直接読み取りにmysqlbinlog使用し、ローカルMySQLサーバに付加します。--read-from-remote-serverオプションを使用してリモートサーバからバイナリログを読み取ることも可能です。リモートバイナリログを読み取る場合、接続パラメータオプションを提供することでどのようにしてサーバと接続すればよいか示しています。これらのオプションは--host--password--port--protocol, --socket、と--userになります。--read-from-remote-serverオプションを使用した場合以外では、無視されます。

バイナリログやリレイログは項 「バイナリ ログ」と項 「レプリケーション リレーとステータス ファイル」でさらに詳細を参照することができます。

mysqlbinlogは次のオプションをサポートします。

--var_name=value 構文を使用することで以下の構文をセットすることができます。

--set-variable=var_name=value or -O var_name=value構文を使用することで、変数をセットすることも可能です。構文は反対語となっています。.

mysqlbinlogの出力をmysqlクライアントにパイプすることができます。 これはバイナリログに含まれるステートメントを実行するために行います。バックアップが古い(項 「データベースのバックアップ」を参照してください)場合、クラッシュからのリカバーに使用します。例:

shell> mysqlbinlog binlog.000001 | mysql

または

shell> mysqlbinlog binlog.[0-9]* | mysql

mysqlbinlogの出力をテキストファイルにリダイレクトすることもできます。これは、先にステートメントログを改良する必要がある場合に行います。(例えば、実行したくないステートメントを取り除かなければいけないときに)。ファイル編集後、mysqlプログラムの入力として使用することで含まれているステートメントを実行してください。

mysqlbinlogには--start-positionオプションがあります。ある特定のポジションよりも等価もしくは大きいオフセットを持つ、バイナリログ内のステートメントのみをプリントします(そのポジションは1つのイベントのスタートをマッチしなければいけません)。それはある特定の日付と時刻を与えられているイベントをスタート・ストップさせるオプションも有しています。これにより、--stop-datetimeオプションを使用してpoint in timeリカバリの実行を有効化します(例えば、「データベースを10:30分現在の状態まで巻き戻す」といったことが可能になります)。

MySQLサーバ上で1つ以上のバイナリログを実行しなければいけない場合、サーバに対して1つの接続で処理するのが安全です。以下に危険な例を示します。

shell> mysqlbinlog binlog.000001 | mysql # DANGER!!
shell> mysqlbinlog binlog.000002 | mysql # DANGER!!

最初のログファイルにCREATE TEMPORARY TABLEステートメントが含まれており、2番目のログにはテンポラリテーブルを使用するステートメントが含まれている場合、サーバに対して異なる接続を使用してバイナリログを処理すると問題が発生します。最初のmysql処理が停止したとき、サーバはテンポラリテーブルをドロップします。2番目のmysql処理でテーブルの使用を試みると、サーバは「認識されていないテーブル」として報告します。

このような問題を回避するには、処理したいバイナリログの内容を実行するために1つの接続を使用してください。以下に1例を示します。

shell> mysqlbinlog binlog.000001 binlog.000002 | mysql

また、ログを全て1つのファイルに書き込み、ファイルを処理するのも手です。

shell> mysqlbinlog binlog.000001 >  /tmp/statements.sql
shell> mysqlbinlog binlog.000002 >> /tmp/statements.sql
shell> mysql -e "source /tmp/statements.sql"

mysqlbinlogはオリジナルデータファイルなしでLOAD DATA INFILEオペレーションを再生する出力を生成することができます。mysqlbinlogはデータをテンポラリファイルにコピーし、ファイルに関連するLOAD DATA LOCAL INFILEステートメントを書きます。これらのファイルが書かれているディレクトリ内のデフォルトロケーションはシステムごとに異なります。ディレクトリを明示的に指定したい場合は、--local-loadオプションを使用してください。

mysqlbinlogLOAD DATA INFILEステートメントをLOAD DATA LOCAL INFILE ステートメントに変換するため、(つまり、LOCALを追加する)ステートメントの処理に使用するクライアントとサーバ双方がLOCAL機能を許容するようにコンフィギャされていなければいけません。項 「LOAD DATA LOCAL のセキュリティ関連事項」 を参照してください。

警告:LOAD DATA LOCALステートメント用に作成されたテンポラリファイルは、自動的には消去されません。これは、それらステートメントを実際に実行するまで必要になるからです。ステートメントログが必要なくなった時点でユーザがテンポラリファイルを消去する必要があります。これらのファイルはテンポラリファイルディレクトリに存在し、original_file_name-#-#といった名前がついています。

--hexdumpオプションはコメント内にログ内容の16進性ダンプを生成します。

shell> mysqlbinlog --hexdump master-bin.000001

上記のコマンドを使用すれば、出力は以下の様になります。

/*!40019 SET @@session.max_insert_delayed_threads=0*/;
/*!50003 SET @OLD_COMPLETION_TYPE=@@COMPLETION_TYPE,COMPLETION_TYPE=0*/;
# at 4
#051024 17:24:13 server id 1  end_log_pos 98
# Position  Timestamp   Type   Master ID        Size      Master Pos    Flags
# 00000004 9d fc 5c 43   0f   01 00 00 00   5e 00 00 00   62 00 00 00   00 00
# 00000017 04 00 35 2e 30 2e 31 35  2d 64 65 62 75 67 2d 6c |..debug.l|
# 00000027 6f 67 00 00 00 00 00 00  00 00 00 00 00 00 00 00 |og..............|
# 00000037 00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00 |................|
# 00000047 00 00 00 00 9d fc 5c 43  13 38 0d 00 08 00 12 00 |.......C.8......|
# 00000057 04 04 04 04 12 00 00 4b  00 04 1a                |.......K...|
#       Start: binlog v 4, server v 5.0.15-debug-log created 051024 17:24:13
#       at startup
ROLLBACK;

16進性ダンプ出力は、現在以下のエレメントを含んでいます。このフォーマットは将来変更される可能性があります。