前沿
今天在使用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
文章源自灵鲨社区-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配置时,需要对现有数据和配置的兼容性有充分的考虑。希望这次分享能够帮助其他开发者在遇到类似问题时,能够更快地找到解决方案。
评论