Docker的MySQL容器时区问题修改
前⾔
阿航在开发Springboot项⽬时, 前端告诉验证码⼀直⽆效. 本地测试没有问题, ⼀看远程服务器的数据库时间, 哇塞–早了8⼩时. 很明显, 是MySQL的时区问题. 本篇⽂章就来记录下如何修改Docker 的 MySQL 容器时区.
解决⽅案
先来校验下数据库是否真的时区不对. 进⼊MySQL数据库, 运⾏语句:
SELECT NOW();
会返回类似这样的数据:
mysql> SELECT NOW();
+---------------------+
docker重启容器命令| NOW() |
+---------------------+
| 2020-07-04 15:46:46 |
+---------------------+
1 row in set (0.09 sec)
再来查询下当前时区, 输⼊以下命令:
SHOW VARIABLES LIKE '%time_zone%';
会返回类似这样的数据:
mysql> SHOW VARIABLES LIKE '%time_zone%';
+------------------+--------+
| Variable_name | Value |
+------------------+--------+
| system_time_zone | UTC |
| time_zone | +00:00 |
+------------------+--------+
2 rows in set (0.12 sec)
如果返回的时间和你的相差多个⼩时, 并且时区不对(⾮+08:00)的话, 那么证明你需要向下看了.
⽅法⼀: 临时修改
当我们的需求⾮常急的时候, 我们可以做此临时修改. 运⾏命令:
SET GLOBAL time_zone = '+8:00';
再次运⾏以下命令, 校验返回结果是否为当前时间:
SELECT NOW();
返回当前时间则证明修改成功.
之所以本⽅法称为”临时修改”, 是因为重启MySQL后该修改会失效.
⽅法⼆: 启动时加参数
此⽅法适⽤于条件允许我们重新创建⼀个MySQL容器,
创建容器时, 我们需要加上指定时区的命令(东⼋区是上海, 你可以按需修改为⾃⼰的时区):
-e TZ=Asia/Shanghai
所以, 我们的docker完整运⾏命令应该为(仅供参考, 你的运⾏命令可能略有差异):
docker run -p 3306:3306 --name mymysql -v $PWD/conf:/etc/mysql/conf.d -v $PWD/logs:/logs -e TZ=Asia/Shanghai -v $PWD/data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=123456 -d mysql:8.0要查看各个参数的⽤途, 请查看我的这篇⽂章: 《Docker 安装 MySQL》.
⽅法三: 修改容器内配置
输⼊以下命令进⼊mysql容器:
docker exec -it 容器ID bash
修改MySQL配置⽂件(两种情况):
vim /etc/f.d
或者
vim /etc/mysql/myf
如果以上命令返回bash: vim: command not found, 请先阅读
进⼊配置⽂件后, 点击i进⼊编辑模式, 添加⼀⾏配置⽂件:
default-time-zone = '+08:00'
如图:
添加配置⽂件
完成后, 点击ESC, 输⼊:wq进⾏保存并退出.
再输⼊exit退出docker容器.
接下来我们要重启mysql容器, 输⼊命令:
docker restart 容器ID
⾄此, 已经成功修改了时区配置.
重启后, 输⼊以下命令验证是否成功:
SELECT NOW();
如果返回时间和当前时间⼀致, 则证明修改成功.
结语
如果特别急, 推荐⽅法⼀. 不急则推荐⽅法⼆. 各位同学按需选择使⽤.
到此这篇关于Docker的MySQL容器时区问题修改的⽂章就介绍到这了,更多相关Docker MySQL容器时区内容请搜索以前的⽂章或继续浏览下⾯的相关⽂章希望⼤家以后多多⽀持!
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论