错误截图
原因查询
通过搜索问题定位原因大致如下(原文是英文,机器翻译如下):
lower_case_table_names 设置告诉 mysql 如何存储和比较表名。如果存储数据库的文件系统本身不区分大小写,它将强制您使用 lower_case_table_names=2。
MacOS 文件系统不区分大小写。直到 Docker Desktop 2.4,mysql 容器显然不知道底层文件系统不区分大小写并设置 lower_case_table_names=0。然而,自从升级到 Docker 2.4 后,Docker 在如何挂载卷方面显然更聪明了。所以容器实现了它在不区分大小写的文件系统上运行并强制lower_case_table_names=2。问题是初始化数据库后不能更改 lower_case_table_names 的值。并且由于数据字典是使用 lower_case_table_names=0 初始化的,因此在服务器设置为 lower_case_table_names=2 时它将无法初始化。
解决方案(查询到的)
- 降级到 Docker 桌面 2.3
- 备份整个数据库
- 升级到 Docker 2.4
- 删除存储数据库的卷。
- 重新初始化数据库。
- 从备份中恢复数据库。
更新:请参阅下面的答案以获得更好的解决方案。显然没有必要降级。您可以改为禁用“用于文件共享的 gRPC Fuse”、备份数据库、重新启用 gRPC fuse、删除数据库数据文件夹并从备份中恢复数据库。
原文参考:
Mysql not starting in a docker container on MacOS after docker update - Stack Overflow
解决方案(我的 & 亲测可行)
借鉴上文原因
和第 4 点
,我采取了以下步骤后恢复:
- 关闭 docker 容器;
- 删除本地数据库 volume(卷);
此步骤依赖于前期 docker-compose 配置中有对 mysql 设置宿主机与容器映射的 volume,关闭 docker 后,可以在宿主机删除 mysql 的 bd 目录就好。
- 重启容器
docker-compose up
此步骤会重新初始化数据库的 volumn
至此我的问题得以解决。