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

导出时未加--compatible导致5.7+导入报错,因5.7默认启用STRICT_TRANS_TABLES而允许非法日期;应使用--compatible=mysql40导出,并统一字符集为utf8mb4,导入后执行ANALYZE TABLE更新统计信息。mysqldump导出时没加--compatible,导入5.7+报错Invalid default value for 'xxx'MySQL 5.7 默认开启 STRICT_TRANS_TABLES,而老版本(如5.6)允许0000-00-00这类非法日期作为默认值。直接导出再导入会触发严格模式校验失败。实操建议:导出时显式指定兼容模式:mysqldump --compatible=mysql40 --skip-extended-insert -u root -p db_name > dump.sql(mysql40能绕过大部分默认值校验)避免用--compatible=ansi或postgresql------它们会改写语法,反而增加解析负担如果目标库是8.0,还需注意sql_mode中是否含NO_ZERO_DATE,临时关闭它比改dump更稳妥:SET sql_mode = 'STRICT_TRANS_TABLES,NO_ENGINE_SUBSTITUTION';导入时卡在Creating table xxx,实际是字符集不匹配常见于从 Latin1 编码的旧库导出、导入到默认utf8mb4的新库:表结构里CHARSET=latin1被保留,但字段定义没同步更新,导致后续插入时报Incorrect string value。实操建议:导出时强制统一字符集:mysqldump --default-character-set=utf8mb4 -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_format=STATEMENT时,某些DDL(如ALTER TABLE)会隐式提交事务,导致快照失效。结果是 dump 中混入了中间态数据。 AI Code Reviewer AI自动审核代码

相关推荐
复园电子1 小时前
企业级PDF批量盖章方案选型指南
数据库·pdf
汤姆小白3 小时前
01-环境搭建与项目导览
人工智能·python·机器学习·numpy
AI-好学者8 小时前
阶段一-图数据库基础与PropertyGraph模型
数据库·rag·knowledge graph·graphrag
向日的葵0069 小时前
langchain的Tools教程(三)
python·langchain·tools
其实防守也摸鱼9 小时前
运维--学习阶段问题解答(1)(自测)
linux·运维·服务器·数据库·学习·自动化·命令模式
懒鸟一枚10 小时前
深入理解 Linux 内存、Swap 交换分区与分页机制的关系
java·linux·数据库
龙仔72510 小时前
SQL Server 创建只读账号完整操作(分两种场景:SSMS图形界面 + T-SQL脚本)
数据库·sql·oracle
言乐610 小时前
Python实现可运行解密游戏游戏框架
python·游戏·小程序·游戏程序·关卡设计
霁月的小屋10 小时前
生产环境中的事务实践——银行系统上线记(四)
数据库
YUS云生10 小时前
Python学习笔记·第31天:FastAPI入门——路由、路径参数、查询参数与请求体
笔记·python·学习