Linux修改时间对mysql的影响,Mysql时间和本机时间不一致&Linux设置或修改时间与时区的正确方法...

工作过程遇到开发告诉我数据库时间和当前时间不一致,于是去查看,发现系统时间不是当前时间,于是查找资料整理如下,希望也可以帮到其它人。

一、Mysql时间和本机时间不一致

通过mysql命令行模式下动态修改

1.查看mysql当前时间,当前时区

(root@localhost) [(none)]>select now();

+---------------------+

| now() |

+---------------------+

| 2018-12-07 02:30:06 |

+---------------------+

1 row in set (0.00 sec)

(root@localhost) [(none)]> show variables like "%time_zone%";

+------------------+--------+

| Variable_name | Value |

+------------------+--------+

| system_time_zone | EST |

| time_zone | SYSTEM |

+------------------+--------+

2 rows in set (0.00 sec)

(root@localhost) [(none)]>

time_zone说明mysql使用system的时区

system_time_zone说明system使用EST时区

2、修改时区

临时生效

set global time_zone = '+8:00'; ##修改mysql全局时区为北京时间,即我们所在的东8区

set time_zone = '+8:00'; ##修改当前会话时区

flush privileges; #立即生效

永久生效

通过修改my.cnf配置文件来修改时区

vim /etc/my.cnf ##在[mysqld]区域中加上

default-time_zone = '+8:00'

/etc/init.d/mysqld restart ##重启mysql使新时区生效

二、Linux设置或修改时间与时区的正确方法

首先了解一下linux系统的时间

linux系统时间有两个,一个是硬件时间,即BIOS时间,就是我们进行CMOS设置时看到的时间,另一个是系统时间,是linux系统Kernel时间。当Linux启动时,系统Kernel会去读取硬件时钟的设置,然后系统时钟就会独立于硬件运作。有时我们会发现系统时钟和硬件时钟不一致,因此需要执行时间同步。

1)查看时间和设置时间以及系统时钟和硬件时钟同步

1、date 查看/设置系统时间

1、将日期设置为2018年10月6日

[root@linux ~]# date -s 10/06/18

2、将时间设置为11点12分13秒

[root@linux ~]# date -s 11:12:13

3、将时间设置为2018年10月6日11点12分13秒(MMDDhhmmYYYY.ss)

[root@linux ~]# date 1006111218.13

2、hwclock/clock 查看/设置硬件时间

1、查看系统硬件时钟(以下两个一样效果)

[root@linux ~]# hwclock --show

[root@linux ~]# clock --show

2、设置硬件时间(以下两个一样效果)

[root@linux ~]# hwclock --set --date="10/06/18 12:13" (月/日/年时:分:秒)

[root@linux ~]# clock --set --date="10/06/18 12:13" (月/日/年时:分:秒)

3、同步系统及硬件时钟

1、系统时间找硬件时间同步(以下两个一样效果)

[root@linux ~]# hwclock --hctosys

[root@linux ~]# clock --hctosys

备注:hc代表硬件时间,sys代表系统时间,以硬件时间为基准,系统时间找硬件时间同步

2、硬件时间找系统时间同步(以下两个一样效果)

[root@linux ~]# hwclock --systohc

[root@linux ~]# clock --systohc

备注:以系统时间为基准,硬件时间找系统时间同步

2)修改时区

首先了解时区

CentOS和Ubuntu的时区文件是/etc/localtime,但是在CentOS7以后localtime以及变成了一个链接文件

[root@centos7 ~]# ll /etc/localtime

lrwxrwxrwx 1 root root 33 Oct 15 2017 /etc/localtime -> /usr/share/zoneinfo/Asia/Shanghai

如果采用直接cp的方法修改系统时区,那么就会把它所链接的文件修改掉,例如把美国的时区文件内容修改成了上海的时区内容,有可能会导致有些编程语言或程序在读取系统时区的时候发生错误

正确的修改时区方法

1、CentOS6、Ubuntu16

# cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime

2、CentOS7、RHEL7等等

最好的方法是使用timedatectl命令

# timedatectl list-timezones |grep Shanghai #查找中国时区的完整名称

# timedatectl set-timezone Asia/Shanghai #其他时区以此类推

或者直接手动创建软链接

# ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime

3、修改配置文件来修改时区

[root@linux ~]# echo "ZONE=Asia/Shanghai" >> /etc/sysconfig/clock

[root@linux ~]# rm -f /etc/localtime

#链接到上海时区文件

[root@linux ~]# ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime

总结:

我的场景是mysql数据库时间和当前时间不一致,是系统时区问题。后来发现这个系统时区是EST美国时区,是客户提供的系统,部署系统时没有选对时区。现在数据库又不能停止,因此按照上面,这数据库全局设置set global time_zone = '+8:00';然后数据库时间是正常的了(说明: system_time_zone 这个值是数据库启动从系统读取产生的只读变量,不可修改)。然后就是我的系统是centos7.4,因此使用timedatectl 命令修改系统时区是最方便的,这样即使数据库重启或系统重启,都是正确的时区。

[root@linux ~]# timedatectl set-timezone Asia/Shanghai

[root@linux ~]# timedatectl status

Local time: Fri 2018-12-07 11:11:39 CST

Universal time: Fri 2018-12-07 03:11:39 UTC

RTC time: Fri 2018-12-07 11:11:37

Time zone: Asia/Shanghai (CST, +0800)

NTP enabled: yes

NTP synchronized: yes

RTC in local TZ: yes

DST active: n/a

[root@linux ~]#

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值