Proxysql安装配置
1.ProxySQL 介绍
ProxySQL 是基于 MySQL 的一款开源的中间件的产品(类似MYCAT),是一个灵活的 MySQL 代理层,可以实现读写分离,支持 Query 路由功能,支持动态指定某个 SQL 进行缓存,支持动态加载(无需重启 ProxySQL 服务),故障切换和一些 SQL 的过滤功能。
1.安装架构
IP Server-id 数据库版本 备注
192.168.2.153 1 MySQL 客户端 ProxySQL2.0.15
192.168.2.103 2 MySQL 8.0.18服务 Master(主库)
192.168.2.169 3 MySQL 8.0.18服务 Slave1(从库)
192.168.2.251 4 MySQL 8.0.18服务 Slave1(从库)
2.安装部署方法
步骤1:192.168.2.153上安装依赖包
操作系统环境为centos 6.5
为下载好的依赖包要依次按顺序安装,用root用户执行
rpm -ivh perl-DBI-1.616-1.el6.rfx.x86_64.rpm
rpm -ivh perl-DBD-MySQL-4.013-3.el6.x86_64.rpm
rpm -ivh proxysql-2.0.15-1-centos67.x86_64.rpm
2.验证安装是否正常
执行命令rpm -ql proxysql
图上属于安装正常
vi /etc/proxysql.cnf
修改这2个值,第一个线程数32,第二个是MYSQL的版本这个要对应你服务器安装MYSQL的版本。
3.启动代理服务
service proxysql start
验证启动成功
4.所有数据库建立代理MYSQL账号
192.168.2.103,192.168.2.169,192.168.2.251分离建立代理用户
用户名:proxysql
密码设置为:pwproxysql
赋予全部权限(因为监管程序有一些建索引需求)
建完用户之后
ALTER USER ‘proxysql’@’%’ IDENTIFIED WITH mysql_native_password BY ‘pwproxysql’;
FLUSH PRIVILEGES;
然后再其他电脑上能通过账号联入即可,用Navicat for MySQL在其他电脑上验证,能查询!
或者用mysql -u -p -h 命令其他服务器上测试!
然后每个MYSQL服务器执行
set global max_connect_errors = 900000000000;
show variables like ‘max_connect_errors’;
flush hosts;
5.建立监控账号
192.168.2.103,192.168.2.169,192.168.2.251分离建立监控用户
用户名:monitor
密码设置为:monitor
赋予全部权限建完用户之后
ALTER USER monitor@’%’ IDENTIFIED WITH mysql_native_password BY ‘monitor’;
FLUSH PRIVILEGES;
然后再其他电脑上能通过账号联入即可,用Navicat for MySQL在其他电脑上验证,能查询!
或者用mysql -u -p -h 命令其他服务器上测试!
6.进入到192.168.2.153(6032端口跟6033端口需要打开防火墙)
mysql -h 127.0.0.1 -P 6032 -u admin -padmin
如果该服务器没有安装过MYSQL,则需要安装MYSQL客户端
rpm -Uvh mysql-community-common-8.0.16-2.el6.x86_64.rpm
rpm -Uvh mysql-community-libs-8.0.16-2.el6.x86_64.rpm
rpm -Uvh mysql-community-libs-compat-8.0.16-2.el6.x86_64.rpm
rpm -Uvh mysql-community-client-8.0.16-2.el6.x86_64.rpm
安装完成之后,成功登录代理管理端端口6032
执行下面:
set mysql-default_charset=‘utf8mb4’;
set mysql-default_sql_mode=‘NO_ENGINE_SUBSTITUTION’;
set mysql-mysql-max_allowed_packet=67108864;
set mysql-ping_interval_server_msec=300000; #sleep会话保持时长300s
set mysql-max_connections=4000; #ProxySQL能处理的和前端客户端的最大连接
set mysql-server_version=‘8.0.16’; #proxysql响应给客户端的MySQL版本号
LOAD MYSQL VARIABLES TO RUNTIME;
SAVE MYSQL VARIABLES TO DISK;
执行
insert into mysql_replication_hostgroups(writer_hostgroup,reader_hostgroup,comment) values(1,2,‘高可用’);
insert into mysql_servers(hostgroup_id,hostname,port,weight,comment) values(1,‘192.168.2.103’,3306,1,‘Write Group’);
insert into mysql_servers(hostgroup_id,hostname,port,weight,comment) values(2,‘192.168.2.169’,3306,1,‘Read Group’);
insert into mysql_servers(hostgroup_id,hostname,port,weight,comment) values(2,‘192.168.2.251’,3306,1,‘Read Group2’);
Insert into mysql_users (username,password,default_hostgroup) values (‘proxysql’,‘pwproxysql’,1);
Insert into mysql_query_rules(rule_id,active,match_pattern,destination_hostgroup,apply) values (1,1,’^select.*for update$’,1,1);
Insert into mysql_query_rules(rule_id,active,match_pattern,destination_hostgroup,apply) values (2,1,’^select’,2,1);
验证是不是各个MYSQL是不是正常通的
select * from mysql_server_ping_log;
null就代表是正常的,如果不正常会有异常报错信息!
//加载到内存
load mysql users to runtime;
load mysql servers to runtime;
load mysql query rules to runtime;
load mysql variables to runtime;
load admin variables to runtime;
//永久生效
save mysql users to disk;
save mysql servers to disk;
save mysql query rules to disk;
save mysql variables to disk;
save admin variables to disk;
验证成功
mysql -uproxysql -ppwproxysql -P6033 -h127.0.0.1 -e “select @@datadir”;
mysql -uproxysql -ppwproxysql -P 6033 -h 127.0.0.1 -e “select @@server_id;”
每个SELECT每次执行都分开查不同的数据库实例!