MySQL读写分离部署实践

 更新时间:2026年01月27日 10:30:15   作者:杨了个杨8982  
文章介绍了如何配置和使用ProxySQL进行MySQL主从复制集群的部署,包括环境准备、安装ProxySQL、配置主从服务器、设置读写分离、用户认证、监控和性能优化等步骤

1.环境准备

配置主从复制的 MySQL 集群(1 主多从)Mysql主从复制部署

开放必要的网络端口:

  • 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-ProxySQL

sudo 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
EOF

sudo yum install proxysql -y

3. 配置 ProxySQL

通过管理接口连接到 ProxySQL

# 启动 ProxySQL 服务
systemctl start proxysql
systemctl enable proxysql

yum install mysql -y

mysql -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;

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • 详解Mysql双机热备和负载均衡的实现步骤

    详解Mysql双机热备和负载均衡的实现步骤

    MySQL数据库没有增量备份的机制,但它提供了一种主从备份的机制,就是把主数据库的所有的数据同时写到备份数据库中。这篇文章主要介绍了Mysql的双机热备和负载均衡,需要的朋友可以参考下
    2019-10-10
  • 浅析Mysql Join语法以及性能优化

    浅析Mysql Join语法以及性能优化

    在讲MySQL的Join语法前还是先回顾一下联结的语法,呵呵,其实连我自己都忘得差不多了,那就大家一起温习吧,这里我有个比较简便的记忆方法,内外联结的区别是内联结将去除所有不符合条件的记录,而外联结则保留其中部分。外左联结与外右联结的区别在于如果用A左联结B则A中所有记录都会保留在结果中,此时B中只有符合联结条件的记录,而右联结相反,这样也就不会混淆了。
    2014-05-05
  • mysql全量备份、增量备份实现方法

    mysql全量备份、增量备份实现方法

    这篇文章主要介绍了mysql全量备份、增量备份实现方法,需要的朋友可以参考下
    2016-12-12
  • MySQL触发器的使用场景及方法实例

    MySQL触发器的使用场景及方法实例

    这篇文章主要给大家介绍了关于MySQL触发器的使用场景及方法的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-12-12
  • MySQL数据库的shell脚本自动备份

    MySQL数据库的shell脚本自动备份

    这篇文章主要介绍了MySQL数据库的shell脚本自动备份的相关资料,网站或应用的后台都有备份数据库的功能按钮,但需要去手工执行。我们需要一种安全的,每天自动备份的方法需要的朋友可以参考下
    2017-03-03
  • 基于ubuntu中使用mysql实现opensips用户认证的解决方法

    基于ubuntu中使用mysql实现opensips用户认证的解决方法

    本篇文章小编为大家介绍,基于ubuntu中使用mysql实现opensips用户认证的解决方法。需要的朋友参考下
    2013-04-04
  • 深入mysql主从复制延迟问题的详解

    深入mysql主从复制延迟问题的详解

    本篇文章是对mysql中主从复制延迟的问题进行了详细的分析介绍,需要的朋友参考下
    2013-06-06
  • MySql中时间字段增加函数索引方式

    MySql中时间字段增加函数索引方式

    文章介绍了MySQL中对时间字段建索引的注意事项,指出在查询时对时间字段使用函数会导致索引失效,并建议通过函数索引或优化SQL避免该问题,同时提醒MySQL 8.0.13前版本不支持函数索引
    2025-10-10
  • mysql 表索引的一些要点

    mysql 表索引的一些要点

    这篇文章主要介绍了mysql 表索引的一些注意事项,mysql默认优化不如sqlserver,所以需要优化,而一些成熟的cms为了利益,也不会帮大家数据库优化的很好,需要自己另外设置
    2013-11-11
  • windows下mysql 8.0.27 安装配置方法图文教程

    windows下mysql 8.0.27 安装配置方法图文教程

    这篇文章主要为大家详细介绍了windows下mysql 8.0.27 安装配置方法图文教程,文中安装步骤介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2022-04-04

最新评论