最近做了次数据迁移,重新安装了MySql数据库,这次使用的版本是8.0.27,和以往不一样,这次安装前由于忘记调整Ubuntu的时区,所以安装后Mysql 的默认时间也是显示UTC时间,这个显然不是我想要的,顺便说一样,这次8.0.27和之前的8.0.17在配置上差别还是一些的,之前的配置参数有一些调整的。

这里就说一下如把mysql的默认UTC时间改为东八区时间。我的系统是Ubuntu20.4 , 在目录 /etc/mysql/conf.d 中找到mysql.cnf, 如果没有的话就新建一个。使用vim命令修改文件放置这个属性 default-time-zone='+8:00'

[mysqld]
#服务端口号 默认3306
port=3306
#指定东八区
default-time-zone='+8:00'

修改完成后重启mysql服务如下:

# service mysql restart
# service mysql status

完成后再使用SQL获取当前时间查看效果。

SELECT NOW() 

 

时区设置的完整清单

服务端时区改完只是第一步,连接层与 SQL 层还有两处要同步核对。

  • 配置文件全局生效:mysqld 段 default-time-zone='+8:00',改完重启服务;
  • 会话级即时改:SET time_zone='+8:00'(当前会话)或 SET GLOBAL(新会话生效,重启失效);
  • 用命名时区(如 Asia/Shanghai)需先导入系统时区表;
  • 连接串层面:Connector/J 加 serverTimezone=Asia/Shanghai,否则驱动会按自己的默认时区解释;
  • 验证:SELECT @@global.time_zone, @@session.time_zone, NOW(), UTC_TIMESTAMP(); 前后对照一目了然;
  • 历史数据迁移时注意原库存的到底是 UTC 还是本地时间,别把存量的 UTC 时间再加 8 小时。

相关阅读

参考资料