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
通过同步卷(volume)的方式,我们可以将docker中mysql的配置、数据、日志都同步到主机本地,但是,当我修改主机本地的配置文件中的sql_mode后,重新登录mysql查看发现我在本地的修改并不生效🤯,参考了各种博客无果....
1 原因
报错提示:Warning: World-writable config file is ignored

从该目录可以看出应该时my.cnf 的权限太低了,mysql出于安全机制忽略了这个文件,
💡linux中mysql配置文件的结构可参考:
(39条消息) mysql悬案 之 为什么用docker启动的mysql配置文件不生效_chen2ha的博客-CSDN博客
但是在docker中mysql的my.cnf是修改不了权限的(我在Windows和Linux系统下的docker都试过),同样的mysql配置在我的Linux云服务器中如下:

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

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

我们能看到log_bin为ON

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

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

浙公网安备 33010602011771号