MySQL主从复制是构建高可用、高性能数据库架构的核心技术,广泛应用于读写分离、数据备份和负载均衡等场景。本文将详细阐述其配置步骤,并深入分析同步延迟的成因与解决策略。
主从复制基于二进制日志(binlog)实现。主库(Master)将数据变更事件写入binlog;从库(Slave)的I/O线程读取主库的binlog并写入本地的中继日志(relay log);从库的SQL线程重放中继日志中的事件,从而实现数据同步。
编辑MySQL配置文件(如my.cnf或my.ini):
[mysqld]
server-id = 1 # 必须唯一,通常主库设为1
log-bin = mysql-bin # 开启二进制日志
binlog-format = ROW # 推荐使用ROW格式,数据一致性更好
# 指定需要复制的数据库(可选)
# binlog-do-db = your_database_name
# 指定忽略复制的数据库(可选)
# binlog-ignore-db = mysql
重启MySQL服务后,登录主库创建复制专用账号并授权:
CREATE USER 'repl'@'%' IDENTIFIED BY 'YourStrongPassword123!';
GRANT REPLICATION SLAVE ON *.* TO 'repl'@'%';
FLUSH PRIVILEGES;
记录主库当前binlog状态:
SHOW MASTER STATUS;
# 记录返回的 File(如mysql-bin.000001)和 Position(如154)
编辑从库MySQL配置文件:
[mysqld]
server-id = 2 # 必须唯一,且与主库不同
relay-log = mysql-relay-bin # 中继日志名称
read-only = 1 # 建议设置从库为只读,防止误操作
重启从库MySQL服务。登录从库,配置主库连接信息:
CHANGE MASTER TO
MASTER_HOST='主库IP地址',
MASTER_USER='repl',
MASTER_PASSWORD='YourStrongPassword123!',
MASTER_LOG_FILE='记录的主库File名',
MASTER_LOG_POS=记录的主库Position值;
启动复制进程并检查状态:
START SLAVE;
SHOW SLAVE STATUS\G
关键状态检查:确保Slave_IO_Running和Slave_SQL_Running均为Yes,且Seconds_Behind_Master值正常。
同步延迟是主从复制中最常见的问题,指从库数据落后于主库的时间。
确保从库硬件配置(尤其是磁盘I/O性能)不低于主库。调整MySQL参数,如增大innodb_buffer_pool_size、优化sync_binlog和innodb_flush_log_at_trx_commit的平衡。
MySQL 5.6+ 支持基于库级别的并行复制,5.7+ 支持基于逻辑时钟(LOGICAL_CLOCK)的并行复制,能极大提升效率。
# MySQL 5.7+ 配置
STOP SLAVE;
SET GLOBAL slave_parallel_type = 'LOGICAL_CLOCK';
SET GLOBAL slave_parallel_workers = 4; # 根据CPU核心数调整
START SLAVE;
避免在主库执行超大型事务,将其拆分为多个小批次操作。优化慢查询,减少锁持有时间。
对于数据一致性要求极高的场景,可考虑:
持续监控Seconds_Behind_Master、Slave_SQL_Running_State等指标。可使用Percona Monitoring and Management (PMM)、Prometheus等工具建立告警机制。
成功配置MySQL主从复制是第一步,而有效监控和解决同步延迟是保障复制架构稳定运行的关键。通过硬件优化、启用多线程复制、拆分事务以及升级到更高级的同步方案(如MGR),可以显著降低延迟风险,构建高性能、高可用的MySQL数据库集群。