You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

从MySQL 8.0.12原地升级至8.0.32时遇数据字典datetime错误求助

MySQL 8.0.12升级到8.0.32时数据字典零日期错误的解决方法

问题分析

从MySQL 8.0.12原地升级到8.0.32时,数据字典升级失败,核心原因是mysql.st_spatial_reference_systems表的last_altered列存在0000-00-00 00:00:00值,而8.0.32默认SQL模式包含NO_ZERO_DATE,禁止这类无效日期,导致系统表插入操作失败。由于这是MySQL系统数据字典表,默认无法直接修改,需要通过临时调整配置或回退版本处理。

解决方案

方案一:临时调整SQL模式完成升级

  1. 停止无法启动的8.0.32 MySQL服务。
  2. 打开MySQL配置文件(Windows为my.ini,Linux为my.cnf),在[mysqld]段落添加以下配置:
    sql_mode=ALLOW_INVALID_DATES,NO_ENGINE_SUBSTITUTION
    
    该配置会临时关闭零日期校验,允许系统完成数据字典升级。
  3. 重新启动8.0.32服务,此时数据字典升级将正常执行。
  4. 升级完成后,使用root账号登录MySQL,修正零日期数据:
    UPDATE mysql.st_spatial_reference_systems 
    SET last_altered = '1970-01-01 00:00:01' 
    WHERE last_altered = '0000-00-00 00:00:00';
    
  5. 恢复默认的严格SQL模式(示例为MySQL 8.0默认模式),修改配置文件中的sql_mode为:
    sql_mode=ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION
    
  6. 重启MySQL服务,完成最终配置。

方案二:回退到8.0.12修改数据后再升级

  1. 停止8.0.32服务,恢复原8.0.12的二进制执行文件。
  2. 启动8.0.12服务,使用root账号登录,执行SQL修正零日期:
    UPDATE mysql.st_spatial_reference_systems 
    SET last_altered = '1970-01-01 00:00:01' 
    WHERE last_altered = '0000-00-00 00:00:00';
    
    若提示权限不足,确认使用的是拥有最高权限的root账号,或临时调整innodb_force_recovery参数(仅必要时使用)。
  3. 停止8.0.12服务,重新替换为8.0.32二进制文件,正常启动服务完成升级。

注意事项

  • 务必先备份数据:修改系统表或升级前,全量备份数据库避免数据丢失。
  • 升级完成后必须恢复严格SQL模式,防止后续出现无效日期数据问题。
  • 若找不到配置文件,可通过命令行临时启动服务:
    # Windows示例
    mysqld --sql-mode="ALLOW_INVALID_DATES,NO_ENGINE_SUBSTITUTION"
    # Linux示例
    mysqld_safe --sql-mode="ALLOW_INVALID_DATES,NO_ENGINE_SUBSTITUTION" &
    

内容的提问来源于stack exchange,提问作者Ram

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.29 12:40:11