将大型数据库导入 docker 时出现写入错误

Write error when importing large database to docker

我正在将大型应用程序导入 Docker。应用程序的一部分是数据库。我已将数据库转储到 .sql 文件中,现在我正尝试通过从主机挂载目录并发布将其导入 docker 容器 运行 官方 mysql 图像命令

mysql -u myUsername -p myDB < /mountdir/databasedump.sql

数据库转储非常大,超过 10GB。一个小时一切正常,但随后出现错误

loop: Write error at byte offset

我感觉容器的大小用完了。

有没有更聪明的方法来完成数据库的docker化?如果没有,如何将庞大的数据库导入到容器中?

Don't use a devicemapper loop file for anything serious! Docker 对此有警告。

对于您可能想要的大小的数据库,请尝试 mounting a host directory as a volume or creating a local volume 以避免 docker 的文件系统开销。这两者本质上是同一件事。

如果您使用的是 RHEL,则可以直接使用足够大小的 LVM 精简池。有一个更改存储驱动程序的过程

问题是任何容器都无法存储整个导入的数据库,即 26Gb,错误是由于容器 运行 磁盘不足 space。

我通过使用 -v 开关从主机挂载一个目录作为外部卷并编辑 MySQL 配置以将其数据库存储在那里解决了这个问题。

这个解决方案当然 'un-virtualizes' 数据库,它可能存在安全风险。数据库服务器虽然虚拟化运行良好。在我的情况下,稍微削弱的安全性不是问题。