Docker容器启动mysql:Different lower_case_table_names settings for server (‘1‘) and data dictionary (‘0‘)

因为公司项目要部署一套离线环境,在一台没有装过东西的笔记本上部署。都装好后,项目启动了,结果报表不存在,百度一看,Linux中mysql默认是区分大小写的。
lower-case-table-names=0
#区分大小写
lower-case-table-names=0
#不区分大小写
lower-case-table-names=1
报错信息上图:
1.有的说改/etc/my.cnf,然后docker restart mysql
[mysqld]
lower_case_table_names = 1
结果:也是上面图片里的错;
2.在修改/etc/my.cnf的前提下,再加一条启动参数,重新启动
在-d 的后面加上 --lower-case-table-names=1;因为报错说的server里面的setting跟data dirctionary里面的值不一样嘛,然后就试试改成一样。接下来docker rm xxxx
后,再执行。
docker run -p 3306:3306 --name mysql \
-v /xxxxx/xxxxx/mysql/log:/var/log/mysql \
-v /xxxxx/xxxxx/mysql/data:/var/lib/mysql \
-v /xxxxx/xxxxx/mysql/conf/my.cnf:/etc/mysql/my.cnf \
-e MYSQL_ROOT_PASSWORD=xxxxxxx\
-d mysql --lower-case-table-names=1
结果:也是错的。
然后继续找,最后发现,因为我启动过mysql服务,生成了数据仓库。而mysql官网说:
After initialization, is is not allowed to change this setting.So "lower_case_table_names" needs to be set together with --initialize .
咱也看不懂,谷歌翻译呗:初始化后,不允许更改此设置。因此“lower_case_table_names”需要与 --initialize 一起设置。
接下来就明确了,初始化以后生成的数据不就是再我挂载的/xxxxx/xxxxx/mysql/data目录中嘛,反正我这个都是离线的项目,直接rm -rf /xxxxx/xxxxx/mysql/data/*
,数据都是备份了的。为了能一次成功,我连log里面的都给干掉了。
1里面修改过的my.cnf保持不变。2里面的命令也不变。直接执行,然后查看
芜湖起飞!成功。
对了,我这个就是为了记录一下这个问题,很水,专业的还要参考大佬的文章
https://blog.csdn.net/p793049488/article/details/108365929?utm_term=–lower_case_table_names=1docker&utm_medium=distribute.pc_aggpage_search_result.none-task-blog-2allsobaiduweb~default-0-108365929&spm=3001.4430




更多推荐
所有评论(0)