首页/数据/数据库速查/mysqldump 只备份表结构(--no-data)
备份与恢复56 条

mysqldump 只备份表结构(--no-data)

用 --no-data(-d)只导出建表语句:用于建库评审、跨环境初始化 schema、对比结构差异,体积小、执行快。

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

只导结构干什么用

mysqldump 加 --no-data(简写 -d)只输出建表语句,不导数据行,产物通常只有几十 KB,秒级完成。它适合跨环境初始化 schema、结构评审与版本间 diff。需要注意视图、触发器、存储过程、事件由各自选项控制,不加就丢;导出的 DDL 还默认带 AUTO_INCREMENT 当前值与字符集子句。

基本信息

适用MySQL 5.7 / 8.0 / Percona,mysqldump 客户端
核心选项--no-data / -d
配套选项--routines --events --triggers 保全对象
常用补充--skip-create-options 便于比对,--no-tablespaces 免额外权限

结构备份与恢复

结构备份与恢复
mysqldump -uroot -p --no-data --routines --events --triggers --databases appdb > appdb_schema.sql  # 整库结构,含例程与事件
mysqldump -uroot -p --no-data appdb t_order > t_order.sql   # 只导单表结构(目标库须已存在)
mysql -uroot -p appdb < appdb_schema.sql                    # 恢复结构到指定库
diff -u <(mysqldump -uroot -p --no-data --skip-create-options dev_db) <(mysqldump -uroot -p --no-data --skip-create-options prd_db)  # 结构差异比对

选项逐项读法

选项作用不加的后果
--no-data只输出建表语句变成全量数据导出,体积与耗时失控
--routines导出存储过程与函数恢复后缺少例程,调用报 1305
--events导出事件调度器对象定时任务丢失
--triggers导出触发器写入逻辑缺失,埋下数据不一致隐患
--skip-create-options去掉引擎与字符集子句结构 diff 被无意义差异淹没
--set-gtid-purged=OFF产物中不写 GTID 相关语句在已启用 GTID 的实例导入时报错

典型使用场景

  • 新环境建库:用结构备份初始化 schema,再按需灌少量种子数据
  • 版本发布评审:对比上线前后的结构差异,作为 DDL 变更依据
  • 多环境一致性检查:定时 diff 开发、预发、生产三套结构
  • 交付与归档:给客户或合规留一份可读的建表语句清单
  • 误删表恢复:先恢复结构再按备份补齐数据,比整库恢复快得多
加 --databases 会在产物里写 CREATE DATABASE 与 USE,适合整库初始化;不给库名列表时只能导入到已存在的库,转储时字段顺序与 --compact 组合也会影响可读性。
结构备份不能替代数据备份:它只保住建表语句,数据行、权限与用户都没有,恢复演练必须区分这两类产物的用途。

易错点

  • 只加 --no-data 不加 --routines --events --triggers:恢复后缺对象且不会报错,等到业务调用时才暴露
  • 用结构备份当数据备份归档:需要恢复数据时才发现产物里没有一行数据
  • 跨版本恢复结构:8.0 导出的 DDL 含 utf8mb4_0900_ai_ci 等 5.7 不认识的排序规则,导入直接报错
  • 分区表结构会带上完整分区定义:迁到不支持分区的环境或分片方案时必须手工改写

数据来源与参考

  • MySQL 8.0 Reference Manual: mysqldump --no-data

相关工具

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