mysqldump 全库备份
mysqldump 是 MySQL 自带的逻辑备份工具,把库表结构与数据导出成可读的 SQL 文本:官方随发行版提供、无需额外部署,跨版本与跨平台迁移都方便,适合中小数据量。全库备份用 --all-databases 一次导出所有库。它是单线程工作,速度受磁盘与网络限制,数据量到几百 GB 时导出与恢复的耗时都难以估量,那种规模就该考虑物理备份。
基本信息
| 用途 | 把所有库的结构与数据导出为 SQL 文本 |
|---|---|
| 语法 | mysqldump -u 用户 -p --all-databases > all.sql |
| 推荐组合 | --single-transaction --source-data=2 --routines --events --triggers |
| 适用数据量 | 中小库,几十 GB 以内较舒适 |
| 线程模型 | 单线程导出,速度受 IO 限制 |
| 输出性质 | 明文 SQL,包含全量业务数据 |
典型使用场景
- 版本升级前的兜底备份,逻辑备份可跨版本导入
- 整实例搬移:小库迁到新实例,导出再导入最直接
- 结构留档:定期导出表结构,用于比对变更
- 脱敏取样:导出后替换敏感字段再导入测试环境
- 缺少专业备份工具时的兜底方案
- 单表或单库修复:只导出受影响对象做定点恢复
标准全备
标准全备
mysqldump -uroot -p --all-databases --single-transaction \
--source-data=2 --routines --events --triggers \
--default-character-set=utf8mb4 \
> /data/backup/all_$(date +%F_%H%M).sql # 文件名带时间戳,避免覆盖旧备份
ls -lh /data/backup/all_*.sql # 核对文件大小与生成时间是否正常常用参数速记
常用参数速记
--all-databases 导出所有库 --databases db1 db2 指定多个库
--single-transaction 一致性快照 --quick 逐行读取,避免占内存
--routines --events --triggers 导出存储程序与触发器
--source-data=2 记录位点并写入文件注释
--no-data 只导结构 --ignore-table=db.tbl 排除指定表关键参数对照
| 参数 | 作用 | 使用建议 |
|---|---|---|
| --all-databases | 导出所有库的结构与数据 | 整实例备份场景 |
| --databases | 导出指定库并写入建库语句 | 按库备份首选,恢复时可自动建库 |
| --single-transaction | 开启一致性快照,不锁表 | InnoDB 必备 |
| --quick | 逐行读取不缓存整表 | 大表必备,防止客户端内存被吃满 |
| --routines --events --triggers | 导出存储过程、事件与触发器 | 默认不导,遗漏会导致恢复后功能缺失 |
| --source-data=2 | 把位点以注释写入文件 | 为后续搭建复制提供位点 |
| --set-gtid-purged | 控制是否写入 GTID 信息 | 导入从库前要评估该开关 |
默认导出会逐表加读锁;InnoDB 表必须配合一致性快照选项才能拿到同一时间点的数据视图,否则导出期间的写入会造成表间数据错位。
大库全备耗时长、吃 IO,应避开业务高峰执行;动手前先估算备份体积与剩余磁盘空间,确认落盘目录有足够容量再开始。
备份文件是明文 SQL,包含全量业务数据,存放目录必须限权,跨网络传输要考虑加密,也不要放在可被外部访问的路径下。
全备执行检查清单
- 确认剩余磁盘空间大于预估备份体积的两倍
- 确认是否混有非事务引擎表,必要时单独安排
- 备份命令与参数固化进脚本,避免每次临时拼装
- 备份完成后核对文件大小与结束时间
- 周期性做恢复演练,只备份不演练等于没有备份
- 保留一份异地副本,避免与主库同盘同机房
备份脚本要有人看结果:文件大小异常偏小、导出过程报错中断都会留下一个看起来正常但实际不完整的文件,脚本应对退出码与文件体积做校验并告警。