欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

备份远程主机上mysql,mongodb上数据,在docker容器中导入

程序员文章站 2024-03-11 20:09:01
...

将远程机器中的mysql,mongodb数据备份到Ubuntu20.04中

已知:远程机器ip,mysql账号,密码。
说明:以下命令均在Ubuntu20.04中执行

  1. 备份mysql数据
    在ubuntu中执行以下命令:
#使用mysqldump命令备份,需要安装客户端相关组件。
sudo apt install mysql-client-core-8.0 #可以直接执行下一条命令,根据命令行提示进行安装。
#备份mysql数据库到本地主机(ubuntu 20.04)
mysqldump --column-statistics=0 -h 10.22.8.408 -u root -p12345 -A>sys.sql
#-h参数指明远程机器的ip,-u指明登录的用户名,-p后的12345是登录密码 -A说明备份所有的数据库。sys.sql是linux上用来存储备份数据的文件(自己手动创建)
#由于数据库的文件可能很多,因此此命令的执行可能要较长时间。
#若sys.sql文件不在当前目录,则该命令会在当前目录创建一个同名文件,将数据存放进入该文件。

  1. 备份mongodb数据
#备份mongodb数据库到ubunt 20.04
1.首先创建一个存储mongodb中数据的目录mongo,其绝对路径如下:
/home/lily/backup/mongo

2.使用mongodump命令备份数据,若无法找到mongodump命令,则要安装相关组件:
sudo apt install mongo-tools

3.在ubunt 20.04执行以下脚本
必须先设置好备份数据存放的目录
#!/bin/bash
#for mongo backup
mongodump  --forceTableScan -h 10.42.5.208 -d config -o /home/lily/backup/mongo #-h指明远程主机。-d指明要备份的数据库名字。
mongodump  --forceTableScan -h 10.42.5.208 -d local -o /home/lily/backup/mongo #-o指明备份的数据存放的目录(本地主机上)
mongodump  --forceTableScan -h 10.42.5.208  -o /home/lily/backup/mongo #缺失-d是备份所有的数据库。但不含config和local这两个


改进:执行脚本时,通过接收参数的方式,在当前目录前创建一个目录。存入数据。
#!/bin/bash
#for mongo backup
echo "input backup directory name:"
read direName
touch $direName
mongodump  --forceTableScan -h 10.32.5.208 -d config -o $(pwd)/${direName}
mongodump  --forceTableScan -h 10.32.5.208 -d local -o $(pwd)/${direName}
mongodump  --forceTableScan -h 10.32.5.208  -o $(pwd)/${direName}

把Ubuntu20.04中的备份数据导入docker 容器中

  1. 在mysql 5.7 容器(运行在ubunt 20.04上)中导入数据
cat sys.sql|docker exec -i 320ecf95b2b3 /usr/bin/mysql -u root --password=123456 mysql #sys.sql是备份到ubunt 20.04的文件;320ecf95b2b3是运行着的mysql容器;123456是创建mysql容器是设定的密码;
#上述命令的很多参数都可以使用短格式
cat sys.sql|docker exec -i 320ecf95b2b3 /usr/bin/mysql -u root -p123456 mysql #320ecf95b2b3是容器的ID,可以换成容器的名字。
  1. 在mongodb4.2容器中导入数据
    注意:mongodb中备份的数据包含了几个文件夹。因此本文采取先压缩,导入mongodb容器中,再进入容器解压。最后恢复数据。
#前往备份文件的文件夹aa,aa中有几个文件夹,存放备份数据。
tar -zcvf aa.tar.gz  aa #将当前目录的aa文件夹压缩为aa.tar.gz

docker cp ./aa.tar.gz mongo2:/ #把当前目录前的aa.tar.gz压缩文件复制到容器mongo2的根目录下。mongo2是容器名字,可以用docker container ls查看到。

docker exec -it mongo2 /bin/bash #进入mongo2容器。
 
tar -zxvf aa.tar.gz #在容器中解压此文件到当前目录

数据恢复:以下两条命令选择性执行
mongorestore aa #数据恢复
docker exec -it mongo4 mongorestore /home/lily/backup/mongo
#mongo4是运行的mongodb容器,mongorestore是数据导入命令。后面的目录是远程主机上的mongdb数据备份到Ubuntu上的目录。

如何检验备份数据是否正确

分别数据库的客户端连接上远程机器上的数据库,和导入了数据的docker 容器,在客户端中查看数据是否相同。

问题和解决

1.第二步中命令的参数:--forceTableScan不可少。否则会出现以下错误:
备份远程主机上mysql,mongodb上数据,在docker容器中导入
2.执行mysqldump --column-statistics=0 -h 10.22.8.408 -u root -p12345 -A>sys.sql出现用户访问拒绝:
备份远程主机上mysql,mongodb上数据,在docker容器中导入
解决:通常为远程主机上的mysql数据库密码拼写错误。检查密码是否正确。

参考文章:
docker中MongoDB的备份与恢复
Mongodump: Unrecognized field ‘snapshot’
MySQL5.7参考文档
windows 下用mysqldump命令备份和还原数据库详解

上一篇: CentOS下载Python3.8

下一篇: