MySQL proxysql一读写分离环境搭建

MySQL proxysql一读写分离环境搭建

1. 规划数据库磁盘路径,以下为例

主机

IP

路径

数据文件

proxysql

192.168.10.111

master

192.168.10.111

/home/mysql

/home/mysql/mysql_data

slave

192.168.10.113

/home/mysql

/home/mysql/mysql_data

2. 安装前准备

参考《MySQL Replication一主多从环境搭建》,完成mysql的一主多从的环境搭建

3. 安装proxysql

登录主机设置下载配置,$releasever为centos操作系统版本

cat

[proxysql_repo]

name= ProxySQL YUM repository

baseurl=Index of /ProxySQL/proxysql-2.3.x/centos/$releasever

gpgcheck=1

gpgkey=https://repo.proxysql.com/ProxySQL/repo_pub_key

EOF

安装proxysql

yum install proxysql

4. 启动 ProxySQL库

启动

systemctl start proxysql.service

查看进程及端口

netstat -anlp | grep proxysql

6032 是 ProxySQL 的管理端口号,6033是对外服务的端口号

查看 ProxySQL 的版本

proxysql --version

停止

systemctl stop proxysql.service

5. 管理员登录 ProxySQL用户

mysql -uadmin -padmin -h 127.0.0.1 -P 6032

这里的mysql就是安装在主机上的mysql命令

执行 show databases;

 

6. 主库创建用户

需要在my.cnf 加上这个用户认证方式,再来创建用户

[mysqld]

default_authentication_plugin=mysql_native_password

重启主库

create user 'monitor'@'%' identified by '123456';

grant all privileges on *.* to 'monitor'@'%' with grant option;

create user 'proxysql'@'%' identified by '123456';

grant all privileges on *.* to 'proxysql'@'%' with grant option;

flush privileges;

查看用户

select user,host,plugin from mysql.user;

用户认证的方式为 mysql_native_password

 

7. 创建组

writer_hostgroup 和reader_hostgroup 写组和读组都要大于0且不能相同,我的环境下,写组定义与1,读组定义为2

管理员登录 ProxySQL

mysql> use main

mysql> use maininsert into mysql_replication_hostgroups ( writer_hostgroup, reader_hostgroup, comment) values (1,2,'proxy');

提交生效

mysql> use mainload mysql servers to runtime;

mysql> use mainsave mysql servers to disk;

8. 添加 mysql 主机到 mysql_servers 表中

mysql>insert into mysql_servers(hostgroup_id,hostname,port,weight,comment) values(1,'192.168.10.111',3306,1,'Write Group');

mysql>insert into mysql_servers(hostgroup_id,hostname,port,weight,comment) values(2,'192.168.10.113',3306,1,'Read Group');

提交生效

mysql> load mysql servers to runtime;

mysql> save mysql servers to disk;

9. mysql_users 表中添加刚才在 master 上创建的账号 proxysql

mysql>insert into mysql_users(username,password,default_hostgroup,transaction_persistent)values('proxysql','123456',1,1);

提交生效

mysql>load mysql users to runtime;

mysql>save mysql users to disk;

10. proxysql主机端修改变量设置健康检测的账号

mysql>set mysql-monitor_username='monitor';

mysql>set mysql-monitor_password='monitor';

提交生效

mysql>load mysql variables to runtime;

mysql>save mysql variables to disk;

查看变量

mysql> show variables like '%monitor%';

11. 配置proxysql组信息

insert into mysql_replication_hostgroups(writer_hostgroup,reader_hostgroup,comment) values(1,2,'proxy');

mysql> load mysql servers to runtime;

mysql> save mysql servers to disk;

12. 添加读写分离的路由规则

mysql>insert into mysql_query_rules(rule_id,active,match_digest,destination_hostgroup,apply)values(1,1,'^SELECT.*FOR UPDATE$',1,1);

mysql>insert into mysql_query_rules(rule_id,active,match_digest,destination_hostgroup,apply)values(2,1,'^SELECT',2,1);

提交生效

mysql>load mysql query rules to runtime;

mysql>load admin variables to runtime;

