ProxySQL是一个灵活强大的MySQL代理层,可以实现读写分离,支持 Query 路由、SQL Cache,动态加载配置、故障切换和 SQL 过滤等功能。部署ProxySQL以实现后端数据库负载均衡,以下是安装步骤及常用操作SQL。
- 安装文件下载
根据服务器的架构下载对应的rpm版本,下载地址https://repo.proxysql.com/ProxySQL/。
因为ProxySQL安装需要依赖gnutls,需要看下安装的gnutls版本
gnutls-cli --version
如果,你的版本是GnuTLS 3.x,是较新的版本,主要的库文件为/usr/lib64/libgnutls.so.30。如果你的操作系统为ky10.x86_64,则需要下载ProxySQL的centos8.x86_64的版本。
如果,你的版本是GnuTLS 2.8.x ,主要的库文件为/usr/lib64/libgnutls.so.28。如果你的操作系统为centos,下载centos7版本就行。
博主的安装文件为proxysql-2.7.0-1-centos8.x86_64.rpm
- 安装依赖
yum install -y gnutls perl-DBD-MySQL perl-DBI perl-devel
- 解压安装包并修改配置文件
rpm2cpio proxysql-2.0.14-1-centos7.x86_64.rpm | cpio -ivdm
vim ./etc/proxysql.cnf
修改proxysql.cnf文件配置项
datadir = "/var/lib/proxysql" #数据存储目录,绝对路径
errorlog = "/var/lib/proxysql/proxysql.log" #日志存储目录,绝对路径
admin_variables=
{
admin_credentials="admin:admin"
# mysql_ifaces="127.0.0.1:6032;/tmp/proxysql_admin.sock"
mysql_ifaces="0.0.0.0:6032" #管理端口,默认为6032,可以修改为自定义端口
# refresh_interval=2000
# debug=true
}
mysql_variables=
{
threads=4
max_connections=2048
default_query_delay=0
default_query_timeout=36000000
have_compress=true
poll_timeout=2000
# interfaces="0.0.0.0:6033;/tmp/proxysql.sock"
interfaces="0.0.0.0:6033" #流量转发端口,对外服务端口,可以修改为自定义端口
...
}
- 启动服务
./usr/bin/proxysql -c ./etc/proxysql.cnf --no-monitor
- 修改配置
#登录proxySQL
mysql -u admin -padmin -h 127.0.0.1 -P6032
#配置全局日志
SET mysql-eventslog_filename='proxysql_queries.log';
SET mysql-eventslog_default_log=1;
SET mysql-eventslog_format=2;
LOAD MYSQL VARIABLES TO RUNTIME; #加载到运行时
SAVE MYSQL VARIABLES TO DISK; #存储到磁盘
#插入后端数据库
insert into mysql_servers(hostgroup_id, hostname, port) values(1, '172.26.92.139', 3306);
insert into mysql_servers(hostgroup_id, hostname, port) values(1, '172.26.34.139', 3306);
insert into mysql_servers(hostgroup_id, hostname, port) values(1, '172.26.34.140', 3306);
load mysql servers to runtime;
save mysql servers to disk;
#插入后端用户名密码
insert into mysql_users(username, password, active, default_hostgroup, backend, frontend)
values('root', 'XXXX', 1, 1, 1, 1);
load mysql users to runtime;
save mysql users to disk;
#配置转发规则
insert into mysql_query_rules(rule_id, active, match_digest, destination_hostgroup, mirror_hostgroup, apply) values(1, 1, '.', 1, 2, 1);
load mysql query rules to runtime;
save mysql query rules to disk;
完成以上步骤后,您可以通过 ProxySQL 经由6033端口对数据库进行操作,执行以下SQL运行成功则proxySQL成功部署。
mysql -u admin -padmin -P6033 -h 127.0.0.1 -e"select * from db_name.table_name"
如果需要再修改proxySQL的服务端口,博主试过直接修改配置文件后重启proxy服务但是修改并未生效,通过执行下面SQL语句修改也未生效。 最后的方法是找到proxysql.db文件,删掉这个文件且重新初始化proxySQL。
UPDATE global_variables SET variable_value='0.0.0.0:8122' WHERE variable_name='mysql-interfaces';
LOAD MYSQL VARIABLES TO RUNTIME;
SAVE MYSQL VARIABLES TO DISK;
SELECT * FROM global_variables WHERE variable_name LIKE '%interface%';