thinkphp做雙語(yǔ)網(wǎng)站百度知道app官方下載
前沿
今天在使用flowable
流程框架的時(shí)候,遇到一個(gè)問(wèn)題。需要配置MySQL數(shù)據(jù)庫(kù)以實(shí)現(xiàn)表名大小寫不敏感。本以為這是一個(gè)簡(jiǎn)單的任務(wù),卻耗費(fèi)了我兩個(gè)多小時(shí)的時(shí)間。
docker容器中修改配置,重啟不成功
我們前提是容器中的mysql中已經(jīng)有很多數(shù)據(jù)庫(kù)和表,想直接修改配置。
1.修改配置文件
首先,在容器的宿主機(jī)上編輯MySQL配置文件my.cnf
,添加以下配置項(xiàng):
[mysqld] lower_case_table_names=1
2.重啟mysql容器
由于我們?nèi)萜饕呀?jīng)在運(yùn)行當(dāng)中,并且之前已經(jīng)把自定義額配置文件掛載到了 MySQL 配置目錄,我們嘗試直接重啟容器:
docker restart container_id
3.### 檢查容器狀態(tài)并驗(yàn)證結(jié)果
我們執(zhí)行docker ps
, 查看mysql容器狀態(tài), 發(fā)現(xiàn)容容器在一直重啟,這時(shí)候我們使用命令docker logs container_id
,查看容器日志,報(bào)錯(cuò)內(nèi)容如下
關(guān)鍵內(nèi)容為
Different lower_case_table_names settings for server('1')and data dictionary ('0')
Data Dictionary initialization failed.
根據(jù)報(bào)錯(cuò)內(nèi)容來(lái)分析來(lái)看,設(shè)置的lower_case_table_names=1與默認(rèn)的字典值0不一致,導(dǎo)致配置被拒絕。
解決方案
啟動(dòng)不成功后,我在想,有可能是mysql容器已經(jīng)存在,導(dǎo)致啟動(dòng)不成功。于是我把容器刪除后,重新創(chuàng)建容器也不行。只要把加的lower_case_table_names=1
配置去掉后,就可以啟動(dòng)成功。
折騰了一會(huì),突然想到應(yīng)該是已經(jīng)有存在的表的問(wèn)題。接著直接創(chuàng)建一個(gè)空數(shù)據(jù)內(nèi)容的容器,,發(fā)現(xiàn)沒(méi)問(wèn)題。
1.備份數(shù)據(jù)
這里我用的是 Navicat
, 操作簡(jiǎn)單方便。
2.清理現(xiàn)有容器
docker stop mysql-container
docker rm mysql-container
docker volume prune # 注意:這會(huì)清除所有未使用的 Docker 卷,謹(jǐn)慎使用
3.重新創(chuàng)建容器
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
有時(shí)候可能在配置文件中修改不生效,我們?cè)趩?dòng)命令上也加一下 lower_case_table_names=1
.
4.驗(yàn)證和恢復(fù)數(shù)據(jù)
我們進(jìn)入容器后,連接上mysql,執(zhí)行SHOW VARIABLES LIKE 'lower_case_table_names';
該命令,如果輸出lower_case_table_names
的值為 1
,這表明配置已生效。
配置生效后,恢復(fù)我們的數(shù)據(jù)。
結(jié)束語(yǔ)
通過(guò)這次經(jīng)歷,在之后處理Docker容器中的MySQL配置時(shí),需要對(duì)現(xiàn)有數(shù)據(jù)和配置的兼容性有充分的考慮。希望這次分享能夠幫助其他開(kāi)發(fā)者在遇到類似問(wèn)題時(shí),能夠更快地找到解決方案。
如果你覺(jué)得該文章不錯(cuò),不妨
1、點(diǎn)贊,讓更多的人也能看到這篇內(nèi)容
2、關(guān)注我,讓我們成為長(zhǎng)期關(guān)系
3、關(guān)注公眾號(hào)「前端有話說(shuō)」,里面已有多篇原創(chuàng)文章,和開(kāi)發(fā)工具,歡迎各位的關(guān)注,第一時(shí)間閱讀我的文章