只导数据不导结构
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-insert | INSERT 带列名 | 目标表列顺序变化时更安全 |
典型使用场景
- 往已建好结构的新环境灌数据
- 按时间范围补数,只导出缺失区间
- 数据级同步:结构由 DDL 流程管理,数据单独搬运
- 修复误删数据:只补回被删的行
- 构造测试数据:从生产导出小批量样本
配合 --insert-ignore 可以做幂等补数,但要清楚冲突行是被静默忽略的,补数完成后应按主键抽查确认。
导出条件不与目标库现状核对时,重复数据可能造成主键冲突或数据重复,补数前先确认目标表的主键与唯一键约束。
数据同步的注意事项
- 导出前确认目标表结构与源表一致,列顺序不同会导致数据错位
- 按主键区间分批导出,避免单个超大文件把恢复时间拉长
- 导入前评估 binlog 增长与主从延迟影响,尽量避开业务高峰
- 导入后用行数统计与主键抽样核对,确认既没丢行也没重复