MySQL跨版本迁移数据格式不兼容_使用mysqldump全量导出导入

张开发
2026/5/30 2:17:10 15 分钟阅读
MySQL跨版本迁移数据格式不兼容_使用mysqldump全量导出导入
导出时未加--compatible导致5.7导入报错因5.7默认启用STRICT_TRANS_TABLES而允许非法日期应使用--compatiblemysql40导出并统一字符集为utf8mb4导入后执行ANALYZE TABLE更新统计信息。mysqldump导出时没加--compatible导入5.7报错Invalid default value for xxxMySQL 5.7 默认开启 STRICT_TRANS_TABLES而老版本如5.6允许0000-00-00这类非法日期作为默认值。直接导出再导入会触发严格模式校验失败。实操建议导出时显式指定兼容模式mysqldump --compatiblemysql40 --skip-extended-insert -u root -p db_name dump.sqlmysql40能绕过大部分默认值校验避免用--compatibleansi或postgresql——它们会改写语法反而增加解析负担如果目标库是8.0还需注意sql_mode中是否含NO_ZERO_DATE临时关闭它比改dump更稳妥SET sql_mode STRICT_TRANS_TABLES,NO_ENGINE_SUBSTITUTION;导入时卡在Creating table xxx实际是字符集不匹配常见于从 Latin1 编码的旧库导出、导入到默认utf8mb4的新库表结构里CHARSETlatin1被保留但字段定义没同步更新导致后续插入时报Incorrect string value。实操建议导出时强制统一字符集mysqldump --default-character-setutf8mb4 -u root -p db_name dump.sql导入前检查 dump 文件头是否有SET NAMES latin1手动替换成SET NAMES utf8mb4若已导入部分表别急着删库重来——用ALTER TABLE tbl CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci;逐表修复mysqldump --single-transaction在5.6以下主从环境中可能丢数据--single-transaction依赖一致性快照但 MySQL 5.5 及更早版本在启用binlog_formatSTATEMENT时某些DDL如ALTER TABLE会隐式提交事务导致快照失效。结果是 dump 中混入了中间态数据。 AI Code Reviewer AI自动审核代码

更多文章