一. 错误来源

自从发现docke里面能拉MySQL后,就特别喜欢用docker里面的MySQL了,但是今天发现docker拉的MySQL使用的时区是UTC,和我们差了八个小时,我这种强迫症肯定不能忍啊,于是就开启了改时区之路。

二、在MySQL中通过命令修改(失败)

SET GLOBAL time_zone = '+8:00';		/*设置时区*/

FLUSH PRIVILEGES;		/*刷新*/

SELECT	CURTIME();		/*获取当前时间*/

SHOW VARIABLES LIKE "%time_zone%";		/*查看当前使用的时区*/

我们希望通过设置全局时区+8来实现东八区效果,运行结果如下,没有报错,但是效果…………并没用。
在这里插入图片描述
在这里插入图片描述

上面第二张图片表示现在MySQL使用系统时区,系统使用UTC时区。。。
下面是centos虚拟机查看时区的截图,Local time是CST,Universal time是UTC,没搞懂,先不管。
在这里插入图片描述

三、在docker中修改MySQL启动的配置文件

  1. 先启动docker中MySQL镜像
  2. 执行docker exec -it <你的镜像id> bash
  3. 修改MySQL启动的配置文件
  4. PS:24XXXXXXXX是我的id,你要用自己的镜像ID
  5. PS:如果使用vim,提示找不到,需要在2之后执行命令安装vim,再进行3
    apt-get updateapt-get install vim

在这里插入图片描述
在这里插入图片描述
我在docker的MySQL启动配置文件中设置了default-time-zone = '+08:00',用来设置时区(这里实际上有问题的,可以先下面我出现的问题),接下来保存退出vim,然后通过exit退出bash。

然后重启docker中MySQL镜像(这里开始报错了),下图可以看到状态为1,非正常退出,
在这里插入图片描述
使用docker logs <id>来看这个镜像日志,如下所示,就是我们修改的地方出现了问题。

[ERROR] [Entrypoint]: mysqld failed while attempting to check config
        command was: mysqld --verbose --help --log-bin-index=/tmp/tmp.OesLO91Pq0
        mysqld: [ERROR] Found option without preceding group in config file /etc/mysql/my.cnf at line 23!
mysqld: [ERROR] Fatal error in defaults handling. Program aborted

在这里插入图片描述

🆗,现在知道了问题,我们去修该错误。
我们打算修改回来配置文件,结果发现进不去了,如下,必须要启动才能修改配置文件,但是启动不了,启动不了就是因为配置文件错误哦。。。。。。

 docker exec -it 24 bash
Error response from daemon: Container 24b0ac4e9dc55d08f03f3deaf333d03e3042290638782f299e91dc0da6f81776 is not running

接下来怎么办呢,重新拉一个docker镜像????,我的数据库里面的数据呢,怎么办。

接下来我们运行docker inspect 24(镜像id),我们在输出结果中找到upperDIr,使用cd命令到此目录直接修改配置文件。

在这里插入图片描述

注意etc/mysql/mysql.cnf是相对目录。
在这里插入图片描述
加上[mysqld],然后保存退出。
在这里插入图片描述
如下所示,可以看到现在能够正常启动了,我们接下来看一下时区有没有改过来。

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
虽然系统时区还是UTC,但是数据库时区已经+8了,ok,也算是成功修改了数据库时区吧。

Logo

华为开发者空间,是为全球开发者打造的专属开发空间,汇聚了华为优质开发资源及工具,致力于让每一位开发者拥有一台云主机,基于华为根生态开发、创新。

更多推荐