在CentOS系统中实现MySQL读写分离是提升数据库性能和可用性的重要手段,通过将读操作和写操作分配到不同的MySQL服务器,可以有效减轻主数据库的负载,提高整体系统的响应速度和稳定性,本文将详细介绍在CentOS环境下搭建MySQL读写分离的步骤、关键配置及注意事项。

环境准备
在开始配置读写分离之前,需要准备至少两台CentOS服务器,分别作为MySQL主库(Master)和从库(Slave),主库负责处理所有的写操作,从库负责处理读操作,确保所有服务器已安装MySQL,并且网络互通,防火墙规则允许MySQL端口(默认3306)的访问,建议为每台服务器配置静态IP地址,以避免网络变更导致配置失效。
主库配置
主库的配置重点是启用二进制日志,因为这是从库同步数据的基础,编辑MySQL的主配置文件my.cnf,通常位于/etc/my.cnf,在[mysqld]部分添加以下配置:
log-bin=mysql-bin
binlog-format=ROW
server-id=1 log-bin启用二进制日志,binlog-format=ROW确保记录的是行级别的变更,server-id为主库的唯一标识符,配置完成后,重启MySQL服务并登录MySQL,创建一个用于复制的用户,并授予必要的权限:
CREATE USER 'repl'@'%' IDENTIFIED BY 'password'; GRANT REPLICATION SLAVE ON *.* TO 'repl'@'%';
使用SHOW MASTER STATUS命令记录当前的二进制日志文件名和位置,这些信息将在从库配置中使用。
从库配置
从库的配置需要指向主库并启动复制过程,编辑从库的my.cnf文件,在[mysqld]部分添加以下配置:
server-id=2
relay-log=relay-bin
read-only=1 server-id必须与主库不同,relay-log设置中继日志的位置,read-only=1确保从库只能执行读操作,配置完成后,重启MySQL服务并登录MySQL,执行以下命令连接主库:

CHANGE REPLICATION SOURCE TO
MASTER_HOST='master_ip',
MASTER_USER='repl',
MASTER_PASSWORD='password',
MASTER_LOG_FILE='mysql-bin.000001',
MASTER_LOG_POS=0; 将master_ip、mysql-bin.000001和MASTER_LOG_POS替换为实际值,启动复制进程:
START REPLICA;
使用SHOW REPLICA STATUSG检查复制状态,确保Slave_IO_Running和Slave_SQL_Running均为Yes。
配置读写分离中间件
常用的MySQL读写分离中间件包括ProxySQL、Amoeba和MyCat,这里以ProxySQL为例,介绍其配置步骤,首先在CentOS上安装ProxySQL,然后登录ProxySQL的管理界面:
mysql -u admin -p -h 127.0.0.1 -P 6032
创建MySQL主从服务器组:
INSERT INTO mysql_servers (hostgroup_id, hostname, port) VALUES (10, 'master_ip', 3306); INSERT INTO mysql_servers (hostgroup_id, hostname, port) VALUES (20, 'slave_ip', 3306);
hostgroup_id=10用于主库,hostgroup_id=20用于从库,配置路由规则,将写操作路由到主库,读操作路由到从库:
INSERT INTO mysql_query_rules (rule_id, active, match_pattern, destination_hostgroup, apply) VALUES (1, 1, '^SELECT.* FOR UPDATE$', 10, 1); INSERT INTO mysql_query_rules (rule_id, active, match_pattern, destination_hostgroup, apply) VALUES (2, 1, '^SELECT', 20, 1);
加载配置并保存:

LOAD MYSQL SERVERS TO RUNTIME; SAVE MYSQL SERVERS TO DISK; LOAD MYSQL QUERY RULES TO RUNTIME; SAVE MYSQL QUERY RULES TO DISK;
验证读写分离
在应用程序中配置ProxySQL的地址(默认127.0.0.1:6032),然后执行读写操作,通过ProxySQL的监控界面或直接查询主从库,验证写操作是否路由到主库,读操作是否路由到从库,在ProxySQL中执行:
SELECT * FROM stats_mysql_query_digest;
查看查询是否按预期分配到不同的hostgroup。
注意事项
在配置过程中,需要确保主从复制的延迟较低,避免从库数据过旧导致的问题,应定期监控主从库的状态和性能,及时调整中间件配置,如果主库发生故障,需要手动或自动切换主库,并更新中间件的配置,对于高并发场景,建议增加从库的数量以分担读压力。
FAQs
Q1:如何判断MySQL主从复制是否正常?
A1:可以通过在从库上执行SHOW REPLICA STATUSG命令,检查Slave_IO_Running和Slave_SQL_Running的状态是否为Yes,以及Seconds_Behind_Master是否为0(表示无延迟),也可以在主库上创建测试表并插入数据,验证从库是否同步。
Q2:读写分离后,如何处理事务中的读写操作?
A2:事务中的读写操作通常需要路由到同一台服务器,以避免数据不一致,中间件如ProxySQL支持事务检测,会将事务中的所有操作路由到主库,通过配置规则将SELECT ... FOR UPDATE等锁定语句路由到主库,确保事务的原子性和一致性。
【版权声明】:本站所有内容均来自网络,若无意侵犯到您的权利,请及时与我们联系将尽快删除相关内容!
发表回复