mysqldump导出必须加--single-transaction和--master-data=2,否则binlog位置与数据不一致,导致从库复制启动失败;若启用GTID还需加--set-gtid-purged=ON,且应显式指定库名、避免--all-databases,从库导入前须STOP SLAVE; RESET SLAVE ALL; 并清空业务库。mysqldump导出时必须加 --single-transaction 和 --master-data=2不加这两个参数,导出的数据和 binlog 位置对不上,从库启动复制后大概率报 Could not find first log file name in binary log index file 或直接跳过大量事务。前者是因为没记录主库当前 binlog 文件名和偏移,后者是因为事务不一致导致 GTID 或 position 复制断裂。实操建议:--single-transaction 保证 InnoDB 表一致性快照(但对 MyISAM 无效,所以务必确认表引擎)--master-data=2 把 CHANGE MASTER TO 所需的 MASTER_LOG_FILE 和 MASTER_LOG_POS 作为注释写在 dump 文件开头如果主库开了 GTID,还要额外加 --set-gtid-purged=ON(默认值),否则从库导入后可能因 GTID 集合为空而拒绝启动复制避免用 --all-databases 导出:它会把 mysql 系统库也 dump 进来,而其中的 gtid_executed、slave_master_info 等表在从库上不能直接覆盖,容易引发冲突从库导入前要先关掉复制线程并清空旧数据很多人 dump 导入后直接 start slave,结果报 Slave has more GTIDs than the master 或主键冲突。根本原因是:旧从库可能已有部分数据,或残留了之前复制状态,和新 dump 的起始点打架。正确做法是彻底重置:执行 STOP SLAVE;,再 RESET SLAVE ALL;(注意不是 RESET SLAVE,后者不删 master.info 文件)删除从库所有业务库(DROP DATABASE),不要用 TRUNCATE 或 DELETE ------ 它们不重置 auto_increment、不清理索引统计,且无法处理新增表导入前确认从库 server_id 已改且唯一,否则主库 binlog 里会漏记该从库的事件导入命令别用 source,用 mysql -u root -p ,避免客户端缓冲区溢出或字符集错乱导入完成后必须手动执行 CHANGE MASTER TO 再 start slavedump 文件里的 CHANGE MASTER TO 注释只是参考,不能直接依赖。因为 dump 时间和实际导入完成时间之间存在延迟,主库 binlog 可能已滚动;更关键的是,如果你用的是 GTID 复制模式,这行语句根本无效,必须用 SET GLOBAL gtid_slave_pos = 'xxx' 替代。 Trenz AI驱动的社交电商营销平台,专为TikTok Shop设计
相关推荐
程序员清风2 小时前
数据处理脚本工程化:日志、配置、命令行与测试正在走向自律2 小时前
数据集成产品的技术底座:从日志解析原理到 KFS 同步链路搭建(含建表与增删改查完整代码)程序员塔塔喵2 小时前
【MySQL篇|第七篇】MySQL事务在世修行3 小时前
智学文枢:页面切换与跨页数据预填2601_962885723 小时前
如何用 Python 把 K 线重采样成任意周期?独隅3 小时前
Claude API 实战教程:从入门到完整项目打工仔折腾 AI3 小时前
在 Ubuntu ARM64 部署 Q1 V3.0 MuJoCo 模型:加载、单步推理与执行器响应解析_孤傲_3 小时前
快速掌握 MySQL 语法信誓旦旦的程序猿4 小时前
【Python量化实战宝典 #21】北向资金跟随手册:聪明钱择时信号(Python 可跑)严谨的麻辣烫4 小时前
静态 ISP 代理请求超时怎么排查?Python 与 curl 实战