MySQL 5.5からMySQL 5.0へのロールバックメソッドの候補としてmysqlbinlog
コマンドを調べました。
MySQL 5.5サーバーのbin-logファイルの1つでコマンドを実行したとき、これらのbase64ステートメントに気づきました。
/*!40019 SET @@session.max_insert_delayed_threads=0*/;
/*!50003 SET @OLD_COMPLETION_TYPE=@@COMPLETION_TYPE,COMPLETION_TYPE=0*/;
DELIMITER /*!*/;
# at 4
#111219 19:25:06 server id 395220 end_log_pos 107 Start: binlog v 4, server v 5.5.18-log created 111219 19:25:06
BINLOG '
ko/vTg/UBwYAZwAAAGsAAAAAAAQANS41LjE4LWxvZwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAEzgNAAgAEgAEBAQEEgAAVAAEGggAAAAICAgCAA==
'/*!*/;
# at 107
#111219 19:25:06 server id 370534 end_log_pos 171 Query thread_id=387276 exec_time=73680 error_code=0
MySQL 5.0のbin-logファイルを確認したところ、これらのステートメントが欠落していることに気付きました。私の最初の推測では、これはMySQLレプリケーションの新機能でした。 MySQL 5.0でMySQL 5.5のバイナリログを使用しないでください。したがって、データのロールバックを約束できる唯一の方法は、クエリをクエリとして実行することです。
私が走ったときmysqlbinlog --base64-output=NEVER
、base64ステートメントが消えていることに気付きました。それらがプレーンテキストクエリに変換されることを期待していましたが、そうではありませんでした。
誰かがそれらのbase64ステートメントが何を意味するかについてより多くの光を置くことができますか?
おかげで、
シャハール。
•--base64-output [= value]このオプションは、BINLOGステートメントを使用して、イベントをbase-64文字列としてエンコードして表示するタイミングを決定します。オプションには次の許容値があります(大文字と小文字は区別されません)。
■AUTO(「自動」)またはUNSPEC(「未指定」)は、必要に応じて(つまり、フォーマット記述イベントと行イベントの場合)BINLOGステートメントを自動的に表示します。 --base64-outputオプションを指定しない場合、効果は--base64-output = AUTOと同じです。
注意
Mysqlbinlogの出力を使用してバイナリログファイルの内容を再実行する場合、自動BINLOG表示が唯一の安全な動作です。他のオプション値は、実行可能な形式ですべてのイベントを含まない出力を生成する可能性があるため、デバッグまたはテストの目的のみを目的としています。
■ALWAYSは、可能な場合は常にBINLOGステートメントを表示します。 --base64-outputオプションを値なしで指定した場合、効果は--base64-output = ALWAYSと同じです。
注意
MySQL 5.6でレプリケーションを変更すると、このオプションによって生成される出力が使用できなくなるため、常にMySQL 5.5.8で非推奨になり、MySQL 5.6では無効な値になります。
■NEVERを指定すると、BINLOGステートメントは表示されません。 BINLOGを使用して表示する必要がある行イベントが見つかった場合、mysqlbinlogはエラーで終了します。
■DECODE-ROWSは、-verboseオプションも指定して、行イベントをデコードしてコメント化されたSQLステートメントとして表示することをmysqlbinlogに指定します。 NEVERと同様に、DECODE-ROWSはBINLOGステートメントの表示を抑制しますが、NEVERとは異なり、行イベントが検出されてもエラーで終了しません。
行イベント出力に対する--base64-outputおよび--verboseの影響を示す例については、セクション4.6.7.2「mysqlbinlog行イベントの表示」を参照してください。
警告
バイナリログには下位互換性がないことに注意してください。
ServerFaultでは、マスターのバイナリログが破損していると誰かが考え、バイナリログの開始点が異なることに気付かなかった 私は次のことを説明することによって対処しました:
空のバイナリログのファイルサイズは
すでに指摘したように、レプリケーションは5.0マスターから5.5スレーブまで機能し、その逆は機能しません。