錯誤截圖
原因查詢
通過搜索問題定位原因大致如下(原文是英文井赌,機器翻譯如下):
lower_case_table_names 設置告訴 mysql 如何存儲和比較表名坟岔。如果存儲數(shù)據(jù)庫的文件系統(tǒng)本身不區(qū)分大小寫,它將強制您使用 lower_case_table_names=2璧诵。
MacOS 文件系統(tǒng)不區(qū)分大小寫盔几。直到 Docker Desktop 2.4,mysql 容器顯然不知道底層文件系統(tǒng)不區(qū)分大小寫并設置 lower_case_table_names=0袱瓮。然而,自從升級到 Docker 2.4 后爱咬,Docker 在如何掛載卷方面顯然更聰明了尺借。所以容器實現(xiàn)了它在不區(qū)分大小寫的文件系統(tǒng)上運行并強制lower_case_table_names=2。問題是初始化數(shù)據(jù)庫后不能更改 lower_case_table_names 的值台颠。并且由于數(shù)據(jù)字典是使用 lower_case_table_names=0 初始化的褐望,因此在服務器設置為 lower_case_table_names=2 時它將無法初始化勒庄。
解決方案(查詢到的)
- 降級到 Docker 桌面 2.3
- 備份整個數(shù)據(jù)庫
- 升級到 Docker 2.4
- 刪除存儲數(shù)據(jù)庫的卷串前。
- 重新初始化數(shù)據(jù)庫。
- 從備份中恢復數(shù)據(jù)庫实蔽。
更新:請參閱下面的答案以獲得更好的解決方案荡碾。顯然沒有必要降級。您可以改為禁用“用于文件共享的 gRPC Fuse”局装、備份數(shù)據(jù)庫坛吁、重新啟用 gRPC fuse、刪除數(shù)據(jù)庫數(shù)據(jù)文件夾并從備份中恢復數(shù)據(jù)庫铐尚。
原文參考:
Mysql not starting in a docker container on MacOS after docker update - Stack Overflow
解決方案(我的 & 親測可行)
借鑒上文原因
和第 4 點
拨脉,我采取了以下步驟后恢復:
- 關閉 docker 容器;
- 刪除本地數(shù)據(jù)庫 volume(卷)宣增;
此步驟依賴于前期 docker-compose 配置中有對 mysql 設置宿主機與容器映射的 volume玫膀,關閉 docker 后,可以在宿主機刪除 mysql 的 bd 目錄就好爹脾。
- 重啟容器
docker-compose up
此步驟會重新初始化數(shù)據(jù)庫的 volumn
至此我的問題得以解決帖旨。