首页/数据/数据库速查/mysqldump 只备份数据(--no-create-info)
备份与恢复56 条

mysqldump 只备份数据(--no-create-info)

用 --no-create-info(-t)只导出 INSERT 语句,适合往已有 schema 的表里灌数据、做数据级同步或补数。

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

只导数据不导结构

mysqldump 加 --no-create-info(简写 -t)只输出 INSERT 语句,不包含建表语句。它适合往已有 schema 的表里灌数据、做数据级同步或补数,也便于只把某个时间段的数据搬到另一套环境。恢复前目标表必须已存在且结构兼容,否则导入直接失败。

基本信息

适用MySQL 5.7 / 8.0 的 mysqldump 客户端
核心选项--no-create-info / -t
常用搭配--insert-ignore 跳过冲突行、--where 按条件导出
恢复前提目标表已存在且列结构兼容

数据导出与导入

数据导出与导入
mysqldump -uroot -p --no-create-info --skip-triggers appdb orders --where="created_at>='2026-01-01'" > orders_data.sql   # 只导数据并按条件过滤
mysqldump -uroot -p --no-create-info --insert-ignore appdb orders > orders_ignore.sql   # 幂等补数
head -20 orders_data.sql                              # 确认产物里只有 INSERT,没有 CREATE TABLE
mysql -uroot -p appdb < orders_data.sql               # 导入到已存在的表
mysql -N -e "SELECT COUNT(*) FROM appdb.orders"       # 导入后核对行数

选项读法

选项作用注意
--no-create-info不输出建表语句目标表不存在时导入失败
--insert-ignore冲突行跳过而非中断适合补数,但冲突数据被静默忽略
--where按条件筛选行需作用在指定表上,语法按 SQL 规则写
--skip-triggers不导出触发器避免重复导入时报触发器已存在
--complete-insertINSERT 带列名目标表列顺序变化时更安全

典型使用场景

  • 往已建好结构的新环境灌数据
  • 按时间范围补数,只导出缺失区间
  • 数据级同步:结构由 DDL 流程管理,数据单独搬运
  • 修复误删数据:只补回被删的行
  • 构造测试数据:从生产导出小批量样本
配合 --insert-ignore 可以做幂等补数,但要清楚冲突行是被静默忽略的,补数完成后应按主键抽查确认。
导出条件不与目标库现状核对时,重复数据可能造成主键冲突或数据重复,补数前先确认目标表的主键与唯一键约束。

数据同步的注意事项

  • 导出前确认目标表结构与源表一致,列顺序不同会导致数据错位
  • 按主键区间分批导出,避免单个超大文件把恢复时间拉长
  • 导入前评估 binlog 增长与主从延迟影响,尽量避开业务高峰
  • 导入后用行数统计与主键抽样核对,确认既没丢行也没重复

易错点

  • 目标表不存在就导入:文件里没有建表语句,导入直接失败
  • 不加 --skip-triggers:重复导入时报触发器已存在,流程中断
  • 忽略唯一键冲突:未加 --insert-ignore 时导入中途失败,只导入了一部分
  • 只导数据不导结构却当作整库备份:结构变更无法恢复,备份不完整

数据来源与参考

  • MySQL 8.0 Reference Manual: mysqldump --no-create-info

相关工具

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