mysqldump加--no-data和--skip-triggers可干净导出纯表结构;需配合--compact、--skip-comments、--skip-foreign-key-checks,并在目标库执行前禁用FOREIGN_KEY_CHECKS和AUTOCOMMIT,结尾补COMMIT和恢复检查;MySQL 8.0+需对齐sql_mode;mysqlpump更优,支持--no-data、--exclude-triggers等原生选项,推荐使用。
mysql
dump 导出时加
和
才干净
只同步表结构,不是导数据,
默认会把
和
混在一起,还可能带上触发器、存储过程甚至注释,导致目标库建表失败或行为不一致。
实操建议:
用
,
减少空行和注释,
避免服务器版本相关注释干扰
如果源库有外键,加上
(仅在导出 SQL 中临时禁用检查,不影响源库)
别漏掉
和
—— 有些老 dump 不显式写,默认值可能在目标库不一致,建表后查
对比确认
目标库执行前先关掉
和
直接跑 dump 出来的 SQL 文件,常卡在第一个
后面的
上,报错
—— 因为表还没全建完,依赖关系就提前被校验了。
实操建议:
在 SQL 文件头部加
和
结尾补
和
,避免长事务锁表
如果目标库是 MySQL 8.0+,注意
差异:源库宽松(如允许空字符串进
字段),目标库严格(
),建表可能不报错,但后续 INSERT 会崩,建议导出前在源库执行
并在目标库对齐
用
替代
更可控(MySQL 5.7+)
是官方推荐的现代替代工具,天生支持按对象类型分离导出,不用手动过滤,而且默认跳过数据、触发器、事件,更贴合“纯结构同步”场景。
MySQL(Linux)
MySQL 9.6.0是面向Linux平台的2026年创新版本,核心架构迎来重大革新。其将外键约束与级联操作从InnoDB引擎层上移至SQL层,确保所有数据变更均被完整记录至Binlog,彻底解决了CDC(变更数据捕获)与主从复制中的数据不一致难题。此外,该版本引入container_aware启动选项以原生适配容器环境,并对审计日志进行了组件化重构,为追求极致数据一致性与云原生体验的开发者提供了全新选择。
下载
实操建议:
命令示例:
很关键:避免导出
,否则在目标库没对应用户时,建视图/存储过程直接失败
它默认并行导出多个表,但结构同步不需要并发,加
可避免顺序混乱(比如先建子表再建父表)
注意:
不支持 MySQL 5.6 及更早版本,低版本只能硬着头皮调
参数
同步后必须验证
和
导出→导入看似成功,不代表结构真一致。字段顺序、自增起始值、索引类型(BTREE vs HASH)、分区定义、隐藏列(MySQL 8.0+ 的
列)都可能被忽略或丢失。
实操建议:
逐表比对:
和源库输出做 diff
查
和
,重点核对
、
(比如
)、
最容易被忽略的是生成列(
)和全文索引(
),它们在
输出里不显眼,但缺失会导致应用查询异常
事情说清了就结束
--no-data--skip-triggersmysqldumpCREATE TABLEINSERTmysqldump --no-data --skip-triggers --compact --skip-comments -u root -p db_name table1 table2--compact--skip-comments--skip-foreign-key-checksCHARACTER SETCOLLATESHOW CREATE TABLEFOREIGN_KEY_CHECKSAUTOCOMMITCREATE TABLEALTER TABLE ... ADD CONSTRAINTERROR 1215 (HY000): Cannot add foreign key constraintSET FOREIGN_KEY_CHECKS = 0;SET AUTOCOMMIT = 0;COMMIT;SET FOREIGN_KEY_CHECKS = 1;sql_modeNOT NULLSTRICT_TRANS_TABLESSELECT @@sql_mode;mysqlpumpmysqldumpmysqlpumpmysqlpump --no-data --exclude-triggers --exclude-events --skip-definer --user=root --password db_name table1 table2 > schema.sql--skip-definerDEFINER=`user`@`host`--default-parallelism=1mysqlpumpmysqldumpSHOW CREATE TABLEINFORMATION_SCHEMAINVISIBLEmysqldump --no-data -u root -p target_db table_name | grep -E "CREATE|ENGINE|DEFAULT CHARSET"INFORMATION_SCHEMA.COLUMNSINFORMATION_SCHEMA.STATISTICSORDINAL_POSITIONEXTRAauto_incrementINDEX_TYPEGENERATED ALWAYS ASFULLTEXTmysqldump