我正在将一个大型应用程序导入Docker。部分应用程序是一个数据库。我已将数据库转储到.sql文件中,现在我试图通过从主机挂载目录并发出命令将其导入到运行官方mysql映像的docker容器中
mysql -u myUsername -p myDB < /mountdir/databasedump.sql
数据库转储非常大,超过10GB。一切都顺利一小时,但随后发出错误
loop: Write error at byte offset
我感觉容器的大小已用完。
有没有更聪明的方法来完成数据库的docker化?如果没有,我如何将庞大的数据库导入容器?
答案 0 :(得分:0)
Don't use a devicemapper loop file for anything serious! Docker对此有警告。
对于您可能需要尝试mounting a host directory as a volume或creating a local volume的数据库,以避免泊坞文件的文件系统开销。这两者基本上是相同的东西。
如果您使用的是RHEL,则可以直接使用尺寸合适的LVM精简池。有一个用于更改存储驱动程序的进程in this answer。
答案 1 :(得分:0)
问题是任何容器都无法存储整个导入的数据库,这是26Gb,错误是由于容器磁盘空间不足。
我通过使用-v开关将主机上的目录作为外部卷安装并编辑MySQL配置以在其中存储数据库来解决问题。
这个解决方案当然是非虚拟化&#39;数据库,它可能是一个安全风险。数据库服务器运行良好虚拟化。在我的情况下,稍微削弱的安全性不是问题。