我正在初始化一个新的MariaDB数据库。在我的主目录中运行带有卷的docker允许MariaDB很好地启动:
docker run -it --rm --name mymaria \
-e MYSQL_RANDOM_ROOT_PASSWORD=yes \
-e MYSQL_PASSWORD=p@$w0rd \
-e MYSQL_DATABASE=myapp \
-e MYSQL_USER=myapp \
-v /home/myuser/mysql:/var/lib/mysql \
mariadb:10.2但是,通过挂载目录运行带有卷的mariadb容器,如下所示:
docker run -it --rm --name mymaria \
-e MYSQL_RANDOM_ROOT_PASSWORD=yes \
-e MYSQL_PASSWORD=p@$w0rd \
-e MYSQL_DATABASE=myapp \
-e MYSQL_USER=myapp \
-v /mnt/storage/mysql:/var/lib/mysql \
mariadb:10.2此配置从docker logs输出中返回:
Initializing database
2019-09-23 5:12:13 139724696503616 [ERROR] Can't init tc log
2019-09-23 5:12:13 139724696503616 [ERROR] Aborting
Installation of system tables failed!
...Simply删除 tc.log有些人建议做而不是工作。重新启动mariadb将tc.log重写回卷/var/lib/mysql。
也许这是一个权限问题?我觉得我已经尝试了chown的每一个组合和每个目录。
我只在10.2标记中遇到这个问题,而不是latest。然而,对于我正在从事的业务流程,它建议使用mariadb:10.2。
发布于 2019-09-25 04:56:47
在我的情况下,我使用mergerfs将各种磁盘组合到一个文件系统中。direct_io的一个特性是抑制mmap,并且很可能是导致致命错误的原因。正如mmap所指出的,与使用mergerfs文档的其他软件也有类似的冲突。
Mmap是MariaDB中使用的一种,并不是所有文件系统都支持它。我相信在以后的版本中不再使用mmap,所以在我自己的测试中,我只在mariadb:10.2中遇到了这个问题。
这个背景可能有助于其他人使用mergerfs或在MariaDB中使用与mmap发生冲突的类似问题。
mmap工作在我的场景中,这需要禁用现在不再推荐的特性direct_io,它绕过页面缓存。根据mergerfs文档,这是推荐的。
这可以用配置文件或容器进程的命令进行测试。我通过添加-原木桶命令对此进行了测试:
docker run -it --rm --name mymaria \
-e MYSQL_RANDOM_ROOT_PASSWORD=yes \
-e MYSQL_PASSWORD=p@$w0rd \
-e MYSQL_DATABASE=myapp \
-e MYSQL_USER=myapp \
-v /mnt/storage/mysql:/var/lib/mysql \
mariadb:10.2 --log-bin --log-basename=some_hostname虽然并不理想,但这是一种选择。要么在主机上使用卷,要么使用另一个磁盘。我对MariaDB卷的特别关注是因为两个不同的软件之间发生了冲突。
https://serverfault.com/questions/985485
复制相似问题