0

MySQL 5.6 用の Galera クラスターを使用しています。主にデバッグのために、DB へのすべての変更を追跡するために、
Python mysql レプリケーション クライアント ( https://github.com/noplay/python-mysql-replication ) を使用しています。これは以前はうまくいきました。次のようなデータが得られました。

=== UpdateRowsEvent ===
Date: 2012-10-07T15:03:17
Event size: 45
Read bytes: 11
Table: test.test4
Affected columns: 3
Changed rows: 1
Affected columns: 3
Values:
--
* data : Hello => World
* id : 1 => 1
* data2 : World => Hello

最近、クラスター構成を変更しました。次の 2 つのパラメーターを追加しました ( https://severalnines.com/blog/how-set-asynchronous-replication-galera-cluster-standalone-mysql-server-gtidのアドバイスに基づいて):

gtid_mode=ON
log_slave_updates=1
enforce_gtid_consistency

クラスタはまだ正常に動作しています (ただし、非同期スレーブはまだ設定できていません)。しかし、Python レプリケーション クライアントの動作が変更されました。これで、以前のようにイベントで値が取得されなくなりました。これが今得られるすべてです:

=== UpdateRowsEvent ===
Date: 2019-07-15T13:01:22
Log position: 1384
Event size: 369
Read bytes: 23
Table: db.table
Affected columns: 42
Changed rows: 0
Affected columns: 42
Values:
()   

「変更された行」は常に 0 のままです。GTID モードへの変更がクライアントに影響を与えた可能性が最も高いです。以前のように人間が読める値を取得することはまだ可能ですか?

レプリケーション イベントを監視するコードは次のとおりです。

with open('../secrets.json') as f:
    data = json.load(f)

mysql_settings = {'host': data['mysql']['ip'], 'port': data['mysql']['port'], \
        'user': data['mysql']['user'], 'passwd': data['mysql']['password']}

stream = BinLogStreamReader(connection_settings = mysql_settings, server_id = 100,
        log_file = "mysql-bin.001231", log_pos = 214, resume_stream = True)

for binlogevent in stream:
    binlogevent.dump()
stream.close()
4

1 に答える 1