最近做了次数据迁移,重新安装了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 小时。
相关阅读
- 在MySQL 中使用NOLOCK有必要吗?|原理与替代方案
- MySql 中不存在就插入存在则更新语句
- MySQL 创建用户命令带密码和加密规则
- Not loading a JDBC driver as driverClassName property is null