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

MySQL time_zone=SYSTEM时CURRENT_TIME与服务器时间不符问题排查

解决MySQL CURRENT_TIME与服务器时间不一致的问题

这种情况我之前排查过好几次,虽然time_zone = SYSTEM理论上会让MySQL直接沿用系统时区,但实际还有几个容易被忽略的配置和细节需要确认:

1. 确保MySQL进程能正确读取系统时区环境变量

有时候MySQL启动时没有继承系统的TZ环境变量,导致即使系统时区正确,MySQL也无法识别。

  • 先检查系统时区:
    # Linux系统
    timedatectl
    # 或者查看时区标识
    date +%Z
    
  • 确认MySQL进程的环境变量:可以通过ps aux | grep mysqld查看启动参数,或者在MySQL配置文件(my.cnf/my.ini)的[mysqld]段添加:
    default-time-zone = SYSTEM
    
    添加后重启MySQL服务,确保配置生效。

2. 检查并修复MySQL时区表

MySQL的SYSTEM时区依赖于系统的时区数据,但如果mysql库下的时区表缺失或不完整,会导致时区解析错误。

  • 先查看时区表是否有数据:
    USE mysql;
    SELECT COUNT(*) FROM time_zone_name;
    
    如果返回0,说明时区表是空的,需要重新导入:
    # 适用于Linux系统,将系统时区数据导入MySQL
    mysql_tzinfo_to_sql /usr/share/zoneinfo | mysql -u root -p mysql
    
    导入完成后重启MySQL,再检查时区表数据是否正常。

3. 排查会话级别的时区设置

全局time_zone是SYSTEM不代表所有会话都继承这个设置,可能某个会话被手动修改过时区:

  • 检查当前会话的时区:
    SELECT @@session.time_zone;
    
  • 如果结果不是SYSTEM,可以手动重置:
    SET SESSION time_zone = 'SYSTEM';
    
    同时要确认你的应用程序在连接数据库时,没有通过代码设置会话时区(比如某些ORM框架会默认设置时区)。

4. 验证系统时钟的一致性

确保服务器的系统时钟和硬件时钟(RTC)同步,避免时间漂移:

  • 查看硬件时钟:
    hwclock --show
    
  • 对比系统时钟(date命令输出),如果不一致,执行同步:
    hwclock --systohc
    
  • 同时确认NTP服务(比如chronyd或ntpd)处于运行状态,保证系统时间长期准确:
    systemctl status chronyd
    

最后验证

完成以上步骤后,重启MySQL服务,然后执行以下命令确认:

SHOW GLOBAL VARIABLES LIKE 'time_zone';
SELECT CURRENT_TIME(), NOW();

此时CURRENT_TIME的输出应该和服务器date命令的时间完全一致。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.19 08:21:25