mysqldump加--single-transaction不保证强一致,仅对InnoDB表有效,且依赖REPEATABLE READ隔离级别;MyISAM表、DDL操作或隔离级别变更均破坏一致性。mysqldump 加 --single-transaction 不等于强一致很多人以为加了 --single-transaction 就能拿到全库一致性快照,实际不是------它只对 InnoDB 表生效,遇到 MyISAM 表、临时表、或者备份中途有 DDL(比如 ALTER TABLE),快照就失效了。更关键的是,--single-transaction 依赖事务隔离级别为 REPEATABLE READ,而某些 ORM 或中间件会悄悄改隔离级别,导致 dump 出来的时间点不统一。实操建议:先用 SELECT ENGINE, TABLE_NAME FROM information_schema.TABLES WHERE TABLE_SCHEMA = 'your_db'; 检查是否混用引擎备份前显式执行 SET SESSION TRANSACTION ISOLATION LEVEL REPEATABLE READ;如果存在 MyISAM 表,必须配合 --lock-all-tables(会锁写),不能只靠 --single-transaction避免在备份窗口内执行任何 DDL;可用 SHOW PROCESSLIST 监控长事务阻塞GTID + mysqldump --set-gtid-purged=ON 才能准确定位起点单纯导出 SQL 文件,恢复后无法知道这条数据对应主库哪个 GTID,也就没法做后续的增量同步或校验。漏掉 --set-gtid-purged=ON(或设为 OFF)会导致生成的 dump 文件里没有 SET @@GLOBAL.GTID_PURGED 语句,恢复到新实例后 GTID 集为空,binlog 位置完全脱钩。实操建议:务必确认源库已开启 gtid_mode=ON 且 enforce_gtid_consistency=ONdump 命令中显式加上 --set-gtid-purged=ON(默认值在新版 MySQL 中已是 AUTO,但行为不稳定,必须显式声明)检查 dump 文件开头是否有类似 SET @@GLOBAL.GTID_PURGED='a1b2c3e4-5678-90ab-cdef-1234567890ab:1-100'; 的行恢复时目标实例也需开启 GTID,且 gtid_executed 必须为空(否则报错 GTID_PURGED can only be set when GTID_EXECUTED is empty)用 pt-table-checksum 校验前,先停写或切读写分离流量pt-table-checksum 本身不锁表,但它依赖主从复制延迟接近零才能比对准确。如果迁移后刚切流,应用还在往旧库写、新库靠延迟同步,checksum 结果全是"不一致",但这不是数据问题,是时间差问题。 Zeemo AI 一款专业的视频字幕制作和视频处理工具
相关推荐
秋名山码民12 分钟前
拙见AI——AI操作系统李可以量化17 分钟前
Redis Client 从了解到精通(二)上:redis-py 高级用法与核心命令实战南棱笑笑生20 分钟前
20260826在Ubuntu22.04系统下编译眺望Pi-RK3572工业派开发板的Ubuntu系统仍然.20 分钟前
Redis---Stringtg_xianheyun23 分钟前
2026BytePlus CDN加速应用场景全面解析2601_9669496528 分钟前
如何利用 1 分钟 K 线在 14:50 精准捕捉尾盘异动?Python 量化实战:1 分钟 K 线 + 全市场扫描海天一色y30 分钟前
强化学习工具函数详解:从经验回放到优势函数计算2401_8949155344 分钟前
GEO 优化源码性能调优:高并发地域请求缓存与索引优化疯狂打码的少年1 小时前
【数据库技术】数据库三级模式结构(外模式/模式/内模式)