Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/docker/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql 无法备份docker容器的永久存储容器_Mysql_Docker_Mariadb - Fatal编程技术网

Mysql 无法备份docker容器的永久存储容器

Mysql 无法备份docker容器的永久存储容器,mysql,docker,mariadb,Mysql,Docker,Mariadb,我使用的是为这个问题提供的答案的变体:。特别是,我在备份/恢复过程中遇到了问题。故事是这样的 我创建了一个简单的图像用作容器。Dockerfile如下所示: FROM busybox VOLUME /var/lib/mysql CMD /bin/sh 我使用以下命令从此图像创建了一个容器: docker build -t myimages/datastore . docker run --name mysql_data myimages/datastore true docker ru

我使用的是为这个问题提供的答案的变体:。特别是,我在备份/恢复过程中遇到了问题。故事是这样的

我创建了一个简单的图像用作容器。Dockerfile如下所示:

FROM busybox

VOLUME /var/lib/mysql

CMD /bin/sh
我使用以下命令从此图像创建了一个容器:

docker build -t myimages/datastore .

docker run --name mysql_data myimages/datastore true
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/
然后我构建了图像并创建了一个容器:

docker run -d -p 3306:3306 --volumes-from mysql_data tutum/mariadb
docker run -d -p 3308:3306 --volumes-from mysql_data2 tutum/mariadb
一切正常。我可以使用
mysql
客户端连接到数据库并执行数据库操作。具体来说,我做到了:
createdatabasetestdb
创建表testtbl选择1作为'id','hello'作为'word'

接下来,我尝试备份我的容器。根据对上述问题的回答(稍作修改),我做了以下工作:

docker run --rm --volumes-from mysql_data -v $(pwd):/backup busybox \
    tar cvf /backup/backup.tar /var/lib/mysql
瞧!我在主机上的备份文件夹中有一个
backup.tar
文件

因此,作为最后一步,我尝试使用以下一系列命令恢复备份:

docker build -t myimages/datastore .

docker run --name mysql_data myimages/datastore true
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/
我创建了一个新的MariaDB容器,它从新的数据容器导入卷:

docker run -d -p 3306:3306 --volumes-from mysql_data tutum/mariadb
docker run -d -p 3308:3306 --volumes-from mysql_data2 tutum/mariadb
新的数据库容器启动得很好,我用
mysql
客户端连接到它,并检查了数据库。这里是问题产生的地方:我没有一个
testdb
数据库(如上所述),而是一个
var
数据库;新数据库中没有表,而是有一个
testtbl


有人能看出我做错了什么吗?谢谢

由于MySQL存储数据的方式,以这种方式(通过从容器中复制数据库文件)似乎根本不起作用。具体地说,InnoDB文件不能只是被复制-声明

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

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