当前位置:首页 > AI技术 > 正文内容

迁移过程如何避免数据不一致 利强一致性备份方案案例|Duuu笔记

admin7个月前 (04-05)AI技术190

面向高级开发者的MySQL指南,涵盖

mysqldump加--single-transaction不保证强一致,仅对InnoDB表有效,且依赖REPEATABLE READ隔离级别;MyISAM表、DDL操作或隔离级别变更均破坏一致性。

mysql

dump 加

--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=ON

dump 命令中显式加上

--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 结果全是“不一致”,但这不是数据问题,是时间差问题。

实操建议:

校验前确保主从延迟

Seconds_Behind_Master = 0

,且持续稳定 30 秒以上

线上环境必须将写流量切到新库后再启动校验;若做不到,至少把旧库设为

READ_ONLY=1

避免在校验期间执行大事务或批量更新,它们会拖慢 checksum 分块扫描

校验结果中

Differences

列非 0 才真要处理;

Chunk CRC mismatches

可能只是网络抖动导致重试,别一看到就 panic

备份文件传输和导入过程中的隐性截断风险

MySQL 默认

max_allowed_packet

是 4MB,而 mysqldump 导出的大 BLOB 字段、长 JSON 或注释可能单行超限。FTP、SCP、甚至某些 shell 管道(如

gzip | mysql

)在传输中若未设置二进制模式,可能把

\r\n

转成

\n

,导致导入时语法错误或字段截断。

实操建议:

导出时加

--max-allowed-packet=512M

,导入时 mysql 客户端也加同样参数

传输用

rsync -av --compress

或

scp -o Compression=yes

,避免用普通 FTP

导入前先用

head -n 100 your.sql | grep -E "INSERT INTO|VALUES" | wc -l

粗略看首百行是否结构正常

导入命令末尾加

2>&1 | grep -i "error\|warning"

实时捕获关键异常,别等跑完才发现失败

真正难的不是备份命令怎么写,而是搞清每个参数背后依赖的数据库状态——比如 GTID 是否干净、引擎是否统一、写入是否真正停止。这些状态看不见,但一漏就导致一致性崩塌,而且很难回溯。

相关文章

LLM介绍

。LLM 被证明在使用指令形式化描述的未见过的任务上表现良好。这意味着 LLM 能够根据任务指令执行任务,而无需事先见过具体示例,展示了其强大的泛化能力。 :小型语言模型通常难以解决涉...

神经网络分类总结

从网络性能角度可分为连续型与离散型网络、确定性与随机性网络。 从网络结构角度可为前向网络与反馈网络。 从学习方式角度可分为有导师学习网络和无导师学习网络。 按连续突触性...

神经网络中的单层神经网络

神经网络是一种模拟人脑的神经网络以期能够实现类人工智能的机器学习技术。人脑中的神经网络是一个非常复杂的组织。成人的大脑中估计有1000亿个神经元之多。 看一个经典的神经网络。这是一个包...

从入门到精通:前端开发之骡子快跑支持热点借势吗 骡子快跑节日营销文案生成|Duuu笔记

骡子快跑平台提供五步节日营销文案生成路径:一、调用内置32个节日模板库;二、输入热点事件触发动态生成;三、绑定自有素材库实现个性化延展;四、多角色视角协同输出;五、接入微信生态直发并校验合规性。 ☞...

前端开发实战详解:骡子快跑如何生成会议纪要 骡子快跑语音转文字整理技巧最佳实践|Duuu笔记

使用听脑AI转写、骡子快跑生成纪要、影子跟读校验、自定义术语词典及EcomGPT-CNN情绪风险分析,五步实现会议纪要高效精准产出。 ☞☞☞AI 智能聊天, 问答助手, AI 智能搜索, 免费无限量...

前端开发实战详解:骡子快跑怎么分析问卷结果 骡子快跑统计摘要生成技巧最佳实践|Duuu笔记

可通过四种方式高效分析问卷数据:一、启用内置智能摘要模块自动生成可视化报告;二、调用Agent协作链实现问卷与外部数据深度交叉分析;三、使用CLI指令批量处理多期问卷横向对比;四、加载行业定制模板复用...

发表评论

访客

看不清,换一张

◎欢迎参与讨论,请在这里发表您的看法和观点。