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自动审核代码

相关推荐
OceanRoy6 小时前
数据库表的设计
数据库·内连接·外连接·er图·表的约束·三大范式·多表连接
Pniubi7 小时前
怎么排查慢SQL,怎么解决?
java·数据库·sql
M--Y7 小时前
LangGraph 工作流模式
开发语言·javascript·python·langchain·大模型·llm·langgraph
岁月宁静8 小时前
DeepSeek Harness 实战与架构解析:让 Agent 从“会聊”到“能交付”
人工智能·python·agent
LiaoWL1238 小时前
NumPy 入门实战(二):向量化与余弦相似度——从 ndarray 到 Embedding
python·numpy·embedding
薛之谦_8 小时前
Java 全栈知识体系:从 IDEA 高效开发到 JVM、并发与 Stream 实战
java·jvm·intellij-idea
forest_098 小时前
多 Agent 协作第二课:交叉验证≠独立验证
人工智能·python·算法·机器学习·prompt·agi
Decay__11 小时前
VMware 安装 SQL Server 双节点 AlwaysOn 可用性组教程 —— WSFC、AG 与侦听器完整部署(系列核心篇)
运维·数据库·sql·mysql·架构
databook11 小时前
时间序列数据,先拆规律还是先查异常
python·数据挖掘·数据分析
茶栀(*´I`*)12 小时前
SQL 性能分析:从慢查询日志到执行计划的完整定位方法
数据库·sql