mysql如何进行数据备份_mysql备份基本操作说明

3次阅读

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

mysql如何进行数据备份_mysql备份基本操作说明

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 库导致监控脚本失效。这些细节比命令本身更常导致恢复失败。

text=ZqhQzanResources