Python mysql 复制客户端不显示值

标签 python mysql galera multi-master-replication

我们正在使用 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

集群仍然正常工作(尽管我们还无法设置异步从站)。但是 python 复制客户端的行为已经改变。现在我们没有像之前那样从事件中获得任何值(value)。这就是我们现在得到的全部:

=== 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()

最佳答案

最终我们找到了解决方案。最终事情变得非常简单。用户需要 具有复制客户端、复制从属以及对所有数据库的读取权限。奇怪的是,脚本没有给出任何错误。

关于Python mysql 复制客户端不显示值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57053697/

相关文章:

mysql - 无法重启 MySQL 服务器

python - nn.Embedding 模块如何直观地与一般嵌入的概念相关联?

php - MySQL查询返回非对象?

python - 如何将 "key = value;"对的字符串转换为 ansible 中的字典?

php - PHP如何生成HTML文件?

mysql中使用正则表达式进行mysql查询

mysql - 一个节点死亡后,3 节点 Galera 集群的定义行为是什么?

python - 按唯一属性值过滤数据类实例

android - Kivy 键盘高度

python - 如何在 scrapy 中覆盖/使用 cookie