MySQL BINLOG(GTID)からSQLステートメントを表示
-
26-09-2020 - |
質問
私はgtidを通して複製のためにMySQL Binlogを持っています。
このような実行された更新/挿入ステートメントを表示しようとしています。
mysqlbinlog --base64-output=DECODE-ROWS mysql-bin.000024
.
しかし私が見るのはこのようなものです、更新または挿入STMTの痕跡はありません:
SET TIMESTAMP=1431681617/*!*/;
BEGIN
/*!*/;
# at 746987321
# at 746987392
# at 746987484
#150515 11:20:17 server id 1 end_log_pos 746987515 CRC32 0xeb874754 Xid = 997501767
COMMIT/*!*/;
# at 746987515
#150515 11:20:22 server id 1 end_log_pos 746987563 CRC32 0xc5ece64a GTID [commit=yes]
SET @@SESSION.GTID_NEXT= 'a4ade293-c63a-11e4-94cf-005056944a56:2059057'/*!*/;
# at 746987563
#150515 11:20:22 server id 1 end_log_pos 746987650 CRC32 0x92296355 Query thread_id=71622 exec_time=0 error_code=0
.
GTIDレプリケーションのフォーマット/構成とそれを探す場所についてはよくわかりません...
解決
オプション - verboseを追加する必要があるようです。
mysqlbinlog --base64-output=AUTO --verbose mysql-bin.000005
.
表示された結果:
### UPDATE `customer`
### WHERE
### @1=388442
### @2=382023
### @3='2015:05:30'
### @4='2015:06:02'
### @5=3
### @6=1
### @7=0
.
@xは、その順序のテーブル列です。
他のヒント
GTIDはあなたの問題であるとは思わない。
あなたはおそらく行ベースのバイナリロギングを使用しています
これを検証するには、次のいずれかを実行します。
SELECT @@global.binlog_format;
SHOW GLOBAL VARIABLES LIKE 'binlog_format';
SELECT variable_value FROM information_schema.global_variables
WHERE variable_name='binlog_format';
.
ROW
またはMIXED
を参照してください。 SQLを見る唯一の方法では、 STATEMENT
のmy.cnf
グローバルトランザクション識別子を使用したレプリケーション
gtidsを使用して、文ベースまたは行ベースのレプリケーションを使用できます(17.1.2項「レプリケーション形式」を参照)。ただし、最良の結果を得るためには、行ベースのフォーマットを使用することをお勧めします。
それでも、指定されたバイナリログで実際のSQLを見ることはありません。
このツールを試してください binlog2sql 、Binログを更新/挿入ステートメントに解析します。
その使用法の説明は中国語ですが、例コマンドからポイントを取得できると思います。
私は
を使うことを好みますmysqlbinlog -v --base64-output=DECODE-ROWS /files/
.
:
- "--base64-outputオプションが指定されていない場合、効果は--base64-output= auto" と同じです。
- "--base64-output= decode-rowsと--verboseの組み合わせは、SQLステートメントとしてのみ行イベントを見るための便利な方法を提供します(BINLOGステートメントを拡張)
"列ごとにデータ型といくつかのメタデータも表示するには、 - verboseまたは-vを指定します。"
引用符のソース:man mysqlbinlog
所属していません dba.stackexchange