proxysql系列~ 读写分离核心介绍

基础
1 如果不配置任何匹配规则,则所有读写都会打入主库
2 事务内的读操作被看作事务的一部分,会打入主库
场景
1 预先所有读写都在主库,然后编写匹配规则,将一部分sql写上正则匹配,打入从库
2 将所有读都在从库,然后编写匹配规则,将一部分sql写上正则匹配,打入主库 (推荐)
mysql_query_rules
关键字段
username:用户名筛选,当设置为非NULL值时,只有匹配的用户建立的连接发出的查询才会被匹配。
client_addr:通过源地址进行匹配。
match_pattern: 是基于原始SQL语句进行匹配的,包括参数值(常用) 如果想对match_pattern取反,即不被正则匹配的SQL语句才命中规则,则设置mysql_query_rules表中的字段negate_match_pattern=1
digest:此值可以通过 stats_mysql_query_digest 进行查询 匹配相同的sql语句

插入
insert into mysql_query_rules(rule_id,active,match_pattern,destination_hostgroup,apply) values(rule_id,1,'正则表达式','主还是从',1) 正则^select .*

具体规则

digest 匹配 类似0xC2E46F0CB1023FA5  
match_pattern 类似 '^select' 基于原始SQL语句进行匹配的,带值
match_digest 类似 基于sql模具匹配的 (常用) 案例 ^select .*table.*

规则从上向下匹配 ^select 放在最后一条

查看匹配规则是否命中
select * from stats_mysql_query_rules; 查看规则是否被hit

原文地址:https://www.cnblogs.com/danhuangpai/p/11733133.html