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 中的讨论
分类:
docker
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 单元测试从入门到精通
· 上周热点回顾(3.3-3.9)
· winform 绘制太阳,地球,月球 运作规律