我正在使用官方 MariaDBmariadb:10.4.6-bionic
镜像,但遇到了一个问题:我的表自身损坏了。这个月至少发生过四次:
- 在两台不同的开发机器上使用 docker-compose
- 在 docker swarm 的临时机器上
每次的症状都是信息模式中存在一个表,但根本无法读取或更改。任何操作都会导致“引擎中不存在表”错误。
容器日志在启动时包含此错误:
[ERROR] InnoDB: Table sfdb.specialist contains unrecognizable instant ALTER metadata
我已经检查了服务器系统变量
SHOW VARIABLES;
并且alter_algorithm
具有值DEFAULT
,这意味着(如果我理解正确该文档的话)它不应该使用算法INSTANT
,而应该只使用INPLACE
和COPY
。
https://mariadb.com/kb/en/library/server-system-variables/#alter_algorithm
尝试深入研究 MariaDB 代码库让我进行了以下检查: https://github.com/MariaDB/server/blob/cccfa9dcfe2c161779824c01a84edfa64fc4378a/storage/innobase/btr/btr0cur.cc#L465
但是我对 MariaDB 的内部工作原理了解不够,无法理解到底发生了什么。
我做错了什么?我是否应该设置一些标志或配置以在docker中拥有稳定的数据库?
答案1
有人建议我,在 mariadb 的 jira 上强制设置alter_algorithm
为COPY
。
到目前为止,该问题还没有再次出现。