MongoDB数据备份还原,及docker中MongoDB备份还原

一: MongoDB数据备份

在Mongodb中我们使用mongodump命令来备份MongoDB数据。该命令可以导出所有数据到指定目录中。

mongodump命令可以通过参数指定导出的数据量级转存的服务器。

1)语法:

mongodump命令脚本语法如下:

mongodump -h dbhost -d dbname -o dbdirectory

参数说明:

-h:MongoDB 所在服务器地址,例如:127.0.0.1,当然也可以指定端口号:127.0.0.1:27017
-d:需要备份的数据库实例,例如:test
-o:备份的数据存放位置,例如:c:\data\dump,当然该目录需要提前建立,在备份完成后,系统自动在dump目录下建立一个test目录,这个目录里面存放该数据库实例的备份数据。

其他参数参考:

--db:-d 指定导出的数据库

--collection:指定导出的集合

--excludeCollection:指定不导出的集合

--host :-h 远程ip

--username:-u 开启身份验证后,用户的登录名

--password:-p 用户的密码

--out(指定输出目录):-o 如果不使用这个参数,mongodump将输出文件保存在当前工作目录中名为dump的目录中

  --archive:导出归档文件,最后只会生成一个文件,注意: archive 与 out 不能一起用
  
--gzip:压缩归档的数据库文件,文件的后缀名为.gz

--authenticationDatabase <dbname> 指定创建User的数据库;在特定的数据库中创建User,该DB就是User的authentication database。
在连接mongo时,使用参数 --authenticationDatabase,会认证 -u 和 -p 参数指定的账户和密码。如果没有指定验证数据库,mongo使用连接字符串中指定的DB作为验证数据块。

2)示例:

mongodump -h 127.0.0.1 --port 27017 -u=root -p=123456 -d test -o /dump
#备份本地数据库,账户root,密码123456,test数据库,指定到/dump目录

如果没有设置账户密码,或者端口都是默认的27017,则可以省略参数。如:

mongodump --archive=test.gz --gzip --db test
#将在终端所在的目录下生成一个指定名称(test.gz)的数据库文件,并压缩

二: MongoDB数据还原

mongodb使用 mongorestore 命令来恢复备份的数据。

1)语法:

mongorestore命令脚本语法如下:

mongorestore -h <hostname><:port> -d dbname <path>

参数:

--host <:port>, -h <:port>:
MongoDB所在服务器地址,默认为: localhost:27017

--db , -d :
需要恢复的数据库实例,例如:test,当然这个名称也可以和备份时候的不一样,比如test2

--drop:
恢复的时候,先删除当前数据,然后恢复备份的数据。就是说,恢复后,备份后添加修改的数据都会被删除,慎用哦!

  <path>:
mongorestore 最后的一个参数,设置备份数据所在位置,例如:/home/mongod/backup/test/
你不能同时指定 <path> 和 --dir 选项,--dir也可以设置备份目录。

  --dir:
指定备份的目录,你不能同时指定 <path> 和 --dir 选项。

--nsInclude :指定还原的集合,支持通配符(*)
--nsExclude:指定不还原的集合,支持通配符(*)
--nsFrom:修改集合名称,原来集合的名称,支持使用变量
--nsTo:修改集合名称,修改之后集合的名称,支持使用变量

2)示例:

mongorestore -h 10.0.0.152:27017 -uroot -proot -d test --drop /home/mongod/backup/test/
#恢复到10.0.0.152:27017,test数据库,恢复数据库备份位置/home/mongod/backup/test/

三: 基于docker的MongoDB数据备份还原

例子,此时有一个mongo容器

[email protected]:~$ sudo docker ps
CONTAINER ID  IMAGE          COMMAND                  CREATED       STATUS       PORTS         NAMES
645ae5ab17b8  mongo:latest "docker-entrypoint.s…" 2 hours ago Up 2 hours  27017/tcp  mongo

方法一:

直接进入docker容器,一步一步还原。

sudo docker exec -it mongo(容器名称) /bin/bash
#进入容器
mongodump --archive=mongo.gz
#直接生成一个名字为mongo.gz的备份文件
exit
#退出容器
sudo docker cp mongo(容器名称):/mongo.gz /backup/
#将容器备份的数据复制到本地/backup/文件夹中

还原一样,步骤复制本地到容器中,进入容器中,还原复制过来的备份文件。

方法二:

一步到位备份:

sudo docker exec mongo(容器名称) sh -c 'mongodump --archive' > /var/backup_test/mongo_`date +%F`.gz
#将 mongo容器中所有数据,备份并按日期命名单个文件,备份至本地/var/backup_test文件夹。

还原:

sudo docker exec -i mongo(容器名称) sh -c 'mongorestore --archive' < /var/backup_test/mongo_2022-03-25.gz

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注