主从复制疑难解答教程:数据库高手进阶之路
MySQL主从复制是保障数据库高可用和读写分离的核心技术,但在实际运维中,常会遇到复制中断、主从延迟或数据不一致等疑难问题。以下为您梳理了常见问题及相应的排查与解决思路:
一、 主从复制中断 (Replica_IO/SQL_Running 为 No)
当从库的 IO 线程或 SQL 线程停止工作时,复制链路会中断。
常见原因及解决方案:
主库 Binlog 丢失 (如 Error 1236)
原因:主库的 Binlog 清理策略不合理,导致从库还未同步的日志被提前删除。
解决:若主库仍保留该 Binlog,可通过 CHANGE MASTER TO 重新指定位置;若已删除,则需通过主库全量备份(如 mysqldump)恢复从库,再重新搭建复制。
Server-ID 冲突
原因:主从库的 server-id 配置相同。
解决:修改从库的 server-id 确保其唯一性,然后重启复制线程。
网络或权限问题
原因:网络不通、防火墙拦截或复制账号权限不足(缺少 REPLICATION SLAVE 权限)。
解决:使用 telnet 等工具检查网络连通性,并在主库确认复制账号的权限配置正确。
数据冲突导致 SQL 线程报错
原因:从库已存在主库要同步的数据(如主键重复),或主库更新的记录在从库缺失。
解决:在 GTID 模式下,可跳过冲突事务后重启同步;在位点模式下,可通过设置 SQL_SLAVE_SKIP_COUNTER=1 跳过当前事务。
二、 主从复制延迟过大 (Seconds_Behind_Master 过高)
表现为从库数据始终落后于主库,严重影响读写分离场景下的数据一致性。
常见原因及解决方案:
大事务影响
原因:主库执行了大批量的数据插入、更新或全量删除操作,导致 Binlog 事件集中传输,从库回放耗时过长。
解决:将大事务拆分为多个小批次执行,并避免在业务高峰期进行此类操作。
从库硬件性能瓶颈
原因:从库 CPU、内存或磁盘 IO 性能不足,或承担了过多的查询请求,导致回放速度跟不上。
解决:升级从库硬件(如使用 SSD 磁盘),增加从库节点以分散读压力,或通过中间件进行读写分流。
未开启并行复制
原因:从库默认使用单线程回放 Binlog,处理效率低。
解决:在 MySQL 5.7 及以上版本中,配置 slave_parallel_type=LOGICAL_CLOCK 和 slave_parallel_workers(建议设为 CPU 核心数的一半到一倍)来开启多线程并行复制。
网络延迟
原因:主从库跨地域部署,网络带宽不足或波动。
解决:尽量将主从库部署在同一地域,提升网络带宽,或在 MySQL 8.0 中启用 Binlog 压缩功能。
三、 主从数据不一致
主从库的数据出现差异,是复制架构中最棘手的问题之一。
常见原因及解决方案:
人为在从库进行写操作
原因:开发或运维人员误在从库执行了 DML 语句,破坏了数据一致性。
解决:强烈建议将从库设置为只读模式(read_only=ON 和 super_read_only=ON),从根源上杜绝误操作。
表缺少主键或唯一索引
原因:在基于行的复制中,无主键会导致从库全表扫描定位数据,不仅性能差,在遇到重复行时还可能误改数据。
解决:强制所有表定义显式主键(可配置 sql_require_primary_key=ON),并确保 Binlog 格式为 ROW 模式。
复制过滤规则不当
原因:配置了 replicate-do-db 等过滤规则,在主库跨库操作时,可能导致从库漏掉部分更新。
解决:尽量使用更精确的通配符规则,如 replicate-wild-do-table 来替代。
从库事件调度器开启
原因:若从库开启了 event_scheduler,主库同步过来的事件可能被重复执行,引发数据冲突。
解决:在从库配置文件中禁用事件调度器(event_scheduler=OFF)。
排查建议:遇到疑难问题时,首先通过 SHOW SLAVE STATUSG 查看 Last_IO_Error 和 Last_SQL_Error 字段,结合从库的错误日志(.err 文件)通常能快速定位问题根源。
-
MySQL速查表常见问题排查手册MySQL 速查表・常见问题排查手册一句话主线:按现象定位、先看日志再抓现场,优先区分慢查询、锁问题、连接耗尽、报错、主从同步、索引失效六大类,所有命令适配 MySQL 5.7 / 8.0。提示:生产执行前尽量在测试验证;高危操作(kill、改参数)避开业务高峰。一、基础...
-
聚簇索引怎么用常见问题排查手册聚簇索引常见问题排查手册(MySQL InnoDB)前置:InnoDB 只有聚簇索引,聚簇索引就是主键索引,数据行本身就存在主键索引的叶子节点,索引和数据绑定在一起;二级索引叶子节点存的是主键值,不是行地址。适用:后端面试、数据库故障排查、慢 SQL 优化,只讲实战现象...
-
聚簇索引路线图避坑指南:生产环境血泪教训聚簇索引路线图避坑指南:生产环境血泪教训 一、核心认知:聚簇索引决定整张表的物理存储InnoDB 是索引组织表,主键索引的叶子节点就是完整行数据,数据按主键顺序物理排列。5 一张表只有一个聚簇索引,选错主键,所有二级索引跟着遭殃。二、主键选型:最...
-
一文搞懂Redis面试错误解决,面试和工作都用得到一文搞懂 Redis 面试错误解决,面试和工作都用得到核心思路:Redis 报错不要死记报错码,分 客户端异常、连接异常、内存异常、持久化异常、集群异常、命令与使用规范 六大类,同时区分【面试标准答案】和【线上真实排查步骤】,面试直接说思路,工作直接照着...
-
MongoDB备份教程常见问题排查手册MongoDB 备份教程常见问题排查手册一、备份前必做检查磁盘空间:目标目录剩余空间建议至少为数据库大小的 3 倍,避免备份中途因 /tmp 或目标盘满而失败。连接验证:先用 mongosh 测试连接和认证,确认能执行 ping 命令。oplog 窗口:副本集备份前检查 rs.printReplication...
-
【干货】SQL优化方法优化技巧,性能提升10倍SQL 优化真正拉开差距的地方,不是背规则,而是先看懂执行计划,再减少数据库做的工作量。 下面这套方法适用于 MySQL、PostgreSQL、SQL Server 等主流数据库,按“诊断 → 改写 → 索引 → 架构”推进。 一、先诊断:不要凭感觉优化优化前先看三个数据源:慢查询日志...