无法备份docker MariaDB容器的持久存储容器

我正在使用提供给这个问题的答案的一个变种: 如何处理docker中的永久存储(例如数据库) 。 特别是,我遇到了备份/恢复程序的问题。 这是故事

我创build了一个简单的图像用作容器。 Dockerfile看起来像这样:

FROM busybox VOLUME /var/lib/mysql CMD /bin/sh 

我使用以下命令从该映像创build了一个容器:

 docker build -t myimages/datastore . docker run --name mysql_data myimages/datastore true 

然后,我build立了tutum / mariadb图像并创build了一个容器:

 docker run -d -p 3306:3306 --volumes-from mysql_data tutum/mariadb 

一切工作正常。 我可以使用mysql客户端连接到数据库并执行数据库操作。 具体来说,我这样做: create database testdb;create table testtbl select 1 as 'id', 'hello' as 'word';

接下来,我试图备份我的容器。 在回答上面的问题之后(做了一些修改),我做了这个:

 docker run --rm --volumes-from mysql_data -v $(pwd):/backup busybox \ tar cvf /backup/backup.tar /var/lib/mysql 

! 我在主机的备份文件夹中有一个backup.tar文件。

所以,作为最后一步,我试图用以下一系列命令恢复备份:

 docker run --name mysql_data2 myimages/datastore true docker run --rm --volumes-from mysql_data2 -v $(pwd):/backup busybox \ tar xvf /backup/backup.tar -C /var/lib/mysql/ 

我创build了一个新的从新数据容器导入卷的MariaDB容器:

 docker run -d -p 3308:3306 --volumes-from mysql_data2 tutum/mariadb 

新的数据库容器启动正常,我用mysql客户端连接到它,并检查数据库。 这里是问题出现的地方:而不是有一个testdb数据库(如上所述),我有一个var数据库; 而不是在新的数据库中有一个testtbl表,没有表。

任何人都可以看到我做错了什么? 谢谢!

由于MySQL存储数据的方式,这样(通过将数据库文件复制到容器外)进行处理似乎不起作用。 具体来说,InnoDB文件不能被复制 – 这个文档说明

如果数据库包含InnoDB表,表格文件复制方法不起作用…因为InnoDB不一定在数据库目录中存储表内容。 另外,即使服务器没有主动更新数据,InnoDB仍然可能修改了caching在内存中的数据,而不是刷新到磁盘。

所以这个问题的简短答案是“不能这样做”。 长的答案是使用mysqldump或类似的工具来做到这一点。