导出时未加--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 天前
C++11并发编程:call_once一次性执行+atomic原子类型+CAS无锁编程+自旋锁梓䈑1 天前
【MySQL】MySQL安装 和 配置Dxy12393102161 天前
Django 数据库 ENGINE 完全指南:选错了,性能差 10 倍小马爱打代码1 天前
Redis 和 MySQL 双写一致性:延迟双删、读写锁、MQ、Canal 怎么选?码不停蹄的玄黓1 天前
Java 生产者-消费者模型详解数智顾问1 天前
(133页PPT)数据中心基础设施规划设计(附下载方式)l1t1 天前
DeepSeek总结的PostgreSQL 的开源 TDE:pg_tde南极企鹅1 天前
深入理解 MVCC:数据库并发控制的基石欧神附体1231 天前
MYSQL数据库集群高可用和数据监控平台项目