Loading

docker学习记录

docker使用:在windows系统存在一些问题

0 起因

起因是在使用goland时,解决使用goland连接MySQL中datetime不能为'0000-0-0 00:00:00'的问题

使用docker拉取的mysql镜像,先登录进入mysql

mysql -u root -proot -P 3306

然后将 NO_ZERO_IN_DATE,NO_ZERO_DATE两个配置删掉即可

修改全局

set @@global.sql_mode = 'ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION';

修改当前

set @@sql_mode = 'ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION';

最后记得重启goland

可参考:https://www.cnblogs.com/nayek/p/12915570.html


通过同步卷(volume)的方式,我们可以将docker中mysql的配置、数据、日志都同步到主机本地,但是,当我修改主机本地的配置文件中的sql_mode后,重新登录mysql查看发现我在本地的修改并不生效🤯,参考了各种博客无果....

1 原因

报错提示:Warning: World-writable config file is ignored

image-20220503231010042

从该目录可以看出应该时my.cnf 的权限太低了,mysql出于安全机制忽略了这个文件,

💡linux中mysql配置文件的结构可参考:

(39条消息) mysql悬案 之 为什么用docker启动的mysql配置文件不生效_chen2ha的博客-CSDN博客

但是在docker中mysql的my.cnf是修改不了权限的(我在Windows和Linux系统下的docker都试过),同样的mysql配置在我的Linux云服务器中如下:

image-20220503230907460

mysqld.cnf的权限如下:Windows 与 linux 相同

image-20220503231046442

即使Windows下使用docker 文件权限与Linux保持一致,修改MySQL本地的配置也不会同步到容器中,而linux的docker容器只需docker restart 容器名称,配置文件就能生效,配置文件与效果如下图:

image-20220503231359724

我们能看到log_bin为ON

image-20220503231439691

sql_mode的值也为我们设置的,这就永久解决了最初的datatime不能'0000-0-0 00:00:00'的问题。

image-20220503231532939

2 总结

docker 能用Linux系统还是尽量别用Windows,windows下的安装会比较麻烦,同时docker与虚拟机共存还存在一些问题,所以会很麻烦。

简而言之:docker用Linux就对了

//TODO....

参考:

(39条消息) mysql悬案 之 为什么用docker启动的mysql配置文件不生效_chen2ha的博客-CSDN博客

docker 下修改 mysql sql_mode和配置文件- 徐善通的随笔 (xstnet.com)

docker安装Mysql挂载数据卷 实现容器配置本地化 - HaimaBlog - 博客园 (cnblogs.com)

补充:docker 在Linux下部署MySQL的快速操作:目录参考自己的定义

docker run
-p 3306:3306 -d
-v /home/docker/mysql57/mysql_go/data:/var/lib/mysql
-v /home/docker/mysql57/mysql_go/log:/var/log/mysql
-v /home/docker/mysql57/mysql_go/conf/:/etc/mysql/mysql.conf.d\
-e MYSQL_ROOT_PASSWORD=root
--name mysql_go mysql:5.7

posted @ 2022-05-03 23:44  tios  阅读(72)  评论(0)    收藏  举报