工作過(guò)程遇到開(kāi)發(fā)告訴我數(shù)據(jù)庫(kù)時(shí)間和當(dāng)前時(shí)間不一致棘催,于是去查看倦西,發(fā)現(xiàn)系統(tǒng)時(shí)間不是當(dāng)前時(shí)間,于是查找資料整理如下,希望也可以幫到其它人旅急。
一逢勾、Mysql時(shí)間和本機(jī)時(shí)間不一致
通過(guò)mysql命令行模式下動(dòng)態(tài)修改
1.查看mysql當(dāng)前時(shí)間,當(dāng)前時(shí)區(qū)
(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說(shuō)明mysql使用system的時(shí)區(qū)
system_time_zone說(shuō)明system使用EST時(shí)區(qū)
2藐吮、修改時(shí)區(qū)
臨時(shí)生效
set global time_zone = '+8:00'; ##修改mysql全局時(shí)區(qū)為北京時(shí)間溺拱,即我們所在的東8區(qū)
set time_zone = '+8:00'; ##修改當(dāng)前會(huì)話時(shí)區(qū)
flush privileges; #立即生效
永久生效
通過(guò)修改my.cnf配置文件來(lái)修改時(shí)區(qū)
vim /etc/my.cnf ##在[mysqld]區(qū)域中加上
default-time_zone = '+8:00'
/etc/init.d/mysqld restart ##重啟mysql使新時(shí)區(qū)生效
二、Linux設(shè)置或修改時(shí)間與時(shí)區(qū)的正確方法
首先了解一下linux系統(tǒng)的時(shí)間
linux系統(tǒng)時(shí)間有兩個(gè)谣辞,一個(gè)是硬件時(shí)間迫摔,即BIOS時(shí)間,就是我們進(jìn)行CMOS設(shè)置時(shí)看到的時(shí)間泥从,另一個(gè)是系統(tǒng)時(shí)間句占,是linux系統(tǒng)Kernel時(shí)間。當(dāng)Linux啟動(dòng)時(shí)躯嫉,系統(tǒng)Kernel會(huì)去讀取硬件時(shí)鐘的設(shè)置纱烘,然后系統(tǒng)時(shí)鐘就會(huì)獨(dú)立于硬件運(yùn)作。有時(shí)我們會(huì)發(fā)現(xiàn)系統(tǒng)時(shí)鐘和硬件時(shí)鐘不一致祈餐,因此需要執(zhí)行時(shí)間同步擂啥。
1)查看時(shí)間和設(shè)置時(shí)間以及系統(tǒng)時(shí)鐘和硬件時(shí)鐘同步
1、date 查看/設(shè)置系統(tǒng)時(shí)間
1帆阳、將日期設(shè)置為2018年10月6日
[root@linux ~]# date -s 10/06/18
2哺壶、將時(shí)間設(shè)置為11點(diǎn)12分13秒
[root@linux ~]# date -s 11:12:13
3、將時(shí)間設(shè)置為2018年10月6日11點(diǎn)12分13秒(MMDDhhmmYYYY.ss)
[root@linux ~]# date 1006111218.13
2蜒谤、hwclock/clock 查看/設(shè)置硬件時(shí)間
1变骡、查看系統(tǒng)硬件時(shí)鐘(以下兩個(gè)一樣效果)
[root@linux ~]# hwclock --show
[root@linux ~]# clock --show
2、設(shè)置硬件時(shí)間(以下兩個(gè)一樣效果)
[root@linux ~]# hwclock --set --date="10/06/18 12:13" (月/日/年時(shí):分:秒)
[root@linux ~]# clock --set --date="10/06/18 12:13" (月/日/年時(shí):分:秒)
3芭逝、同步系統(tǒng)及硬件時(shí)鐘
1塌碌、系統(tǒng)時(shí)間找硬件時(shí)間同步(以下兩個(gè)一樣效果)
[root@linux ~]# hwclock --hctosys
[root@linux ~]# clock --hctosys
備注:hc代表硬件時(shí)間,sys代表系統(tǒng)時(shí)間旬盯,以硬件時(shí)間為基準(zhǔn)台妆,系統(tǒng)時(shí)間找硬件時(shí)間同步
2、硬件時(shí)間找系統(tǒng)時(shí)間同步(以下兩個(gè)一樣效果)
[root@linux ~]# hwclock --systohc
[root@linux ~]# clock --systohc
備注:以系統(tǒng)時(shí)間為基準(zhǔn)胖翰,硬件時(shí)間找系統(tǒng)時(shí)間同步
2)修改時(shí)區(qū)
首先了解時(shí)區(qū)
CentOS和Ubuntu的時(shí)區(qū)文件是/etc/localtime接剩,但是在CentOS7以后localtime以及變成了一個(gè)鏈接文件
[root@centos7 ~]# ll /etc/localtime
lrwxrwxrwx 1 root root 33 Oct 15 2017 /etc/localtime -> /usr/share/zoneinfo/Asia/Shanghai
如果采用直接cp的方法修改系統(tǒng)時(shí)區(qū),那么就會(huì)把它所鏈接的文件修改掉萨咳,例如把美國(guó)的時(shí)區(qū)文件內(nèi)容修改成了上海的時(shí)區(qū)內(nèi)容懊缺,有可能會(huì)導(dǎo)致有些編程語(yǔ)言或程序在讀取系統(tǒng)時(shí)區(qū)的時(shí)候發(fā)生錯(cuò)誤
正確的修改時(shí)區(qū)方法
1、CentOS6、Ubuntu16
# cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
2鹃两、CentOS7遗座、RHEL7等等
最好的方法是使用timedatectl命令
# timedatectl list-timezones |grep Shanghai #查找中國(guó)時(shí)區(qū)的完整名稱
# timedatectl set-timezone Asia/Shanghai #其他時(shí)區(qū)以此類推
或者直接手動(dòng)創(chuàng)建軟鏈接
# ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
3、修改配置文件來(lái)修改時(shí)區(qū)
[root@linux ~]# echo "ZONE=Asia/Shanghai" >> /etc/sysconfig/clock
[root@linux ~]# rm -f /etc/localtime
#鏈接到上海時(shí)區(qū)文件
[root@linux ~]# ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
總結(jié):
我的場(chǎng)景是mysql數(shù)據(jù)庫(kù)時(shí)間和當(dāng)前時(shí)間不一致俊扳,是系統(tǒng)時(shí)區(qū)問(wèn)題途蒋。后來(lái)發(fā)現(xiàn)這個(gè)系統(tǒng)時(shí)區(qū)是EST美國(guó)時(shí)區(qū),是客戶提供的系統(tǒng)馋记,部署系統(tǒng)時(shí)沒(méi)有選對(duì)時(shí)區(qū)『牌拢現(xiàn)在數(shù)據(jù)庫(kù)又不能停止,因此按照上面梯醒,這數(shù)據(jù)庫(kù)全局設(shè)置set global time_zone = '+8:00';然后數(shù)據(jù)庫(kù)時(shí)間是正常的了(說(shuō)明: system_time_zone 這個(gè)值是數(shù)據(jù)庫(kù)啟動(dòng)從系統(tǒng)讀取產(chǎn)生的只讀變量宽堆,不可修改)。然后就是我的系統(tǒng)是centos7.4茸习,因此使用timedatectl 命令修改系統(tǒng)時(shí)區(qū)是最方便的畜隶,這樣即使數(shù)據(jù)庫(kù)重啟或系統(tǒng)重啟,都是正確的時(shí)區(qū)逮光。
[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 ~]#