MySQL运维实战之ProxySQL(9.3)使用ProxySQL实现读写分离

本文详细介绍了如何通过proxysql的mysql_query_rules表进行读写分离配置,包括hostgroup、用户设置、规则匹配和Caching_SHA2_password的特殊处理,以及如何根据SQL语句类型进行路由控制。
摘要由CSDN通过智能技术生成

作者:俊达

proxysql读写分离主要通过mysql_query_rules表中的规则来实现。

下面是具体的配置步骤:

1 hostgroup配置

insert into mysql_servers (
  hostgroup_id, hostname, port, max_replication_lag)
values ( 100, '172.16.121.236', 3380, 3);

insert into mysql_servers (
  hostgroup_id, hostname, port, max_replication_lag)
values ( 101, '172.16.121.237', 3380, 3);


load mysql servers  to runtime; 
SAVE MYSQL servers  TO DISK;

2 user配置

后端服务器创建用户

mysql> create user 'user1'@'%' identified by 'user1-backend';
Query OK, 0 rows affected (0.02 sec)

mysql> grant all privileges on *.* to 'user1'@'%';
Query OK, 0 rows affected (0.02 sec)

proxysql上配置用户信息

insert into mysql_users
(username, password, transaction_persistent, backend, frontend, comment)
values ('user1', 'user1-backend', 1, 1, 1, 'backend user for user1');

load mysql users  to runtime; 
SAVE MYSQL users  TO DISK;

用户表字段说明:

字段描述
username用户名。
password账号密码。可以使用明文,或者使用hash。若后端账号使用caching_sha2_password,则需要使用明文密码
use_ssl是否开启ssl
default_hostgroup默认hostgroup
default_schema默认schema
schema_locked暂时不支持
transaction_persistent设置为1时,如果连接开启了事务,则该连接后续的SQL转发给同一个hostgroup。读写分离场景下,通常需要将事务中的SELECT查询转发到主库,以保证事务一致性,可以将transaction_persistent设置为1。该字段默认为1
fast_forward设置为1时,绕过query路由选择,直接将SQL转发到指定hostgroup。
backend设置为1时,表示该账号是后端账号
frontend设置为1时,表示该账号是前端账号
max_connections后端连接池
comment描述

mysql 8.0 caching_sha2_password

如果后端mysql版本是8.0,并且后端账号使用了caching_sha2_password插件认证,则需要这样配置:

1、admin-hash_passwords设置为false

set admin-hash_passwords=1;

-- 加载 & 持久化配置项 
 LOAD ADMIN VARIABLES to runtime;
 save ADMIN VARIABLES to disk;

 -- 确认配置生效
 mysql> select * from runtime_global_variables where variable_name = 'admin-hash_passwords';
+----------------------+----------------+
| variable_name        | variable_value |
+----------------------+----------------+
| admin-hash_passwords | false           |
+----------------------+----------------+

2、mysql_users表的password字段写入账号明文

load mysql users to runtime;
save mysql users to disk;


-- 确认runtime_mysql_users表中的密码是明文
mysql> select username, password from runtime_mysql_users where username = 'user1';
+----------+---------------+
| username | password      |
+----------+---------------+
| user1    | user1-backend |

3 配置读写分离规则

insert into mysql_query_rules
(rule_id, username, match_pattern, destination_hostgroup,active, apply, comment )
values (101, 'user1', '^SELECT.*FOR UPDATE$', 100,1,1, 'user1 route to hostgroup 100');

insert into mysql_query_rules
(rule_id, username, match_pattern, destination_hostgroup, active, apply, comment)
values (102, 'user1', '^SELECT', 101,1,1, 'user1 select query route to hostgroup 101');


-- 生效规则 & 保存规则
load mysql query rules to runtime; 
SAVE MYSQL QUERY RULES TO DISK;

mysql_query_rules表字段说明:

字段描述
rule_id规则ID。proxysql 按rule_id的顺序来判断SQL的路由
active规则是否启用
username连接用户。如果配置了username,则使用该username连接的会话发送的SQL才能匹配当前规则。
schemaname如果配置了schemaname,则默认数据库名为该schemaname的会话发送的SQL才能匹配当前规则
match_pattern正则表达式,匹配SQL文本
negate_match_pattern如果设置为1,则只有不匹配match_pattern的SQL才匹配当前规则
destination_hostgroupSQL转发目的hostgroup
apply如果设置为1,则匹配当前规则后,就直接转发,不再匹配后续规则。
comment描述

在实际应用过程中,我们可以精细化配置SQL匹配规则,将特定模式的SQL语句路由的只读节点执行。

更多技术信息请查看云掣官网https://yunche.pro/?t=yrgw

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值