只导结构干什么用
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 组合也会影响可读性。
结构备份不能替代数据备份:它只保住建表语句,数据行、权限与用户都没有,恢复演练必须区分这两类产物的用途。