Mysql 无法备份docker容器的永久存储容器
我使用的是为这个问题提供的答案的变体:。特别是,我在备份/恢复过程中遇到了问题。故事是这样的 我创建了一个简单的图像用作容器。Dockerfile如下所示: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
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
或类似的工具来实现这一点