docker中mysql设置lower_case_table_names配置的坑

零 Mysql教程评论70字数 1447阅读4分49秒阅读模式

docker中mysql设置lower_case_table_names配置的坑

前沿

今天在使用flowable流程框架的时候,遇到一个问题。需要配置MySQL数据库以实现表名大小写不敏感。本以为这是一个简单的任务,却耗费了我两个多小时的时间。

docker容器中修改配置,重启不成功

我们前提是容器中的mysql中已经有很多数据库和表,想直接修改配置。文章源自灵鲨社区-https://www.0s52.com/bcjc/mysqljc/17101.html

1.修改配置文件

首先,在容器的宿主机上编辑MySQL配置文件my.cnf,添加以下配置项:文章源自灵鲨社区-https://www.0s52.com/bcjc/mysqljc/17101.html

ini

代码解读
复制代码
[mysqld] 

lower_case_table_names=1

2.重启mysql容器

由于我们容器已经在运行当中,并且之前已经把自定义额配置文件挂载到了 MySQL 配置目录,我们尝试直接重启容器:文章源自灵鲨社区-https://www.0s52.com/bcjc/mysqljc/17101.html

代码解读
复制代码
docker restart container_id

3.### 检查容器状态并验证结果

我们执行docker ps, 查看mysql容器状态, 发现容容器在一直重启,这时候我们使用命令docker logs container_id,查看容器日志,报错内容如下文章源自灵鲨社区-https://www.0s52.com/bcjc/mysqljc/17101.html

image.png文章源自灵鲨社区-https://www.0s52.com/bcjc/mysqljc/17101.html

关键内容为文章源自灵鲨社区-https://www.0s52.com/bcjc/mysqljc/17101.html

java

代码解读
复制代码
Different lower_case_table_names settings for server('1')and data dictionary ('0')
Data Dictionary initialization failed.

根据报错内容来分析来看,设置的lower_case_table_names=1与默认的字典值0不一致,导致配置被拒绝。文章源自灵鲨社区-https://www.0s52.com/bcjc/mysqljc/17101.html

解决方案

启动不成功后,我在想,有可能是mysql容器已经存在,导致启动不成功。于是我把容器删除后,重新创建容器也不行。只要把加的lower_case_table_names=1配置去掉后,就可以启动成功。文章源自灵鲨社区-https://www.0s52.com/bcjc/mysqljc/17101.html

折腾了一会,突然想到应该是已经有存在的表的问题。接着直接创建一个空数据内容的容器,,发现没问题。文章源自灵鲨社区-https://www.0s52.com/bcjc/mysqljc/17101.html

1.备份数据

这里我用的是 Navicat, 操作简单方便。文章源自灵鲨社区-https://www.0s52.com/bcjc/mysqljc/17101.html

2.清理现有容器

bash

代码解读
复制代码
docker stop mysql-container 
docker rm mysql-container 
docker volume prune # 注意:这会清除所有未使用的 Docker 卷,谨慎使用

3.重新创建容器

ruby

代码解读
复制代码
docker run --restart=always --privileged=true  -v /opt/mysql/data2/:/var/lib/mysql  -v /opt/mysql/logs/:/var/log/mysql  -v /opt/mysql/conf/:/etc/mysql  -v /opt/mysql/my.cnf:/etc/mysql/my.cnf  -p 3306:3306 --name mysql  -e MYSQL_ROOT_PASSWORD=123456 -d mysql --lower_case_table_names=1

有时候可能在配置文件中修改不生效,我们在启动命令上也加一下 lower_case_table_names=1.

4.验证和恢复数据

我们进入容器后,连接上mysql,执行SHOW VARIABLES LIKE 'lower_case_table_names'; 该命令,如果输出lower_case_table_names 的值为 1,这表明配置已生效。

配置生效后,恢复我们的数据。

结束语

通过这次经历,在之后处理Docker容器中的MySQL配置时,需要对现有数据和配置的兼容性有充分的考虑。希望这次分享能够帮助其他开发者在遇到类似问题时,能够更快地找到解决方案。

零
  • 转载请务必保留本文链接:https://www.0s52.com/bcjc/mysqljc/17101.html
    本社区资源仅供用于学习和交流,请勿用于商业用途
    未经允许不得进行转载/复制/分享

发表评论