MySQL读写分离部署
目录
1.环境准备
2. 安装 ProxySQL
3. 配置 ProxySQL
3.1 配置 MySQL 主从服务器
3.2 配置读写分离规则
3.3 配置 MySQL 用户认证
3.4 配置监控用户(可选但推荐)
4.验证配置
5.客户端连接 ProxySQL
6.性能优化建议
7.监控与维护
8.故障处理
1.环境准备
配置主从复制的 MySQL 集群(1 主多从)Mysql主从复制部署-CSDN博客
开放必要的网络端口:
ProxySQL 默认监听端口:6032(管理端口)、6033(客户端连接端口)
MySQL 主从服务器端口(默认 3306)
2. 安装 ProxySQL
# 添加YUM仓库配置
wget https://repo.proxysql.com/ProxySQL/repo_pub_key -O /etc/pki/rpm-gpg/RPM-GPG-KEY-ProxySQL
rpm --import /etc/pki/rpm-gpg/RPM-GPG-KEY-ProxySQLsudo tee /etc/yum.repos.d/proxysql.repo <<EOF
[proxysql]
name= ProxySQL YUM repository
baseurl=http://repo.proxysql.com/ProxySQL/proxysql-2.4.x/centos/\$releasever
enabled=1
EOFsudo yum install proxysql -y
3. 配置 ProxySQL
通过管理接口连接到 ProxySQL
# 启动 ProxySQL 服务
systemctl start proxysql
systemctl enable proxysqlyum install mysql -ymysql -u admin -padmin -h 127.0.0.1 -P6032
3.1 配置 MySQL 主从服务器
use main;-- 添加主库
INSERT INTO mysql_servers(hostgroup_id, hostname, port) VALUES (10, '主库IP', 3306);-- 添加从库(多个从库重复此步骤)
INSERT INTO mysql_servers(hostgroup_id, hostname, port) VALUES (20, '从库1IP', 3306);
INSERT INTO mysql_servers(hostgroup_id, hostname, port) VALUES (20, '从库2IP', 3306);-- 检查添加结果
select * from main.mysql_servers;-- 应用配置
LOAD MYSQL SERVERS TO RUNTIME;
SAVE MYSQL SERVERS TO DISK;
3.2 配置读写分离规则
-- 写操作路由到主库(hostgroup_id=10)
INSERT INTO mysql_query_rules(rule_id, active, match_digest, destination_hostgroup, apply)
VALUES (1, 1, '^INSERT|^UPDATE|^DELETE|^REPLACE|^CREATE|^ALTER|^DROP', 10, 1);-- 读操作路由到从库(hostgroup_id=20)
INSERT INTO mysql_query_rules(rule_id, active, match_digest, destination_hostgroup, apply)
VALUES (2, 1, '^SELECT', 20, 1);-- 应用配置
load mysql query rules to runtime;
load admin variables to runtime;
save mysql query rules to disk;
save admin variables to disk;
3.3 配置 MySQL 用户认证
-- 添加MySQL客户端用户(与MySQL实际用户保持一致)
INSERT INTO mysql_users(username, password, default_hostgroup)
VALUES ('业务用户名', '业务用户密码', 10);-- 查询账户添加结果
select * from mysql_users;-- 应用配置
LOAD MYSQL USERS TO RUNTIME;
SAVE MYSQL USERS TO DISK;
3.4 配置监控用户(可选但推荐)
-- 在MySQL主从服务器上创建监控用户
GRANT PROCESS, REPLICATION CLIENT ON *.* TO 'proxysql'@'%' IDENTIFIED BY '监控用户密码';
flush privileges;-- 在ProxySQL中配置监控用户
set mysql-monitor_username='proxysql';
set mysql-monitor_password='监控用户密码';
LOAD MYSQL VARIABLES TO RUNTIME;
SAVE MYSQL VARIABLES TO DISK;
4.验证配置
检查服务器状态:
SELECT * FROM mysql_servers;
SELECT * FROM runtime_mysql_servers;
检查查询规则:
SELECT * FROM mysql_query_rules;
SELECT * FROM runtime_mysql_query_rules;
5.客户端连接 ProxySQL
主机:ProxySQL服务器IP
端口:6033
用户名:业务用户名
密码:业务用户密码mysql -uroot -p'Asdf#1234' -P6033 -h 127.0.0.1
6.性能优化建议
-- 调整连接池大小(根据实际情况调整)
UPDATE global_variables SET variable_value=1000 WHERE variable_name='mysql-threads';
LOAD MYSQL VARIABLES TO RUNTIME;
SAVE MYSQL VARIABLES TO DISK;-- 启用压缩(减少网络传输)
UPDATE global_variables SET variable_value='true' WHERE variable_name='mysql-connections_compress';
LOAD MYSQL VARIABLES TO RUNTIME;
SAVE MYSQL VARIABLES TO DISK;
7.监控与维护
查看服务器状态:
-- 查看主从服务器状态
SELECT hostgroup_id, hostname, port, status FROM runtime_mysql_servers;-- 查看查询统计
SELECT hostgroup, count_star, sum_time, first_seen, last_seen FROM stats_mysql_query_digest;
监控 ProxySQL 性能:
# 使用内置监控命令
proxysql-admin --help# 查看系统状态
top -p $(pgrep proxysql)
8.故障处理
-- 将某个从库提升为主库(假设从库IP为192.168.1.101)
UPDATE mysql_servers SET hostgroup_id=10 WHERE hostname='192.168.1.101';
LOAD MYSQL SERVERS TO RUNTIME;
SAVE MYSQL SERVERS TO DISK;-- 配置主从自动切换
-- 定义主从复制组(hostgroup_id 10=主库,20=从库)
INSERT INTO mysql_replication_hostgroups (writer_hostgroup, reader_hostgroup)
VALUES (10, 20);
LOAD MYSQL SERVERS TO RUNTIME;
SAVE MYSQL SERVERS TO DISK;