在Ubuntu中使用Docker启动MySQL8的天坑

写在前面

简介: lower_case_table_names是mysql设置大小写是否敏感的一个参数。

1.参数说明:

lower_case_table_names=0 表名存储为给定的大小和比较是区分大小写的

lower_case_table_names = 1 表名存储在磁盘是小写的,但是比较的时候是不区分大小写

lower_case_table_names=2 表名存储为给定的大小写但是比较的时候是小写的
unix,linux下lower_case_table_names默认值为 0 .Windows下默认值是 1 .Mac OS X下默认值是 2

lower_case_table_names最奇葩的地方就在于不同系统下的默认值是不一样的。不同的默认值设定就可能会导致同一个.sql文件中建表SQL语句在不同系统中失效,从而在数据库中(例如在Ubuntu系统下)出现单词相同但分别是大写和小写的两张数据表,更可怕的是,可能出现同名的外键从而产生错误。

2.查看方法:

bash 复制代码
# 进入mysql命令行 执行以下任一语句查看:
show variables like 'lower_case_table_names';
select @@lower_case_table_names;

在Ubuntu下用DOCKER启动MySQL8,如果表格的大小写确实很重要的话,必须在第一次运行docker run时,添加上--lower_case_table_names=1 这个配置项

bash 复制代码
docker run -it -d --name mysql --net=host  -v /root/mysql/data:/var/lib/mysql \
-v /root/mysql/config:/etc/mysql/conf.d  \
-e MYSQL_ROOT_PASSWORD=123456 \
-e TZ=Asia/Shanghai mysql \
--lower_case_table_names=1

如果MYSQL启动起来了,数据库中内容改变了,并且容器与Ubuntu中有映射的话,等出现大小写问题是,就没有办法再修改 --lower_case_table_names的值了。

采用停止并删除原有容器,用docker run创建新容器,添加上 --lower_case_table_names,但只要你的映射(-v)与之前的容器是一样的(这样做是希望新容器中仍然能有原容器中创建的数据库与数据表),那新容器会在启动后(可以生成ID)几秒钟发生错并退出,如果你在docker run中还添加了 --restart=always,那就会看到容器一直在不停从重启。

采用网上给出的修改my.conf文件的方式添加 --lower_case_table_names=1,再新建容器的方式只适合DOCKER MySQL5.7,对DOCKER MySQL8的容器会依然是无效的。

bash 复制代码
[mysqld]
pid-file        = /var/run/mysqld/mysqld.pid
socket          = /var/run/mysqld/mysqld.sock
datadir         = /var/lib/mysql
secure-file-priv= NULL
lower_case_table_names=1

最后的结论就是,如果在Ubuntu或Linux环境中,启用DOCKER MySQL8,就务必记得在第一次启动,也就是MySQL8数据库最"干净"时候,添加上**--lower_case_table_names=1**

相关推荐
北顾笙9808 分钟前
MYSQL-day03
数据库·sql·mysql
ULIi096kr33 分钟前
MySQL大表优化终极方案:单表数据量上限、卡顿解决、分表分库实战教程
数据库·mysql
deviant-ART40 分钟前
MySQL里的三个concat函数
数据库·mysql
H_老邪1 小时前
1044 - Access denied for user ‘root‘@‘%‘ to database ‘nacos‘
数据库·mysql
凭X而动2 小时前
MySQL 5.7.44 部署
数据库·mysql·部署
Adorable老犀牛2 小时前
MySQL Server Exporter:Prometheus 监控 MySQL/MariaDB 指南
mysql·prometheus·mariadb
范什么特西3 小时前
重点:mybatis注意细节
java·mysql·mybatis
杨浦老苏3 小时前
PDF文档管理平台PDFManager
docker·pdf·工具·群晖
ai产品老杨3 小时前
解耦异构安防:基于 Docker 与边缘计算的 AI 视频管理平台,如何实现 GB28181/RTSP 统一接入与全源码交付
人工智能·docker·边缘计算
swordbob4 小时前
MySQL和Oracle关于读未提交的区别
数据库·mysql·oracle