我们正在将 MySQL 集群与 proxySQL 结合使用,并进行以下设置:
问题是这样的: 服务器 2 上的用户触发 SQL UPDATE,UPDATE 客户 SET name= 'New Name' WHERE id = 123。(此更新发送到服务器 1,然后服务器 2 更新)
在同一代码块中,如果我们选择记录(SELECT name FROMcustomers WHERE id =123),则该查询将发送到本地服务器,结果将是“旧名称”,除非我们暂停代码 1 秒(进行测试)。
我们想到的一个解决方案是更改连接 (PHP) 并直接转到服务器 1 来获取代码块的剩余部分,但这有点违背了目的,而且远非理想(安静的大型代码库需要更新)。
是否有涉及 proxySQL 的解决方案?
为了防止查询路由到具有高复制延迟的从属服务器,您可以在表 mysql_server 列中设置阈值最大复制延迟 最大复制延迟。参考:max_replication_lag
max_replication_lag – 如果大于 0,ProxySQL 将 定期监控复制延迟以及是否超出配置的范围 阈值,它将暂时避开主机,直到复制赶上。
您还可以创建查询规则来拆分查询读写。 ref : ProxySQL 拆分读/写
重要:proxysql-gtid-causal-reads 如果您使用的是 Mysql 版本 5.7.5 或更高版本,这可能主要解决您的问题。