ProxySQL中间件事务表现
--2022-06-21
1、前言
目前公司已经使用了200个左右的ProxySQL实例,已经使用了2年多,基本的需求为读写分离,但是为了满足强制读主的需求,设置查询规则为:
不开事务的读,默认发送到从实例上
开事务的读,默认发送到主实例上
但是有些开发童鞋,比较迷惑,到底如何开启事务,才能让读SQL 强制到主实例上执行。
下面进行测试
2、测试具体
2.1、ProxySQL配置
2.2、 强制开事务方式:[begin,start transaction]
2.3、通过设置自动提交的方式来开事务:[set autocommit=0]
set autocommit=0这种,是直接在中间件ProxySQL层就返回,不会转发到后端MySQL主实例,
【尝试设置规则表,让其转发到主实例】:
【SQL测试示例1】:
【SQL测试示例2】:
3、总结
set autocommit=0 虽然没有转发到后端主实例,但是可以保证不自动提交,但是如果先查询,就会查询到从实例,再以查询的结果执行更新等写动作,就会有数据延后或者不对的情况。 如果想强制读主库,需要明确开启事务,使用begin 或 start transaction,同时为了保证后续SQL也会在相同的实例执行,需要配置mysql_users表的transaction_persistent为1,解释如下: 当某用户开始一个事务后,该事务内的请求在基于查询规则进行路由时,可能会路由到不同的主机组中。为了避免这种情况,需要启用transaction_persistent来保证事务持久。(只有在事务结束后,该用户的请求才允许路由到其它主机组)
文章转载自雷雷DBA,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。




