是否可以要求ProxySQL在读取时使用特定的GTID?

时间:2019-07-17 15:40:35

标签: mysql gtid proxysql

我们有一个应用程序,它向ProxySQL发出写操作,然后立即发出可能受写操作影响的读操作。 ProxySQL的后面是四个MySQL服务器-一个写入器和三个从写入器复制的读取器。

现在,ProxySQL能够通过记录从原始写入的OK数据包中发回的GTID和来自读取器的binlog提要来记录,以确保它选择了一个“最新”读取器,以确保它选择了已执行已经写了。

我们的问题是,由于我们的拓扑结构,读取实际上可能通过与写入不同的连接到达ProxySQL。因此,“读取”连接可能持有较旧的GTID,因此可能会选择尚未发生写入的“非最新”读取器。

如果可以告诉ProxySQL以确保读者使用最新的“指定的” GTID(我们自己从OK数据包中解析出的GTID)而不是连接上的GTID,我们可以看到一个可能的解决方案,但是我们不知道我们是否可以这样做-我在文档中什么都看不到。

任何对可行解决方案的想法都将受到欢迎!

我们将MySQL 5.7.25与ProxySQL 2.0.3-29-g00f26d5一起使用。

当前的结果是,我们通常先执行写操作,然后执行读操作,但是读操作返回写操作之前存在的状态。

2 个答案:

答案 0 :(得分:0)

我的理解是,proxysql支持开箱即用的GTID-在满足某些情况时。

  1. binlog_format是ROW
  2. 后端session_track_gtids上的
  3. 设置为OWN_GTID
  4. proxysql的监视用户位于后端服务器上
  5. mysql_replication_hostgroups也已设置

答案 1 :(得分:0)

对于ProxySQL来说,今天的现状(2.0.3-29-g00f26d50)似乎还没有“答案”,尽管ProxySQL的人愿意为此付费建立设施。

同时,我们已采取以下步骤:使用writer(通过将其分配给一个组并进行选择)来进行必须与上一个调用保持最新状态的读取,因为它将始终保持最新的一致视图。这将对性能造成影响,但如果此类请求不太常见,则可以接受。