mysql如何利用数据导入导出向导迁移_mysql GUI工具迁移实战

2次阅读

不能。mysql workbench 导入导出向导仅适用于结构简单、数据量小的场景,缺乏事务一致性保障、并发控制和错误恢复机制,无法满足生产库迁移的高可靠性与完整性要求。

mysql如何利用数据导入导出向导迁移_mysql GUI工具迁移实战

MySQL Workbench 导入导出向导能直接迁移生产库吗?

不能。它只适合结构简单、数据量小(mysqldump + mysql 命令,不处理锁表、主从同步中断、字符集隐式转换、自增 ID 冲突等真实迁移风险。

常见错误现象:Error 1062 (23000): Duplicate entry '1' for key 'PRIMARY'(自增冲突)、ERROR 1215 (HY000): Cannot add foreign key constraint(外键顺序错乱)、中文变问号(character_set_client 和表定义不一致)。

  • 使用场景:本地开发库同步、测试环境快速克隆、单表少量数据抽样导出
  • 参数差异:向导默认勾选 Export to Self-Contained File → 生成含 CREATE databaseSET FOREIGN_KEY_CHECKS=0 的 SQL;若取消,则只导表结构+数据,不建库也不关外键检查
  • 性能影响:导出时全表 select 锁读,大表会阻塞业务写入;导入时默认逐条 INSERT,10 万行以上明显慢于 LOAD DATA INFILE

导出 SQL 文件后,用命令行导入为什么报错 “Unknown collation: ‘utf8mb4_0900_ai_ci’”?

这是 MySQL 8.0 默认排序规则,但目标库是 5.7 或更早版本,不识别该 collation。向导导出时未降级兼容,直接照搬源库定义。

解决办法不是改目标库版本,而是导出时干预 collation 声明:

  • 在 Workbench 向导“Advanced Options”里,勾选 Use compatible option for older MySQL servers(自动替换为 utf8mb4_general_ci
  • 或导出后手动替换:用文本编辑器批量把 COLLATE utf8mb4_0900_ai_ci 替成 COLLATE utf8mb4_unicode_ci(5.7 支持)
  • 更稳妥的做法:导出时不带 CREATE table,只导数据(勾选 Export table data only),再用 SHOW CREATE TABLE 在目标库重建表

怎么让 Workbench 向导跳过视图、存储过程、事件这些对象

向导默认全量导出数据库对象,但视图依赖底层表权限,存储过程可能含硬编码 IP 或数据库名,直接导入常失败。

必须手动过滤:

  • 在“Select Objects to Export” 页面,左侧树形列表展开后,**逐个取消勾选** ViewsStored ProceduresFunctionsEvents 节点(别信“Deselect All”按钮,它有时失效)
  • 如果已导出含视图的 SQL,导入前删掉所有 CREATE VIEW 及其 ALTER ALGORITHM 行——否则可能因 DEFINER 用户不存在而卡住
  • 注意触发器(Triggers):它和表绑定,若勾选了表又没关触发器导出,会连带导出;需在表节点右侧的齿轮图标里关闭 Export Triggers

导出的 SQL 文件里有 SET SQL_LOG_BIN=0,导入时要不要保留?

要看目标库是否在主从架构中。这个语句关闭二进制日志,意味着导入操作不会同步到从库——对主库执行时,从库数据立刻不一致。

绝大多数情况下应该删掉这一行:

  • 本地开发/测试迁移:删掉无影响
  • 生产主库迁移:必须删,否则从库丢失这批数据,后续主从延迟或复制中断
  • 只有在“临时修复从库缺失数据”且明确知道后果时,才保留并配合 STOP SLAVE 使用
  • Workbench 向导默认不加这句,但如果你手动生成 dump 用了 --set-gtid-purged=OFF 或其他高级参数,就可能混入——导入前用 grep -n "SQL_LOG_BIN" file.sql 检查

真正容易被忽略的是时间戳字段行为:向导导出的 timestamp 列默认带 default CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,但目标库若禁用 explicit_defaults_for_timestamp,导入会报错。得提前确认两边 SQL mode 是否一致,尤其关注 NO_ZERO_DATESTRICT_TRANS_TABLES

text=ZqhQzanResources