如何从Docker容器恢复MySQL数据
我在docker windows工具包上运行MariaDB实例。我使用工具包对MariaDB容器进行了环境变量更改。现在它重新创建了一个实例,丢失了我的所有数据库。是否有办法从中恢复?
已检查是否存在悬挂卷,且数量较少
坞站卷ls-f Dangling=true
解决方案
已使用悬挂卷恢复数据。 方法如下。
首先获取悬挂卷的列表。
$ docker volume ls -f dangling=true
DRIVER VOLUME NAME
local 6f79b6329d98379495a284287e32a7a57605483dd7bf7fa19924fb2a98fb1d19
local 47bb077ef6f6df9f56bd30c35eeb45f35e62213d2c50db6f078bfdeeee6698ec
然后将其挂载到Ubuntu容器上(这样您就可以进入目录内部查看其中的内容,因为在Windows上使用Docker工具箱时没有其他方法可以做到这一点)
$ docker run --name tempContainer1-UBUNTU -v 6f79b6329d98379495a284287e32a7a57605483dd7bf7fa19924fb2a98fb1d19:/var/lib/backup -t -i ubuntu /bin/bash
然后您将处于新创建的contianer的bash中。转到新挂载的目录并检查内容
$cd /var/lib/backup
$ls
$aria_log.00000001 aria_log_control ib_buffer_pool ib_logfile0 ib_logfile1 ibdata1 ibtmp1 multi-master.info mysql performance_schema
-- once you are sure directory data is what you require, make a zip file of the folder
$apt-get update
$apt-get install zip
$cd ..
$zip -r backup.zip backup
在另一个终端上,从主机将容器backup.zip的内容复制到主机
$docker cp tempContainer1-UBUNTU:/var/lib/backup.zip .
然后创建如下所示的docker合成文件,并将备份文件夹挂载为数据目录。在Linux主机上运行此程序,因为对于Windows上的MySQL,此装载将不会按预期工作。
version: "3.2"
services:
mysql:
image: mariadb:10.4.12
restart: always
ports:
- "3306:3306"
command: mysqld --innodb-flush-method=littlesync --innodb-use-native-aio=ON --log_bin=ON
volumes:
- ./backup_data_folder:/var/lib/mysql
environment:
MYSQL_ROOT_PASSWORD: somepassword
TZ: Asia/Singapore
networks:
- frontend
container_name: maria
networks:
frontend:
开始
$docker-compose up
打开后,从另一个终端进入新创建的容器
$docker exec -t -i maria /bin/bash
-- Take dump of all the DBS
$mysqldump -u root -p --all-databases > alldb.sql
将转储内容从主机从另一个终端复制到主机
$docker cp maria:/alldb.sql .
现在此SQL文件是完全转储,请照常在MySQL DB或Contianer上还原它。
mysql -u root -p < alldb.sql
相关文章