Mysql(Docker) -Mysql5.7版本表名大小写
背景: 公司做项目,最开始使用的是 Windows 作为开发环境,由于个人爱好,选择了 deepin V20 作为了主开发环境,在使用 Docker 启动 Mysql 的时候完全正常,一旦在系统中使用,就发现表名大小写有问题,于是我找了博客阅读,得到的结果都是修改参数 lower_case_table_name=1 但是我的问题最终还是没有解决
参考地址: https://www.cnblogs.com/smallmin/p/11582954.html
- 启动
MySQL
服务
docker run -dit --name mysql5.7 -e MYSQL_ROOT_PASSWORD=root -p 3306:3306 -d mysql:5.7
- 进入
mysql
容器寻找my.cnf
路径并查看
## 进入容器
docker exec -it mysql5.7 bash
## 查看my.cnf所在路径
find -name 'my.cnf'
查找结果:
docker
中my.cnf
复制到宿主机上
docker cp mysql:/etc/mysql/my.cnf ${HOME}/opt/mysql/
- 查看是否复制成功
ls ${HOME}/opt/mysql
结果:
- 新建
mysql
容器启动mysql:5.7
这里因为我做了外部的挂在,所以启动命令比较长
sudo docker run -p 3306:3306 --restart=always \
--privileged=true --name mysql \
-v ${HOME}/opt/mysql/data:/var/lib/mysql \
-v ${HOME}/opt/mysql/my.cnf:/etc/mysql/my.cnf \
-e MYSQL_ROOT_PASSWORD="root" -d mysql:5.7
启动成功后,进入容器查看表名是否有大小写的区分:
show variables like 'lower_case_table_names%';
-- 0 表示区分表名大小写, 1 不区分表名大小写
+------------------------+-------+
| Variable_name | Value |
+------------------------+-------+
| lower_case_table_names | 0 |
+------------------------+-------+
- 执行两次
exit
命令,先从MySQL
中退出到容器内部,然后再从容器中退出到宿主机上。
## 这里注意了,必须使用 sudo 来操作,因为我的普通用户权限比较低,而且 my.cnf 文件权限较高,千万不要修改 my.cnf的权限级别,否则会出现启动失败的问题
sudo vim ${HOME}opt/mysql/my.cnf
注释掉
# !includedir /etc/mysql/conf.d/
# !includedir /etc/mysql/marriadb.conf.d/
## 新增如下内容
[mysqld]
lower_case_table_names=1
# esc : wq 即可
Docker
重启mysql
容器
docker restart mysql
- 进入容器查看
variables
## 进入容器
docker exec -it mysql bash
## 登录mysql
mysql -uroot -proot
## 查询关闭表名大小写的设置
mysql > show variables like 'lower_case_%';
+------------------------+-------+
| Variable_name | Value |
+------------------------+-------+
| lower_case_table_names | 1 |
+------------------------+-------+
- 总结
1.如果你的docker
容器启动失败,那么可以查看docker
日志,来确定错误的位置
docker logs -f -t --tail <行数> <容器名称>
2.从docker
中复制出my.cnf
文件的时候,在你不彻底明白mysql
对文件权限的要求情况下,千万不要修改他的读写权限,最开始我一直是使用头touch my.cnf
没有给指定权限,所以导致mysql
容器一直启动失败或my.cnf
无法生效.