mysql>save mysql query rules to disk;

mysql>save admin variables to disk;

查看

mysql>select rule_id,active,match_digest,destination_hostgroup,apply from mysql_query_rules;

13. 用jdbc登录时需要设置mysql的版本

mysql>set mysql-server_version='8.0.26';

mysql>load mysql variables to runtime;

mysql>save mysql variables to disk;

查看变量

mysql> show variables like '%version%';

14. 验证读写分离

用proxysql用户登录

mysql -uproxysql -p123456 -h 192.168.10.111 -P6033

执行查询和插入操作

在proxysql主机端用admin登录查询

select * from stats_mysql_query_digest;

如图,读写分离成功

 

15. 配置相关

整套配置系统分为三层:顶层为 RUNTIME ,中间层为 MEMORY , 底层也就是持久层 DISK 和 CONFIG FILE 。

RUNTIME : 代表 ProxySQL 当前生效的正在使用的配置,无法直接修改这里的配置,必须要从下一层 “load” 进来。 MEMORY: MEMORY 层上面连接 RUNTIME 层,下面连接持久层。这层可以正常操作 ProxySQL 配置,随便修改,不会影响生产环境。修改一个配置一般都是现在 MEMORY 层完成的,确认正常之后在加载达到 RUNTIME 和 持久化的磁盘上。

DISK 和 CONFIG FILE:持久化配置信息,重启后内存中的配置信息会丢失,所需要将配置信息保留在磁盘中。重启时,可以从磁盘快速加载回来。

为了将配置持久化到磁盘或者应用到 runtime,在管理接口下有一系列管理命令来实现它们。 

a) 要重新配置 MySQL 用户,可执行下面的其中一个命令:

1、LOAD MYSQL USERS FROM MEMORY / LOAD MYSQL USERS TO RUNTIME

 将内存数据库中的配置加载到 runtime 数据结构,反之亦然。

2、SAVE MYSQL USERS TO MEMORY / SAVE MYSQL USERS FROM RUNTIME

 将 MySQL 用户从 runtime 持久化到内存数据库。

3、LOAD MYSQL USERS TO MEMORY / LOAD MYSQL USERS FROM DISK

 从磁盘数据库中加载 MySQL 用户到内存数据库中。

4、SAVE MYSQL USERS FROM MEMORY / SAVE MYSQL USERS TO DISK

 将内存数据库中的 MySQL 用户持久化到磁盘数据库中。

5、LOAD MYSQL USERS FROM CONFIG /从配置文件中加载 MySQL 用户到内存数据库中。

b) 要处理 MySQL server:

1、LOAD MYSQL SERVERS FROM MEMORY / LOAD MYSQL SERVERS TO RUNTIME

 将 MySQL server 从内存数据库中加载到 runtime。

2、SAVE MYSQL SERVERS TO MEMORY / SAVE MYSQL SERVERS FROM RUNTIME

 将 MySQL server 从 runtime 持久化到内存数据库中。

3、LOAD MYSQL SERVERS TO MEMORY / LOAD MYSQL SERVERS FROM DISK

 从磁盘数据库中加载 MySQL server 到内存数据库。

4、SAVE MYSQL SERVERS FROM MEMORY / SAVE MYSQL SERVERS TO DISK

 从内存数据库中将 MySQL server 持久化到磁盘数据库中。

6、LOAD MYSQL SERVERS FROM CONFIG / 从配置文件中加载 MySQL server 到内存数据库中

c) 要处理 MySQL 的查询规则(mysql query rules):

1、 LOAD MYSQL QUERY RULES FROM MEMORY / LOAD MYSQL QUERY RULES TO RUNTIME

 将 MySQL query rules 从内存数据库加载到 runtime 数据结构。

2、 SAVE MYSQL QUERY RULES TO MEMORY / SAVE MYSQL QUERY RULES FROM RUNTIME

 将 MySQL query rules 从 runtime 数据结构中持久化到内存数据库。

3、 LOAD MYSQL QUERY RULES TO MEMORY / LOAD MYSQL QUERY RULES FROM DISK

 从磁盘数据库中加载 MySQL query rules 到内存数据库中。

