Mariadb官方Docker镜像上的InnoDB错误

14

我遇到了一个非常奇怪的错误。我已经将其归纳为一个非常简单的情况,但我不知道是我发现了一个bug还是我漏掉了一些要点。

问题是我需要一个mariadb容器,并且我可以使用以下命令完美地运行它:

docker run -e MYSQL_ROOT_PASSWORD=my-secret-pw mariadb

但是,以下的docker-compose.yml文件会失败:

wordpress_db:
  image: mariadb
  environment:
    - MYSQL_ROOT_PASSWORD=foo

它输出,包括其他内容:

wordpress_db_1 | 2016-01-11 14:33:25 140183257745344 [Note] InnoDB: The  InnoDB memory heap is disabled

我可以清楚地识别出的第一条错误信息是:

wordpress_db_1 | InnoDB: No valid checkpoint found.

在帖子末尾可以看到完整的输出。

如果我将Mariadb替换为MySQL,则不会发生这种情况。

有人能帮我吗?

谢谢!

输出:

Starting miqueladell_wordpress_db_1
Attaching to miqueladell_wordpress_db_1
wordpress_db_1 | 2016-01-11 14:33:25 140183257745344 [Note] mysqld (mysqld 10.1.10-MariaDB-1~jessie) starting as process 1 ...
wordpress_db_1 | 2016-01-11 14:33:25 140183257745344 [Note] InnoDB: Using mutexes to ref count buffer pool pages
wordpress_db_1 | 2016-01-11 14:33:25 140183257745344 [Note] InnoDB: The InnoDB memory heap is disabled
wordpress_db_1 | 2016-01-11 14:33:25 140183257745344 [Note] InnoDB: Mutexes and rw_locks use GCC atomic builtins
wordpress_db_1 | 2016-01-11 14:33:25 140183257745344 [Note] InnoDB: Memory barrier is not used
wordpress_db_1 | 2016-01-11 14:33:25 140183257745344 [Note] InnoDB: Compressed tables use zlib 1.2.8
wordpress_db_1 | 2016-01-11 14:33:25 140183257745344 [Note] InnoDB: Using Linux native AIO
wordpress_db_1 | 2016-01-11 14:33:25 140183257745344 [Note] InnoDB: Using SSE crc32 instructions
wordpress_db_1 | 2016-01-11 14:33:25 140183257745344 [Note] InnoDB: Initializing buffer pool, size = 256.0M
wordpress_db_1 | 2016-01-11 14:33:25 140183257745344 [Note] InnoDB: Completed initialization of buffer pool
wordpress_db_1 | 2016-01-11 14:33:25 140183257745344 [Note] InnoDB: Highest supported file format is Barracuda.
wordpress_db_1 | InnoDB: No valid checkpoint found.
wordpress_db_1 | InnoDB: If this error appears when you are creating an InnoDB database,
wordpress_db_1 | InnoDB: the problem may be that during an earlier attempt you managed
wordpress_db_1 | InnoDB: to create the InnoDB data files, but log file creation failed.
wordpress_db_1 | InnoDB: If that is the case, please refer to
wordpress_db_1 | InnoDB: http://dev.mysql.com/doc/refman/5.6/en/error-creating-innodb.html
wordpress_db_1 | 2016-01-11 14:33:25 140183257745344 [ERROR] Plugin 'InnoDB' init function returned error.
wordpress_db_1 | 2016-01-11 14:33:25 140183257745344 [ERROR] Plugin 'InnoDB' registration as a STORAGE ENGINE failed.
wordpress_db_1 | 2016-01-11 14:33:25 140183257745344 [Note] Plugin 'FEEDBACK' is disabled.
wordpress_db_1 | 2016-01-11 14:33:25 140183257745344 [ERROR] Unknown/unsupported storage engine: InnoDB
wordpress_db_1 | 2016-01-11 14:33:25 140183257745344 [ERROR] Aborting
wordpress_db_1 |
miqueladell_wordpress_db_1 exited with code 1

...但是日志文件创建失败。无论发生了什么,它都没有正确地创建innodb数据库。 - Marc B
是的,我能理解...但是Docker容器不应该在“部署者”部分需要交互,所以我应该可以通过Docker命令来解决这个问题。我猜... - Miquel Adell
在重新启动容器之前,请尝试运行 docker-compose stopdocker-compose rm 命令,以确保相关的卷被删除,从而让您从头开始。 - Thomasleveil
停止您的Mariadb服务器...然后再次启动服务器,将--skip-innodb-use-sys-malloc添加到启动命令中。 - Hackerman
嘿,感谢所有的建议。我解决了错误,但不确定是如何解决的。我的配置存在一些不同的问题,而我通过副作用解决了这个问题。很抱歉我无法给出这个问题的“结束” :-P - Miquel Adell
@MiquelAdell,如果您使用自定义.cnf文件,能否发布一下?我遇到了类似的问题,想知道是什么解决了您的问题。一个好主意是将其发布为答案,以便关闭问题。非常感谢。 - tjheslin1
3个回答

10

我曾在Docker Hub上使用Maria_DB官方镜像时遇到同样的问题。

在使用Maria_DB 10.5版本时可以工作,但当我降级到10.3时,出现了相同的错误。

这个错误是由于前一个容器的卷导致的,你需要删除它。

首先停止容器(你可以通过docker ps命令获取Docker容器ID):

docker stop xxxxx

然后将其移除:
docker rm xxxxx

最后,删除关联的卷:

docker volume ls
docker volume rm my_volume_name

您的容器现在应该能够顺利重启。

1
它是docker volume rm my_volume_name - FrodmanG
当所有客户数据丢失时,你会如何回答? - Phyo Arkar Lwin
@PhyoArkarLwin 我强烈建议不要在容器中使用包含客户或生产数据的数据库。 - Paul Legac
容器之外的卷 - Phyo Arkar Lwin
你说得没错,但如果你不正确使用 Docker 镜像(如崩溃、意外更新等),它就不稳定。 - Paul Legac

4

1
这对我有用,谢谢。为什么我一开始就没想到呢? - David Valenza

0

我不确定这应该是一条评论还是一条回答,但我不想击中字符限制,所以...

主要是为了回答@tjheslin1的问题,我怀疑这对其他人没有任何用处。

我已经好几个月没有使用docker了,但是,我曾经能够使用以下代码使其正常工作:

https://github.com/MiquelAdell/mariadb-utf8mb4/blob/master/Dockerfile

我不确定当时的情况,我的环境有很多变动的部分。

现在我没有时间重新创建那个环境来提供更多帮助,但我也不想让那些遇到问题的人等待太久。

我想我应该将这个问题标记为未解答,因为我短期内无法跟进。

抱歉 :-\


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接