我意识到我在 Digital Ocean 中的一些 Droplet 在操作系统和 MySQL 之间有不同的时区。默认情况下,我已通过 和 将所有虚拟机配置为巴西时区(美国/圣保罗)tzselect
,并且假设 MySQL 使用系统默认时区。
因此,当我输入当前时间戳时,我从 CentOS 得到:
date
Thu Jun 9 09:43:03 BRT 2016
以及来自 MySQL 的:
mysql> select current_timestamp;
+---------------------+
| current_timestamp |
+---------------------+
| 2016-06-09 12:45:57 |
+---------------------+
1 row in set (0.00 sec)
mysql>
阅读文档MySQL 5.5,我可以选择使用时区作为字符串,例如'America/Sao_Paulo'
,但是,CentOS 6.5 附带 MySQL 5.1,并且它没有相同的选项,仅使用小时,如 +3:00 ...我确信我想我不应该担心 MySQL 的日期/时间,因为我已经在系统上配置了它。
我所做的 CentOS 时区配置:
我使用tzselect
命令设置巴西时区,认为 MySQL 将采用此配置。重新启动后,我意识到系统删除了我在 tzselect 上的配置,为了防止这种情况,我将这一行放在/etc/rc.local
:
ln -sf /usr/share/zoneinfo/America/Sao_Paulo /etc/localtime
即使这样配置,我意识到有些虚拟机是UTC,其他虚拟机是BRT……此时此刻,我真的不知道如何用相同的方式配置我的所有服务器,至少40台机器。
有人可以帮我解释如何正确设置系统的时区以及 MySQL 的时区吗?
附加信息
系统:CentOS 6.5 x64 MySQL:5.1(默认)
下面是 @lese 询问的命令:
mysql> SELECT @@global.time_zone, @@session.time_zone;
+--------------------+---------------------+
| @@global.time_zone | @@session.time_zone |
+--------------------+---------------------+
| SYSTEM | SYSTEM |
+--------------------+---------------------+
1 row in set (0.00 sec)
mysql> select current_timestamp;
+---------------------+
| current_timestamp |
+---------------------+
| 2016-06-09 14:31:19 |
+---------------------+
1 row in set (0.00 sec)
mysql> exit
Bye
$ date
Thu Jun 9 11:31:22 BRT 2016
/etc/sysconfig/clock
以及文件中的机器时间:
[root@xxxx]# cat /etc/sysconfig/clock
ZONE=Etc/UTC
此致。
答案1
我发现了问题,
我曾经tzselect
选择过我的时区,但是 /etc/sysconfig/clock 带有ZONE=America/New_York
,导致系统和使用系统日期/时间信息的应用程序出现一些错误。要修复此问题并保持 BIOS 时钟与系统时钟同步,请执行以下步骤:
sudo vim /etc/sysconfig/clock
ZONE="America/Sao_Paulo"
UTC=true
ARC=false
然后重新启动系统。
sudo reboot
default_time_zone
从/etc/my.cnf
(对于 CentOS)或/etc/mysql/my.cnf
(对于基于 Ubuntu 的操作系统)中删除不需要的时区参数,例如。
然后重新启动 MySQL 服务器实例:
sudo /etc/init.d/mysqld restart
最后,要检查所有配置是否正确,请使用以下命令:
mysql> select current_timestamp;
+---------------------+
| current_timestamp |
+---------------------+
| 2016-06-09 15:18:32 |
+---------------------+
1 row in set (0.00 sec)
mysql> exit
Bye
[carlos@xxxx-setup ~]$ date
Thu Jun 9 15:18:34 BRT 2016
[carlos@xxx-setup ~]$
感谢@lese的关注。
答案2
我讨厌删除旧帖子,但这似乎是发布此信息的唯一合适的地方。在 CentOS 7 中,默认的 MariaDB 10 设置(使用 CentOS 标准 rpm)的时区文件位置错误。我们在使用依赖 MySQL 获取时区信息的应用程序时遇到了问题。无论我们在应用程序中使用什么设置,它们始终返回 UTC 时区时间。
这:
mysql_tzinfo_to_sql /usr/share/zoneinfo/right |mysql -u root mysql -p
立即纠正了该问题。无需重启!为了更好的措施,我清除了缓存等......