Docker 中 MySQL容器時區不對,導致插入的時間不准確


查詢 MySQL 時區及當前時間

mysql> show variables like '%zone%';
+------------------+--------+
| Variable_name    | Value  |
+------------------+--------+
| system_time_zone | UTC    |
| time_zone        | SYSTEM |
+------------------+--------+
2 rows in set

mysql> select now();
+---------------------+
| now()               |
+---------------------+
| 2019-10-15 05:37:07 |
+---------------------+
1 row in set
# 當前時間是  2019-10-15 13:37:07,差了 8 小時
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17

由於 docker 容器中,不能直接修改文件,所以只能現在 Host 中改好后,再利用 docker cp 復制到容器中。

修改 mysql 配置文件,配置時區時區為:東八區

[root@localhost ~]# vi /etc/my.cnf
[mysqld]
# set time-zone
default-time-zone = '+8:00'
# does not care about letter case
lower_case_table_names=1
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

復制配置文件到 docker mysql 容器中,MySQL 容器中的 配置文件在 /etc/mysql/mysql.conf.d/mysqld.cnf

# usage:docker cp docker cp [OPTIONS] SRC_PATH CONTAINER_NAME:DEST_PATH
docker cp /etc/my.cnf mysql5.7:/etc/mysql/mysql.conf.d/mysqld.cnf
  • 1
  • 2

再查詢時區和時間,時間已經更改好了,是我們想要的。

mysql> show variables like '%zone%';
+------------------+--------+
| Variable_name    | Value  |
+------------------+--------+
| system_time_zone | UTC    |
| time_zone        | +08:00 |
+------------------+--------+
mysql> select now();
+---------------------+
| now()               |
+---------------------+
| 2019-10-15 13:47:07 |
+---------------------+
1 row in set
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14

現在再插入數據,時間就正常了。

注:此方式僅適合解決因數據庫時區不正確而導致的問題,更詳細問題請參考 https://segmentfault.com/q/1010000010791397 中的討論


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM