mysqldump适用于中小库逻辑备份,支持一致性导出(innodb)、存储过程与事件;mysqlpump为并行替代工具;xtrabackup用于大库热备;所有备份须验证可用性。

mysqldump 命令是备份单库最常用的方式
直接用 mysqldump 导出结构和数据,适合中小规模数据库、开发/测试环境或定期快照。它生成的是 SQL 文本,可读、可编辑、可跨版本恢复(但要注意 MySQL 版本差异导致的语法兼容性)。
基本用法:mysqldump -u root -p database_name > backup.sql
- 加
--single-transaction可在 InnoDB 表上实现一致性备份(不锁表),但对 MyISAM 无效 - 加
--routines和--events才能导出存储过程和事件调度器定义 - 加
--skip-triggers可跳过触发器(某些迁移场景需要避免重复触发) - 密码不要直接写在命令行里(如
-p123456),会泄露在进程列表中;应使用-p然后交互输入,或配置~/.my.cnf
使用 mysqlpump 替代 mysqldump(MySQL 5.7+)
mysqlpump 是 MySQL 官方推出的并行备份工具,支持多线程导出、按表/库粒度过滤、更细的权限控制,性能通常优于 mysqldump,尤其在大库或多核机器上。
示例:mysqlpump -u root -p --parallel-schema-load=4 --include-databases=db1,db2 > backup.sql
- 默认不导出
mysql系统库,需显式加--include-databases=mysql -
--exclude-tables和--include-tables支持正则(如db1\.log_.*),但注意 shell 转义 - 不支持
--single-transaction的等价参数,对事务一致性依赖底层引擎行为,InnoDB 下仍可靠 - 导出结果默认含
DROP TABLE,恢复前需确认是否要保留旧表
物理备份:xtrabackup(Percona XtraBackup)适合大库热备
当数据库超过 50GB 或无法接受逻辑导出时长,xtrabackup 是主流选择。它拷贝 InnoDB 数据文件+redo log,支持压缩、流式传输、增量备份,且全程不锁表。
基础全量备份:xtrabackup --backup --target-dir=/path/to/backup --user=root --password=xxx
- 备份后必须执行
xtrabackup --prepare(即 apply log),否则无法启动 MySQL - 增量备份依赖上一次全量或增量的
xtrabackup_checkpoints文件,路径不能错 - 恢复时需停掉 MySQL,清空 datadir,再用
--copy-back(注意权限:属主得是 mysql 用户) - MySQL 8.0+ 使用
mysqlbackup(企业版)或xbcloud配合对象存储,xtrabackup对 8.0 元数据字典支持有限,需验证版本兼容性
备份文件校验与最小化恢复验证
备份完成不等于可用。很多线上事故源于“备份没报错,但恢复失败”。必须做最低成本验证:
- 用
head -n 100 backup.sql | grep -i "create table\|insert into"确认开头有有效语句 - 对
mysqldump文件,用mysql -u test -ptest -e "source /path/to/backup.sql"在测试库快速导入前 10MB(加head -c 10485760截断) - 对
xtrabackup备份,至少跑一遍--prepare并检查退出码和日志末尾是否出现completed OK! - 生产环境建议每周选一个备份集做完整恢复演练——哪怕只恢复单表到临时实例
真正麻烦的不是备份本身,而是备份路径权限错误、磁盘满导致静默截断、字符集不一致引发乱码、或者备份时忽略 sys 库导致监控脚本失效。这些细节比命令本身更常导致恢复失败。









