基本概念
MySQL 主从同步(Replication)是指将一个MySQL数据库服务器(主服务器)的数据复制到一个或多个MySQL数据库服务器(从服务器)的过程。主从同步是MySQL提供的一种高可用性解决方案,也是实现读写分离的基础。
工作原理
MySQL主从同步基于二进制日志(binlog)实现,主要工作流程如下:
-
主服务器记录变更:主服务器将所有数据变更(INSERT、UPDATE、DELETE等)记录到二进制日志中
-
从服务器获取日志:从服务器的I/O线程连接到主服务器,请求获取二进制日志
-
主服务器发送日志:主服务器的Binlog Dump线程将二进制日志内容发送给从服务器
-
从服务器应用变更:从服务器的SQL线程读取中继日志(relay log)并执行其中的SQL语句
同步模式
MySQL支持多种同步模式:
-
异步复制(默认):主服务器执行事务后立即返回,不等待从服务器确认
-
半同步复制:主服务器等待至少一个从服务器接收并写入中继日志后才返回
-
组复制(MySQL Group Replication):基于Paxos协议的多主同步复制
配置步骤
主服务器配置
-
修改my.cnf配置文件:
ini[mysqld] server-id=1 log-bin=mysql-bin binlog-format=ROW binlog-do-db=需要同步的数据库名 -
创建复制专用用户:
sqlCREATE USER 'repl'@'%' IDENTIFIED BY 'password'; GRANT REPLICATION SLAVE ON *.* TO 'repl'@'%'; -
查看主服务器状态:
sqlSHOW MASTER STATUS;
从服务器配置
-
修改my.cnf配置文件:
ini[mysqld] server-id=2 relay-log=mysql-relay-bin read-only=1 -
配置主从连接:
sqlCHANGE MASTER TO MASTER_HOST='master_ip', MASTER_USER='repl', MASTER_PASSWORD='password', MASTER_LOG_FILE='mysql-bin.000001', MASTER_LOG_POS=position_number; -
启动复制:
sqlSTART SLAVE; -
检查复制状态:
sqlSHOW SLAVE STATUS\G
常见问题与解决方案
-
数据不一致 :定期使用
pt-table-checksum工具检查数据一致性 -
复制延迟:
-
优化主服务器查询性能
-
增加从服务器硬件资源
-
考虑使用并行复制
-
-
网络中断:
-
配置自动重连参数
slave_net_timeout -
使用GTID(全局事务标识符)简化故障恢复
-
应用场景
-
读写分离:主库写,从库读,分担主库压力
-
数据备份:从服务器可作为实时备份
-
高可用性:主库故障时可快速切换到从库
-
数据分析:在从库执行报表查询等耗时操作不影响主库性能
性能优化建议
-
使用ROW格式的二进制日志
-
在从服务器上禁用不必要的存储引擎
-
适当调整
sync_binlog和innodb_flush_log_at_trx_commit参数 -
考虑使用多线程复制(MySQL 5.6+)
-
定期监控复制延迟和状态
注意事项
-
主从服务器的MySQL版本应兼容
-
表结构变更可能导致复制中断
-
某些SQL函数(如UUID(), RAND())可能导致主从不一致
-
大事务可能导致复制延迟增加