如何从Docker容器恢复MySQL数据

2022-02-24 00:00:00 docker mariadb mysql docker-toolbox

我在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 

相关文章