Python mysql 复制客户端未显示值
Python mysql replication client not showing values
我们正在为 MySQL 5.6 使用 Galera 集群。
我们一直在使用 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
最近我们更改了集群配置。我们添加了以下两个参数(基于这里的建议https://severalnines.com/blog/how-set-asynchronous-replication-galera-cluster-standalone-mysql-server-gtid):
gtid_mode=ON
log_slave_updates=1
enforce_gtid_consistency
集群仍然正常工作(虽然我们还不能设置异步slave)。但是 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:
()
"Changed rows" 始终保持为 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()
我们终于找到了解决办法。最后很简单。用户需要
具有复制客户端、复制从属和对所有数据库的读取访问权限。奇怪的是脚本没有给出任何错误。
我们正在为 MySQL 5.6 使用 Galera 集群。
我们一直在使用 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
最近我们更改了集群配置。我们添加了以下两个参数(基于这里的建议https://severalnines.com/blog/how-set-asynchronous-replication-galera-cluster-standalone-mysql-server-gtid):
gtid_mode=ON
log_slave_updates=1
enforce_gtid_consistency
集群仍然正常工作(虽然我们还不能设置异步slave)。但是 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:
()
"Changed rows" 始终保持为 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()
我们终于找到了解决办法。最后很简单。用户需要 具有复制客户端、复制从属和对所有数据库的读取访问权限。奇怪的是脚本没有给出任何错误。