CentOS为系统和MySQL定义相同的日期和时区

CentOS为系统和MySQL定义相同的日期和时区

我意识到我在 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

立即纠正了该问题。无需重启!为了更好的措施,我清除了缓存等......

相关内容