首页/数据/数据库速查/mysqldump 单表与多表备份
备份与恢复56 条

mysqldump 单表与多表备份

按表粒度导出:库名后跟一个或多个表名即可,适合临时备份几张大表、迁移单表或导出给业务方做分析。

数据库速查数据更新于 2026-10-13

按表导出是什么

mysqldump 按表粒度导出很简单:库名后面跟一个或多个表名即可。它适合临时备份几张大表、把单表迁移到别的实例,或者导出给业务方做离线分析。需要注意大表导出时的内存占用与一致性要求,以及表名含大写字母或保留字时的引用方式。

基本信息

单表mysqldump -uroot -p appdb orders > orders.sql
多表库名后面依次跟多个表名
显式分隔--databases appdb --tables orders
一致性--single-transaction 在 InnoDB 上取得一致性快照
内存--quick 逐行读取,避免结果集全部进内存

典型使用场景

  • 临时备份几张关键表,赶在变更之前留一份
  • 把单表迁移到另一个实例或另一个库
  • 给业务方导出分析用数据
  • 发布前针对核心表做快速备份
  • 只导出表结构用于比对,或只导出数据用于补数

按表导出

按表导出
# 单表备份:一致性快照加流式读取
mysqldump -uroot -p --single-transaction --quick \
  appdb orders > orders_$(date +%F).sql
# 多表一起导出
mysqldump -uroot -p --single-transaction appdb orders order_items > two.sql
# 只导结构 / 只导数据
mysqldump -uroot -p --no-data appdb orders > orders_schema.sql
mysqldump -uroot -p --no-create-info appdb orders > orders_data.sql
# 边导边压缩
mysqldump -uroot -p --single-transaction --quick appdb orders | gzip > orders.sql.gz

常用参数

参数作用注意事项
--single-transactionInnoDB 上取一致性快照不阻塞写入,但对 MyISAM 表无效
--quick逐行读取,不缓存结果集大表必加,否则容易 OOM
--no-data只导出表结构常用于结构比对
--no-create-info只导出数据用于补数或迁移数据
--databases 加 --tables显式区分解库名与表名表名易混淆时使用
表名不支持通配符:要批量导出同类表,先用 information_schema 查出表名列表,再拼成命令,不要指望像匹配文件那样写模式。生成命令时把表名一并写进执行日志,便于事后追溯这一次到底导了哪些表。
大表不加 --quick 时整个结果集会被读进客户端内存:可能 OOM,也可能长时间无响应并拖慢服务器,在几十 GB 的表上尤其明显。
表名含大写字母或使用保留字时要加反引号,同时注意 shell 的引号转义,否则会报「表不存在」,让人误以为是库名选错了。跨平台脚本里更要留意 shell 与 SQL 各自的反引号语义并不相同。

易错点

  • 大表不加 --quick:客户端内存被撑爆或长时间无响应
  • 表名含保留字未加反引号:报错后误判为选错了库
  • 对 MyISAM 表使用 --single-transaction:拿不到一致性快照
  • 导出文件不压缩也不清理:历史备份把磁盘占满
  • 导出后不做导入验证:只看到文件生成成功就宣告完成,恢复时才发现不可用

数据来源与参考

  • MySQL 8.0 Reference Manual: mysqldump

相关工具

​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