docker运行MySQL如何修改配置文件

最近装了个虚拟机跑mysql

从docker上下载了latest的mysql镜像

(文中的命令均在root下执行的)

使用如下命令创建并运行容器

docker run --name my_mysql -p 3306:3306 -v ~/conf:/etc/mysql/conf.d -v ~/logs:/logs -v ~/data:/var/lib/mysql -e MYSQL\_ROOT\_PASSWORD=123 -d mysql

映射3306端口,映射了conf.d,logs,data三个共享目录,root账号密码为123,容器名称为my_mysql

运行成功后创建表,发现timestamp类型的字段无法将默认值设置为0000-00-00 00:00:00

查询sql_mode

select @@sql_mode;

结果为:

ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION

发现有NO_ZERO_IN_DATE,NO_ZERO_DATE两个mode

为了永远删掉它们,需要修改my.cnf配置,但是在docker容器中又不能直接改文件

于是查看了容器中my.cnf文件的位置

mysql --help | grep my.cnf

返回结果

/etc/my.cnf   /etc/mysql/my.cnf   ~/.my.cnf

挨个位置去找

发现/etc/mysql/my.cnf目录是有文件的,输出一下文件内容

mysql --help | grep my.cnf

发现在文件末尾有这么两行

# Custom config should go here

!includedir /etc/mysql/conf.d/

诶!  /etc/mysql/conf.d/目录不是正好被我映射出去了吗?

于是退出容器

到~/conf目录下

创建一个my.cnf文件

加入两行配置

[mysqld]

sql-mode=ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION

重启mysql容器

愉快的发现配置生效了,现在可以为timestamp类型设置0000-00-00 00:00:00默认值了.

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容