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的Grant命令详解

    MySQL的Grant命令详解

    mysql中可以通过Grant命令为数据库赋予用户权限,这里简单介绍下Grant的使用方法,需要的朋友可以参考下
    2013-10-10
  • 关于MyISAM和InnoDB对比分析

    关于MyISAM和InnoDB对比分析

    这篇文章主要介绍了关于MyISAM和InnoDB对比分析,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2025-06-06
  • 详解MySQL如何避免克隆失败后再次初始化

    详解MySQL如何避免克隆失败后再次初始化

    本文章讨论了当您没有足够的磁盘空间来存储两个数据集时,使用带有安全选项DATA DIRECTORY 的 CLONE INSTANCE 命令,所以接下来小编给大家详细的介绍一下,MySQL如何避免克隆失败后再次初始化,需要的朋友可以参考下
    2023-10-10
  • mysql中使用UDF自动同步memcached效率笔记

    mysql中使用UDF自动同步memcached效率笔记

    接上篇:mysql使用mysql-udf-http效率测试笔记 ,这次不使用rest架构,而是使用:libmemcached和memcached_functions_mysql
    2011-08-08
  • MySQL二进制日志(bin_log)的作用与使用方法

    MySQL二进制日志(bin_log)的作用与使用方法

    BinLog又称为二进制日志,是MySQL服务层的数据日志,MySQL所有的存储引擎都支持BinLog,这篇文章主要给大家介绍了关于MySQL二进制日志(bin_log)的作用与使用方法的相关资料,需要的朋友可以参考下
    2024-06-06
  • mysql查询的控制语句图文详解

    mysql查询的控制语句图文详解

    这篇文章主要给大家介绍了关于mysql查询控制语句的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2021-04-04
  • mysql表的内连和外连实战记录

    mysql表的内连和外连实战记录

    在开发中我们的业务需求有时候是复杂的,多张表联合查询的时候是有多种方式的,面对不同的需求,灵活使用不同的表连接方式,这篇文章主要给大家介绍了关于mysql表内连和外连的相关资料,需要的朋友可以参考下
    2024-01-01
  • MySQL使用命令创建、删除、查询索引的介绍

    MySQL使用命令创建、删除、查询索引的介绍

    今天小编就为大家分享一篇关于MySQL使用命令创建、删除、查询索引的介绍,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随小编来看看吧
    2019-03-03
  • MySQL 配置优化(多个参数)

    MySQL 配置优化(多个参数)

    安装MySQL后,配置文件my.cnf在 /MySQL安装目录/share/mysql目录中,该目录中还包含多个配置文件可供参考,有my-large.cnf ,my-huge.cnf, my-medium.cnf,my-small.cnf,分别对应大中小型数据库应用的配置。win环境下即存在于MySQL安装目录中的.ini文件
    2016-05-05
  • Mysql中key和index的区别点整理

    Mysql中key和index的区别点整理

    在本篇文章里小编给大家整理的是关于Mysql中key和index的区别点整理,需要的朋友们可以学习下。
    2020-03-03

最新评论