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