web-dev-qa-db-ja.com

mysql binlog(GTID)からのSQLステートメントを表示する

GTIDによるレプリケーション用のmysql binlogがあります。

私は次のように実行された更新/挿入ステートメントを表示しようとしています:

mysqlbinlog --base64-output=DECODE-ROWS mysql-bin.000024

しかし、私が見るのはこのようなものであり、更新または挿入の痕跡はありません:

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レプリケーションのフォーマット/構成と、それを探す場所がわからない...

5
Glasnhost

オプション--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は、テーブル列の順序です

8
Glasnhost

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を確認する唯一の方法は、 binlog_formatSTATEMENTmy.cnfに設定し、mysqldを再起動することです。 MySQLドキュメントのグローバルトランザクション識別子 とのレプリケーションは、最初の段落で述べています。

GTIDでステートメントベースまたは行ベースのレプリケーションを使用できます(セクション17.1.2「レプリケーション形式」を参照)。ただし、最良の結果を得るには、行ベースの形式を使用することをお勧めします。

それにもかかわらず、指定されたバイナリログで実際のSQLを確認することはできません。

2
RolandoMySQLDBA

このツールを試してください binlog2sql 、binログを解析してステートメントを更新/挿入します。
その使用法の説明は中国語ですが、コマンド例から要点を理解できると思います。

0
Peter