proxysql软件包的下载地址:
Github下载地址: https://github.com/sysown/proxysql/releases
proxysql网站的下载地址:https://proxysql.com/documentation/installing-proxysql/
可以yum直接安装
配置文件路径/etc/proxysql.cnf
启动proxysql的服务
service proxysql start
注:6032是proxysql的管理端口号,6033是对外服务的端口号
用户名和密码都是默认的admin
关闭proxysql:
service proxysql stop
管理员的登录命令:
/usr/local/mysql/bin/mysql -uadmin -padmin -h 127.0.0.1 -P 6032
可见有四个库:main 、disk 、stats 和monitor。分别说明一下这四个库的作用。
main:内存配置数据库,即MEMORY,表里存放后端db实例、用户验证、路由规则等信息。main库中有如下信息:
库下的主要表:
mysql_servers ——后端可以连接mysql服务器的列表。
mysql_users——配置后端数据库的账号和监控的账号。
mysql_query_rules——指定query路由到后端不同服务器的规则列表。
注:表名以runtime_开头的表示proxysql当前运行的配置内容,不能通过DML语句修改。只能修改对应的不以runtime开头的表,然后“LOAD”使其生效,“SAVE”使其存到硬盘以供下次重启加载。
disk库:持久化磁盘的配置。
stats库:统计信息的汇总。
monitor库:一些监控的收集信息,包括数据库的健康状态等。
配置PROXYSQL监控
首先在master()上创建proxysql的监控账户和对外访问账户并赋予权限。
给全权限。
proxysql有一套很完整的配置系统,方便DBA对线上的操作。整套配置系统分为三层,顶层为RUNTIME,中间层为MEMORY,底层也就是持久层为DISK和CONFIG FILE。
RUNTIME:代表proxysql当前生效的正在使用的配置,无法直接修改这里的配置,必须要从下一层“load”进来。
MEMORY:MEMORY层上面连接RUNTIME层,下面连接持久化层。在这层可以正常操作proxysql配置,随便修改,不会影响生产环境。修改一个配置一般都是先在MEMORY层完成的,确认正常之后再加载到RUNTIME和持久化到磁盘上。
DISK和CONFIG FILE:持久化配置信息,重启后内存中的配置信息会丢失,所以需要将配置信息保留在磁盘中。重启时,可以从磁盘快速加载回来。
然后用超管用户登录proxysql来添加主从服务器列表。
insert into mysql_servers (hostgroup_id,hostname,port) values (10,'192.168.2.100',3306);
insert into mysql_servers (hostgroup_id,hostname,port) values (10,'192.168.2.101',3306);
insert into mysql_servers (hostgroup_id,hostname,port) values (10,'192.168.2.102',3306);
load mysql servers to runtime;
save mysql servers to disk;
登录proxysql之后,凡是进行任何操作,都需要运行load ** to runtime,从memory加载到runtime,再执行save ** to disk 持久化到磁盘。
加载完成之后,三台机器都是online 状态。
接下来继续为proxysql配置监控账号,命令如下:
set mysql-monitor_username='monitor';
set mysql-monitor_password='monitor';
load mysql variables to runtime;
save mysql variables to disk;
配置proxysql主从分组信息
这里会用到一张表mysql_replication_hostgroups;
里面的writer_hostgroup是写入组的编号,reader_hostgroup是读取组的编号。10作为写入组,20作为读取组编号。
insert into mysql_replication_hostgroups values (10,20,'proxy');
load mysql servers to runtime;
save mysql servers to disk;
proxysql 会根据server的read_only的取值将服务器进行分组。read_only=0的server,master被分到编号为10的写组,read_only=1的server,slave则被分到编号为20的读组。
配置对外访问账号,默认指定主库,并对该用户开启事务持久化保护。
注:mysql_users表中的transaction_persistent字段默认为0,建议在创建完用户之后设置为1,避免发生脏读、幻读等现象,命令如下:
insert into mysql_users(username,password,default_hostgroup) values ('wcf','wcf',10);
update mysql_users set transaction_persistent=1 where username='zs';
load mysql users to runtime;
save mysql users to disk;
注:对外访问的端口号需要指定为6033.
配置读写分离策略
配置读写分离策略需要使用mysql_query_rules表。表中的match_pattern字段就是代表设置的规则,destination_hostgroup字段代表默认指定的分组,apply代表真正执行应用规则。
把所有以select开头的语句全部分配到编号为20的读组中。select for update会产生一个写锁,对数据查询的时效性要求高,把它分配到编号为10的写组中,其他所有操作都会默认路由到写组中。
命令如下:
insert into mysql_query_rules(active,match_pattern,destination_hostgroup,apply) values (1,'^select.*for update$',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;