MySQL 5.7 升级至 8.0 后需重点调整 sql_mode、innodb_buffer_pool_size、max_connections、lower_case_table_names 等配置,避免 STRICT 模式报错、缓冲池异常、连接数受限及表名找不到等问题,且必须校验变量兼容性与初始化约束。MySQL 5.7 升 8.0 后 sql_mode 报错怎么办升级后执行 INSERT 或 UPDATE 突然报 ERROR 1364 (HY000): Field doesn't have a default value,大概率是 sql_mode 默认值变了。5.7 默认含 STRICT_TRANS_TABLES,但 8.0 新增了 STRICT_ALL_TABLES 和更严的校验逻辑,且默认启用 ONLY_FULL_GROUP_BY。实操建议:先查旧库:运行 SELECT @@global.sql_mode;,把结果存下来新库别直接覆盖,先用 SET GLOBAL sql_mode = '...'; 临时设回旧值,验证业务是否跑通确认无误后,在新配置文件 /etc/my.cnf 的 mysqld 段加一行:sql_mode = "YOUR_OLD_VALUE"注意:8.0 对空字符串、零日期等校验更硬,光调 sql_mode 不一定能绕过,得同步检查字段 NOT NULL 和默认值定义my.cnf 里 innodb_buffer_pool_size 升级后要不要改要改,而且必须重算。8.0 的 InnoDB 内存管理机制有变化,尤其在大内存机器上,旧值可能导致缓冲池初始化失败或频繁刷脏页。实操建议:别直接复制旧值------比如旧库设了 innodb_buffer_pool_size = 12G,而新服务器内存翻倍,不调可能浪费资源;若内存减半还照搬,会触发大量磁盘 IO8.0 推荐值仍是物理内存的 50%--75%,但需避开 buffer_pool_chunk_size * chunk 数 对齐问题(默认 chunk_size=128M),否则启动时日志会警告 Buffer pool size not aligned启动前用 mysql --verbose --help | grep "buffer-pool-size" 看实际生效值,避免配置被注释或拼写错误(如写成 innodb_buffer_pool_size_)迁移后 max_connections 突然被限制在 214不是配错了,是 8.0 默认启用了 super_read_only + read_only 组合锁死部分系统变量,max_connections 在只读实例上会被强制压到极低值(214 是典型表现)。 Shakespeare 一款人工智能文案软件,能够创建几乎任何类型的文案。
相关推荐
这个DBA有点耶3 小时前
NULL不是空——数据库里最反直觉的设计,90%新人踩过的坑用户8356290780513 小时前
Python 实现 PDF 文件加密与解密方法用户8356290780513 小时前
使用 Python 冻结与拆分 Excel 窗格教程这个DBA有点耶5 小时前
AI写的SQL跑崩了生产库,这锅谁背?镜舟科技6 小时前
Databricks 再提 LTAP,AI 时代的数据底座为何重回大一统叙事?Databend7 小时前
从湖仓升级为 Agent 时代的数据控制面,Snowflake 和 Databricks 有哪些布局ClouGence10 小时前
SQL Server CDC 能放到 Always On 备库读吗?一文讲透原理与实践你好潘先生11 小时前
别再记命令了,用 yeero do 说句人话就能跑脚本,而且不烧 tokenAgent_大师12 小时前
WebSocket 行情重连成功,K线缺口不会自动消失荣码12 小时前
LLM结构化输出:让AI返回JSON而不是废话,我踩了4个坑