mysql读写分离中间件proxysql

守給你的承諾、 提交于 2021-01-17 03:03:32

调研了下mysql读写分离的工具,有些工具是读使用1个端口,写使用另1个端口,对于使用者来说是有感的。proxysql可以使用同一个端口,当读的时候访问只读数据库,写的时候访问可写数据库,这样对使用者来说就是透明的。

这里用服务器A和服务器B(1.2.3.5)记录安装步骤。

服务器A(1.2.3.4):mysql端口33306,可写数据库read_only=0

服务器B(1.2.3.5):mysql端口33306,只读数据库read_only=1

并配置同步A主B从

零、安装proxysql
https://proxysql.com/documentation/installing-proxysql/

一、配置mysql
主从同步
从数据库my.cnf配置read_only=1,即只读

二、在mysql创建账号
监控账号
CREATE USER 'proxysql'@'%' IDENTIFIED BY 'xxx1';

GRANT ALL PRIVILEGES ON  *.* TO 'proxysql'@'%';

用户登录账号
CREATE USER 'muser'@'%' IDENTIFIED BY 'xxx2';

GRANT ALL PRIVILEGES ON monitor.* TO 'muser'@'%';

FLUSH PRIVILEGES;

三、配置proxysql,100是写权限,101是读权限

登录到proxysql,因为proxysql底层也是用mysql,所以是用mysql登录,默认6032是管理端口,6033是业务端口:mysql -uadmin -padmin -h127.0.0.1 -P6032
insert into mysql_servers(hostgroup_id,hostname,port,weight,max_connections,max_replication_lag,comment) values(100,'1.2.3.4',33306,1,1000,10,'test');
insert into mysql_servers(hostgroup_id,hostname,port,weight,max_connections,max_replication_lag,comment) values(100,'1.2.3.5',33306,1,1000,10,'test');

#以上2条命令的hostgroup_id写100或101都可以,因为最后proxysql会尝试连接数据库,并确认是可读还是可写的,并修改
insert into mysql_replication_hostgroups values(100,101,'read_only','masterha') ;
load mysql servers to runtime;
save mysql servers to disk;
select * from mysql_servers;

四、配置proxysql监控账号和用户账号
set mysql-monitor_username='proxysql';
set mysql-monitor_password='xxx1';
load mysql variables to runtime;
save mysql variables to disk;
insert into mysql_users(username,password,active,default_hostgroup,transaction_persistent) values('muser','xxx2',1,100,1);
load mysql users to runtime;
save mysql users to disk;

五、配置读写转发规则,select转到101组,select for update转到100组
INSERT INTO mysql_query_rules(active,match_pattern,destination_hostgroup,apply) VALUES(1,'^SELECT.*FOR UPDATE$',100,1);
INSERT INTO mysql_query_rules(active,match_pattern,destination_hostgroup,apply) VALUES(1,'^SELECT',101,1);
LOAD MYSQL QUERY RULES TO RUNTIME;
SAVE MYSQL QUERY RULES TO DISK;

六、验证,通过在6033执行一些命令,在proxysql查看执行语句对应的组

使用mysql的用户账号登录proxysql的6033端口:mysql -umuser -p'xxx2' -h127.0.0.1 -P6033,然后执行一些命令:select /create之类的
登录proxysql的管理6032端口:select * from stats_mysql_query_digest;

可以看到SELECT命令在101组的读权限执行。

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!