4、 SAVE MYSQL QUERY RULES FROM MEMORY / SAVE MYSQL QUERY RULES TO DISK

 将 MySQL query rules 从内存数据库中持久化到磁盘数据库中。

5、 LOAD MYSQL QUERY RULES FROM CONFIG / 从配置文件中加载 MySQL query rules 到内存数据库中。

d) 要处理 MySQL 变量(MySQL variables):

1、 LOAD MYSQL VARIABLES FROM MEMORY / LOAD MYSQL VARIABLES TO RUNTIME

 将 MySQL variables 从内存数据库加载到 runtime 数据结构。

2、 SAVE MYSQL VARIABLES TO MEMORY / SAVE MYSQL VARIABLES FROM RUNTIME

 将 MySQL variables 从 runtime 数据结构中持久化到内存数据中。

3、 LOAD MYSQL VARIABLES TO MEMORY / LOAD MYSQL VARIABLES FROM DISK

 从磁盘数据库中加载 MySQL variables 到内存数据库中。

4、 SAVE MYSQL VARIABLES FROM MEMORY / SAVE MYSQL VARIABLES TO DISK

 将 MySQL variables 从内存数据库中持久化到磁盘数据库中。

5、 LOAD MYSQL VARIABLES FROM CONFIG / 从配置文件中加载 MySQL variables 到内存数据库中。

e) 要处理管理变量(admin variables):

1、 LOAD ADMIN VARIABLES FROM MEMORY / LOAD ADMIN VARIABLES TO RUNTIME

 将 admin variables 从内存数据库加载到 runtime 数据结构。

2、 SAVE ADMIN VARIABLES TO MEMORY / SAVE ADMIN VARIABLES FROM RUNTIME

 将 admin variables 从 runtime 持久化到内存数据库中。

3、 LOAD ADMIN VARIABLES TO MEMORY / LOAD ADMIN VARIABLES FROM DISK

 从磁盘数据库中加载 admin variables 到内存数据库中。

4、 SAVE ADMIN VARIABLES FROM MEMORY / SAVE ADMIN VARIABLES TO DISK

 将 admin variables 从内存数据库中持久化到磁盘数据库。

5、 LOAD ADMIN VARIABLES FROM CONFIG / 从配置文件中加载 admin variables 到内存数据库中。

 

 

f) 几个最常用的命令

如何让修改的配置生效(runtime),以及如何持久化到磁盘上(disk)。记住,只要不是加载到 runtime,修改的配置就不会生效。

LOAD MYSQL USERS TO RUNTIME;  将内存数据库中的配置加载到 runtime 数据结构

SAVE MYSQL USERS TO DISK;   将内存数据库中的 MySQL 用户持久化到磁盘数据库中。

LOAD MYSQL SERVERS TO RUNTIME;  将 MySQL server 从内存数据库中加载到 runtime。

SAVE MYSQL SERVERS TO DISK;   从内存数据库中将 MySQL server 持久化到磁盘数据库中。

LOAD MYSQL QUERY RULES TO RUNTIME;  将 MySQL query rules 从内存数据库加载到 runtime 数据结构。

SAVE MYSQL QUERY RULES TO DISK;  将 MySQL query rules 从内存数据库中持久化到磁盘数据库中。

LOAD MYSQL VARIABLES TO RUNTIME;  将 MySQL variables 从内存数据库加载到 runtime 数据结构。

SAVE MYSQL VARIABLES TO DISK;   将 MySQL variables 从内存数据库中持久化到磁盘数据库中。

LOAD ADMIN VARIABLES TO RUNTIME;   将 admin variables 从内存数据库加载到 runtime 数据结构。

SAVE ADMIN VARIABLES TO DISK;  将 admin variables 从内存数据库中持久化到磁盘数据库。

select * from mysql_servers;select * from stats_mysql_connection_pool;select * from disk.mysql_users;select rule_id,active,match_digest,destination_hostgroup,apply from mysql_query_rules;select * from mysql_replication_hostgroups;

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值