在高并发、大数据量的 Web 应用中,数据库往往成为系统性能的瓶颈。为了提升数据库的读取性能和整体可用性,数据库读写分离是一种非常有效的解决方案。本文将围绕 CentOS 系统,以 MySQL 为例,详细讲解如何搭建主从复制实现读写分离,即使是刚入门的小白也能轻松上手。
什么是数据库读写分离?
简单来说,读写分离就是将数据库的写操作(INSERT、UPDATE、DELETE)发送到主库(Master),而读操作(SELECT)则分发到一个或多个从库(Slave)。这样可以有效减轻主库的压力,提高系统整体性能和稳定性。
准备工作
在开始之前,请确保你有以下环境:
两台 CentOS 7/8 服务器(一台作为 Master,一台作为 Slave) 已安装 MySQL 5.7 或 8.0(建议版本一致) 两台服务器网络互通,防火墙开放 3306 端口 具备 root 或 sudo 权限第一步:配置主库(Master)
登录主库服务器,编辑 MySQL 配置文件:
sudo vim /etc/my.cnf
在
[mysqld]段落下添加以下配置:
[mysqld]server-id=1log-bin=mysql-binbinlog-do-db=your_database_name # 可选,指定同步的数据库binlog-ignore-db=mysql # 可选,忽略同步的数据库
保存并重启 MySQL 服务:
sudo systemctl restart mysqld
接下来,创建用于主从同步的用户:
mysql -u root -p-- 在 MySQL 命令行中执行CREATE USER 'repl'@'%' IDENTIFIED BY 'StrongPassword123!';GRANT REPLICATION SLAVE ON *.* TO 'repl'@'%';FLUSH PRIVILEGES;
记录当前 binlog 文件名和位置(后续从库配置需要):
SHOW MASTER STATUS;
输出类似如下:
+------------------+----------+--------------+------------------+| File | Position | Binlog_Do_DB | Binlog_Ignore_DB |+------------------+----------+--------------+------------------+| mysql-bin.000001 | 154 | your_db | mysql |+------------------+----------+--------------+------------------+
第二步:配置从库(Slave)
编辑从库的 MySQL 配置文件:
sudo vim /etc/my.cnf
添加以下配置(注意 server-id 必须唯一):
[mysqld]server-id=2relay-log=mysql-relay-binread_only=1
重启 MySQL:
sudo systemctl restart mysqld
登录 MySQL,配置主从连接:
CHANGE MASTER TO MASTER_HOST='主库IP地址', MASTER_USER='repl', MASTER_PASSWORD='StrongPassword123!', MASTER_LOG_FILE='mysql-bin.000001', MASTER_LOG_POS=154;START SLAVE;
检查从库状态:
SHOW SLAVE STATUS\G
如果看到
Slave_IO_Running: Yes和
Slave_SQL_Running: Yes,说明主从复制已成功启动!
第三步:应用程序实现读写分离
完成主从配置后,还需在应用层实现读写分离。常见做法包括:
使用中间件如 MyCat、ShardingSphere 在代码中手动区分读写连接(例如 PHP 的 PDO、Java 的 Spring DataSource) 使用负载均衡器(如 HAProxy)配合健康检查自动分发读请求至此,你已经成功在 CentOS 上搭建了基于 MySQL 主从复制 的读写分离架构。这种 数据库高可用架构 能显著提升系统性能和容灾能力。
常见问题排查
从库无法连接主库:检查防火墙、网络连通性、主库是否允许远程连接 Slave_SQL_Running 为 No:查看错误日志,可能是 SQL 冲突或数据不一致 主从延迟过大:优化主库写入压力,或升级从库硬件通过本教程,相信你已经掌握了 CentOS数据库读写分离 的核心配置方法。赶紧动手试试吧!
