升级 Docker 4.5.0 后 mysql 报错 lower_case_table_names

错误截图

image.png

原因查询

通过搜索问题定位原因大致如下(原文是英文,机器翻译如下):

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 时它将无法初始化。

解决方案(查询到的)

  1. 降级到 Docker 桌面 2.3
  2. 备份整个数据库
  3. 升级到 Docker 2.4
  4. 删除存储数据库的卷
  5. 重新初始化数据库。
  6. 从备份中恢复数据库。
    更新:请参阅下面的答案以获得更好的解决方案。显然没有必要降级。您可以改为禁用“用于文件共享的 gRPC Fuse”、备份数据库、重新启用 gRPC fuse、删除数据库数据文件夹并从备份中恢复数据库。

原文参考:
Mysql not starting in a docker container on MacOS after docker update - Stack Overflow

解决方案(我的 & 亲测可行)

借鉴上文原因第 4 点,我采取了以下步骤后恢复:

  1. 关闭 docker 容器;
  2. 删除本地数据库 volume(卷);

此步骤依赖于前期 docker-compose 配置中有对 mysql 设置宿主机与容器映射的 volume,关闭 docker 后,可以在宿主机删除 mysql 的 bd 目录就好。

  1. 重启容器
docker-compose up

此步骤会重新初始化数据库的 volumn

至此我的问题得以解决。

你可能感兴趣的:(升级 Docker 4.5.0 后 mysql 报错 lower_case_table_names)