CentOS环境下MySQL主从备份是保障数据高可用性和业务连续性的重要手段,通过主数据库(Master)的写操作与从数据库(Slave)的实时同步,既能实现读写分离减轻主库压力,又能在主库故障时快速切换,本文将详细介绍CentOS系统中MySQL主从备份的完整部署流程、核心配置及注意事项。

环境准备与基础配置
在部署主从备份前,需确保两台CentOS服务器(分别作为Master和Slave)已安装相同版本的MySQL(建议5.7或8.0版本),并关闭防火墙或开放MySQL端口(默认3306),基础环境配置包括:
- 主机名与IP规划:明确Master和Slave的IP地址(如Master:192.168.1.10,Slave:192.168.1.20),并在两台服务器上配置
/etc/hosts文件实现主机名互访。 - MySQL用户创建:在Master上创建用于复制的用户,执行以下SQL:
CREATE USER 'repl'@'%' IDENTIFIED BY 'Password123!'; GRANT REPLICATION SLAVE ON *.* TO 'repl'@'%'; FLUSH PRIVILEGES;
- 数据初始化:若Slave已有数据,需先与Master数据一致;若无数据,可直接从Master全量备份并导入Slave(使用
mysqldump的--master-data参数记录binlog位置)。
Master服务器配置
Master的核心配置是开启二进制日志(binlog)并指定唯一的服务器ID,步骤如下:

- 编辑MySQL配置文件:修改
/etc/my.cnf(或/etc/my.cnf.d/mysql-server.cnf),添加以下配置:[mysqld] server-id = 10 # 唯一ID,与Slave不同 log-bin = mysql-bin # 开启binlog,指定日志前缀 binlog-format = ROW # 推荐ROW模式,避免主从数据不一致 sync-binlog = 1 # 每次提交事务时同步binlog到磁盘,确保数据安全
- 重启MySQL服务:
systemctl restart mysqld,检查binlog是否生效:SHOW MASTER STATUS;,记录File(如mysql-bin.000001)和Position(如154)字段,后续配置需用到。
Slave服务器配置
Slave的配置需指定服务器ID并关联Master的binlog信息:
- 编辑MySQL配置文件:修改
/etc/my.cnf,添加:[mysqld] server-id = 20 # 唯一ID,与Master不同 relay-log = mysql-relay # 中继日志文件前缀 read-only = 1 # 设置为只读,避免误写操作
- 启动复制线程:登录Slave MySQL,执行以下命令(替换Master的IP、用户名及之前记录的binlog信息):
CHANGE REPLICATION SOURCE TO SOURCE_HOST='192.168.1.10', SOURCE_USER='repl', SOURCE_PASSWORD='Password123!', SOURCE_LOG_FILE='mysql-bin.000001', SOURCE_LOG_POS=154; START REPLICA;
- 验证复制状态:执行
SHOW REPLICA STATUS G;,检查Slave_IO_Running和Slave_SQL_Running均为Yes,且Seconds_Behind_Master为0(表示无延迟)。
主从复制监控与维护
- 日常监控:通过以下命令实时查看复制状态:
- Master端:
SHOW MASTER STATUS;(查看binlog位置)、SHOW PROCESSLIST;(检查复制连接)。 - Slave端:
SHOW REPLICA STATUS G;(重点检查错误信息)、SHOW SLAVE STATUS G;(5.7及以下版本)。
- Master端:
- 常见问题处理:
- 复制中断:若
Slave_IO_Running或Slave_SQL_Running为No,通过SHOW REPLICA STATUS G;查看Last_IO_Error或Last_SQL_Error定位原因(如网络中断、主从数据不一致)。 - 数据不一致修复:若主从数据差异较大,可使用
mysqldump重新全量备份Master并导入Slave,或使用pt-table-checksum(Percona工具)校验并修复数据。
- 复制中断:若
- 主从切换:当Master故障时,可手动提升Slave为新的Master:
- 停止旧Master的MySQL服务,确保数据已同步;
- 在新Master(原Slave)上执行
STOP REPLICA; RESET MASTER;,并修改server-id为Master的ID; - 其他Slave服务器需重新指向新的Master并启动复制。
优化建议
- 性能优化:根据业务负载调整
innodb_buffer_pool_size(建议为物理内存的50%-70%),Master可适当增大sync_binlog值(如0,依赖OS刷盘,但需权衡数据安全),Slave可开启read_only避免误写。 - 日志管理:定期清理Master的binlog和Slave的中继日志,可通过
expire_logs_days(binlog自动过期天数)或PURGE BINARY LOGS命令手动清理。 - 高可用架构:推荐结合MHA(Master High Availability)或Orchestrator实现自动故障切换,进一步提升系统可用性。
FAQs
Q1:主从复制时出现“Last_IO_Error: error connecting to master”如何解决?
A:该错误通常由网络、防火墙或密码问题导致,检查步骤:① 确认Master的IP、端口(3306)可访问;② 验证Slave连接用户的密码是否正确;③ 检查Master防火墙是否允许Slave的IP访问(firewall-cmd --add-rich-rule='rule family="ipv4" source address="192.168.1.20" port protocol="tcp" port="3306" accept');④ 确认MySQL用户权限(需包含REPLICATION SLAVE)。

Q2:如何判断主从复制是否延迟?
A:可通过以下方式监控延迟:① 执行SHOW REPLICA STATUS G;查看Seconds_Behind_Master字段,该值表示从库落后主库的秒数(0为无延迟);② 在Master上创建测试表并插入数据,观察Slave上数据同步的时间差;③ 使用pt-heartbeat工具(Percona)实时监控复制延迟,该工具通过记录心跳信息更精准地反映延迟情况。
【版权声明】:本站所有内容均来自网络,若无意侵犯到您的权利,请及时与我们联系将尽快删除相关内容!
发表回复