最近装了个虚拟机跑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默认值了.
网友评论