当前位置: 首页 > 知识库问答 >
问题:

如何从泊坞站容器恢复 MySQL 数据

平俊茂
2023-03-14

我正在码头程序窗口工具包上运行 mariadb 实例。我使用风筝在 mariaDB 容器上进行了一个可取的更改。现在,它重新创建了一个实例,丢失了我所有的数据库。有没有办法从中恢复过来?

检查是否存在悬空卷,并且数量很少

docker音量ls -f悬空=真

共有2个答案

吴伟志
2023-03-14

最近,我不得不面对丢失的wordpress容器的相同问题,并且我遵循了Don的指示。但是,由于有很多悬而未决的体积,我必须优化流程。我已经设法在同一终端中更简单地完成它,从而产生了以下步骤:

docker volume ls -f dangling=true

DRIVER              VOLUME NAME
local               43277666c8bc3da0b585d90952c2303226c92c6c6a561007c0c7ee00b6da817e
local               4fde3ea412e54a1b8b42fce6dae5de5135b9fd12933b020b43bd482cd5fd2225
local               52074ccfd62fb83b8b40cff5f8024215b34f79ad09b630e067ec732f811f798c
...

然后,对每个容器执行以下指令,将43277666c8bc3d…替换为找到的每个VOLUME NAME。此指令将删除以前的maria-Recovery容器(如果存在),创建一个新容器并附加到它:

docker container ls -a -q --filter "name=maria-restore" && docker container rm -f maria-restore; docker run --name maria-restore -v 43277666c8bc3da0b585d90952c2303226c92c6c6a561007c0c7ee00b6da817e:/var/lib/mysql -d mariadb:10.4.12 mysqld --innodb-flush-method=littlesync --innodb-use-native-aio=ON --log_bin=ON && docker exec -it maria-restore bash

如果它不是mysql卷,它将失败并立即退出。如果是mysql卷,您将位于mariadb容器中。数据库将已经启动。然后,您可以连接到数据库,查看它是否是正确的,并对其进行备份:

root@8b35c8e2c474:/# mysql -uadmin -p
root@8b35c8e2c474:/# mysqldump -uadmin -p --all-databases > alldb.sql
root@8b35c8e2c474:/# exit

复制备份的数据库:

docker cp mysql-restore:/alldb.sql .

最后,您必须清理 maria 还原容器:

docker container ls -a -q --filter "name=maria-restore" && docker container rm -f maria-restore
白文彬
2023-03-14

使用悬空卷恢复数据。方法如下。

首先获取悬挂卷的列表。

$ docker volume ls -f dangling=true
DRIVER              VOLUME NAME
local               6f79b6329d98379495a284287e32a7a57605483dd7bf7fa19924fb2a98fb1d19
local               47bb077ef6f6df9f56bd30c35eeb45f35e62213d2c50db6f078bfdeeee6698ec

然后将它安装到一个Ubuntu容器上(这样你就可以进入目录并检查那里有什么,因为当你在windows上使用Docker Tool Box时没有其他方法可以做到这一点)

$ 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

在另一个终端上,从主机复制容器备份的内容.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 
 类似资料:
  • 我正在尝试使用Flask和Docker开发一个小型音乐应用程序。我有两个码头服务,都在经营烧瓶。 第一个称为上传器: 第二个渲染了一个Jinja模板,该模板试图播放此API返回的文件: 另外,这些组件工作正常。但当一起使用时,文件不会播放。我已经尝试了我在网上找到的几乎所有东西,但似乎都不起作用。任何帮助将不胜感激。谢谢! 编辑:添加了泊动器撰写文件。两个泊坞窗映像都是在本地构建的。

  • 我尝试通过挂载在docker容器中运行一些Qt应用程序。我在这里看到这可能很难。 所以当我在docker容器中运行kdevelop时,它不工作(我得到一个空窗口)。但是如果我运行qtcreator,就没问题了。 我觉得区别是因为用的Qt版本(kdevelop用Qt4开发,qtcreator用Qt5)。我的所有其他Qt5应用程序都运行良好,但没有一个Qt4应用程序。 问题: 有没有人知道如何启动Qt

  • 我正在开发一个服务,并使用docker compose来旋转服务,如postgres,redis,elasticsearch。我有一个基于RubyOnRails的web应用程序,可以读写所有这些服务。 这是我的docker-compose.yml 我可以ping这个网络中的容器 到目前为止一切顺利。现在,我想在我的主机上运行ruby on rails应用程序,但是能够使用类似< code > Po

  • 我有一个关于使用docker容器的最佳实践的问题。 我需要为我开发的每个应用程序一个数据库。现在我的问题是,我是应该使用一个包含多个数据库的mysql docker实例,还是应该为每个数据库创建一个实例。我认为为每个数据库创建一个实例的缺点是,我不能让一个用户访问所有数据库。我知道这是出于安全原因,但当我尝试从客户端备份时,我需要在每个实例中进行备份。多个实例使用的资源开销不是很大吗(虽然mysq

  • 因此,我使用boto3 s3和python脚本来列出bucket。 s3_client = boto3.client('s3 ') 当我在桌面上运行它时,它可以正常工作,因为我使用aws配置命令设置aws_access_key_id和aws_secret_access_key。 当我在 AWS 上将其作为容器运行时,我是否需要在使用aws_access_key_id的环境变量和aws_secret

  • 我安装了cron和 登录docker镜像 没有正在运行 我想我必须做点什么来启动cron服务器。 我怎么能这样做??