Mysql 表在 Docker 更新后丢失:"TableName doesn't exist in engine"

Mysql tables missing after Docker update: "TableName doesn't exist in engine"

最近的 Docker 更新似乎导致(只是一些)MariaDB 中的 InnoDB table 无法访问。我得到:

#1932 - Table 'dbname.SomeTableName' doesn't exist in engine

尝试访问它们时(它们确实出现在 table 列表中)。我过去已经毫无问题地更新了 Docker(和图像)。数据库文件和权限看起来不错。

我可以从备份中重新创建 "missing" tables(~35 中的 4 个),但是当我尝试删除它们时,我得到:

#1347 - 'dbname.SomeTableName' is not VIEW

我正在使用 Docker 图像 mariadb:10.2 (MariaDB-10.2.12+maria~jessie) 作为本地 Docker 的一部分用于持久数据存储的绑定挂载-for-Mac 开发环境。 docker-compose.yml 文件如下所示:

mysql: image: mariadb:10.2 volumes: - ./data/mysql:/var/lib/mysql

我以前从未遇到过这个错误,无法转储或导出无法访问的 tables。有没有办法恢复或修复(或删除)它们?我宁愿不必重新创建整个数据库。

我能够通过为我的本地使用自定义 mysql 配置并添加:

来解决这个问题
[mysqld]
lower_case_table_names=1

您可以在不更改默认配置的情况下执行此操作,方法是将包含上述文本的文件安装到 mysql conf.d 目录中,例如:

volumes:
  - ./mysql_local.cnf:/etc/mysql/conf.d/mysql_local.cnf:ro