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

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

admin2天前AI技术7

面向高级开发者的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?看这一篇就够了!

一、全套AGI大模型学习路线 AI大模型时代的学习之旅:从基础到前沿,掌握人工智能的核心技能! 二、640套AI大模型报告合集 这套包含640份报告的合集,涵盖了AI大...

神经网络分类总结

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

推荐10个AI人工智能技术网站

除了研究和开发人工智能技术,OpenAI还积极参与人工智能伦理和安全的研究和探讨。 认为,人工智能技术的发展必须遵循伦理和法律的规范,以确保人工智能的应用不会对人类带来负面影响。...

什么是人工智能 ?

您可以使用 ML 训练 AI,使其精确、快速地执行任务。这可以通过自动化员工感到吃力或厌烦的业务部分来提高运营效率。同样,您可以使用 AI 自动化来腾出员工资源,用于更复杂和更具创造性的工作。...

AI核心技巧:如何重置openclaw硬件设置 openclaw恢复出厂设置操作方法【操作】深度解析|Duuu笔记

重置 OpenClaw 配置有四种方法:一、交互式向导重置(openclaw onboard --reset);二、指定作用域的命令行重置(如--reset-scope config);三、手动删除~...

发表评论

访客

看不清,换一张

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