ProxySQL2.4.4 + MySQL8读写分离

说明

ProxySQL 是基于 MySQL 的一款开源的中间件的产品,是一个灵活的 MySQL 代理层,可以实现读写分离,支持 Query 路由功能,支持动态指定某个 SQL 进行缓存,支持动态加载(无需重启 ProxySQL 服务),故障切换和一些 SQL 的过滤功能。


应用存储双活 (1).png

ProxySQL安装

这里以ubuntu20 proxy2.4.4 mysql8为环境进行安装

apt-get install -y --no-install-recommends lsb-release wget apt-transport-https ca-certificates gnupg
wget -O - 'https://repo.proxysql.com/ProxySQL/proxysql-2.4.x/repo_pub_key' | apt-key add -
echo deb https://repo.proxysql.com/ProxySQL/proxysql-2.4.x/$(lsb_release -sc)/ ./ | tee /etc/apt/sources.list.d/proxysql.list
apt-get update
apt-get install proxysql
service proxysql start

读写分离配置

ProxySQL读取proxysql.cnf文件并加载到内存数据库,启动后会监听两个端口,默认为6032和6033。6032端口是ProxySQL的管理端口;6033是ProxySQL对外提供服务的端口。

#登录本机 proxy
mysql -uadmin -padmin -P6032 -h127.0.0.1 --prompt 'admin> '
#添加远程用户
set admin-admin_credentials='admin:admin;proxy:123456';
select @@admin-admin_credentials;
load admin variables to runtime;
save admin variables to disk;

开启web监控

SET admin-web_enabled='true';
LOAD ADMIN VARIABLES TO RUNTIME;
SAVE ADMIN VARIABLES TO DISK;
select * from global_variables where variable_name LIKE 'admin-web_enabled';
select @@admin-web_enabled;
-- 浏览器访问
https://localhost:6080
用户名和密码:stats:stats

在之前的mgr master中添加监控和外部用户

#监控用户
create user 'monitor'@'%' IDENTIFIED BY 'monitor';
GRANT all privileges ON *.* TO 'monitor'@'%' with grant option;
flush privileges;
#外部用户
create user 'proxy'@'%' IDENTIFIED BY '123456';
GRANT all privileges ON *.* TO 'wr'@'%' with grant option; 
flush privileges;

proxysql中同步监控用户与外部用户

#监控用户
set mysql-monitor_username='monitor';
set mysql-monitor_password='monitor';
load mysql servers to runtime;
save mysql servers to disk;
select * from global_variables where variable_name in('mysql-monitor_username','mysql-monitor_password');
#外部用户
insert into mysql_users(username,password,default_hostgroup) values('proxy','123456',10);
update mysql_users set transaction_persistent=1 where username='proxy';
load mysql users to runtime;
save mysql users to disk;
#添加mgr集群信息
insert into mysql_servers(hostgroup_id,hostname,port,weight,comment) values(10,'10.0.16.15',3306,1,'master');
insert into mysql_servers(hostgroup_id,hostname,port,weight,comment) values(10,'10.0.16.5',3306,1,'slave1');
insert into mysql_servers(hostgroup_id,hostname,port,weight,comment) values(10,'10.0.4.13',3306,1,'slave2');
load mysql users to runtime;
save mysql users to disk;

proxysql中配置读写策略

#配置读写组
insert into mysql_replication_hostgroups(writer_hostgroup,reader_hostgroup,comment) values(10,20,'proxy');
load mysql servers to runtime;
save mysql servers to disk;
select * from mysql_replication_hostgroups;
#配置读写策略
insert into mysql_query_rules(active,match_pattern,destination_hostgroup,apply) values(1,'^SELECT.*FOR UPDATE/pre>,10,1);
insert into mysql_query_rules(active,match_pattern,destination_hostgroup,apply) values(1,'^SELECT',20,1);
LOAD MYSQL QUERY RULES TO RUNTIME;
SAVE MYSQL QUERY RULES TO DISK;
#配置查询select的请求转发到hostgroup_id 20读 10写
select * from  mysql_query_rules;
#查询用户所在组
select username,password,default_hostgroup from mysql_users;

proxysql中登录admin查询路由详情

#登入proxy 管理账号
mysql -uadmin -padmin -h127.0.0.1 -P6032 
#查询路由详情
select hostgroup,username,digest_text,count_star from stats_mysql_query_digest;

参考资料

https://juejin.cn/user/756893667307997
https://www.jianshu.com/p/5fb5eecc8be5
-end-

你可能感兴趣的:(ProxySQL2.4.4 + MySQL8读写分离)