mongodb的备份与恢复,详细实战版

备份与恢复工具介绍


(1)mongoexport/mongoimport
(2)mongodump/mongorestore


备份工具区别在哪里


应用场景总结:
1、异构平台迁移 mysql <---> mongodb
2、同平台,跨大版本:mongodb 2 ----> mongodb 3
mongoexport/mongoimport:json csv

日常备份恢复时使用:
mongodump/mongorestore


 导出工具 mongoexport


mongoexport 具体用法如下所示:
$ mongoexport --help
参数说明:
-h:指明数据库宿主机的 IP
-u:指明数据库的用户名
-p:指明数据库的密码
-d:指明数据库的名称
-c:指明 collection 的名称
-f:指明要导出那些列
-o:指明到要导出的文件名
-q:指明导出数据的过滤条件
--authenticationDatabase admin

导入工具 mongoimport


$ mongoimport --help
参数说明:
-h:指明数据库宿主机的 IP
-u:指明数据库的用户名
-p:指明数据库的密码
-d:指明数据库的名称
-c:指明 collection 的名称
-f:指明要导入那些列
-j, --numInsertionWorkers= number of insert operations to run concurrently
(defaults to 1)
//并行
 

1.单表备份至 json 格式

(1).导出数据
mongoexport --port 27017 -d db -c test -o /backup/log.json
注:备份文件的名称可以自定义,默认导出了 JSON 格式的数据。

数据恢复:
(2).恢复 json 格式表数据到 aaa
mongoimport --port 27017 -d test -c aaa /backup/data.json

实战操作:

查看已有数据

mongodb的备份与恢复,详细实战版_第1张图片

将数据备份出来

mongoexport --port 27017 -d test -c inventory -o /backup/data1.json

mongodb的备份与恢复,详细实战版_第2张图片

把原表删除

mongodb的备份与恢复,详细实战版_第3张图片

恢复数据,指定的库名表名都可以不存在,因为mongodb会自动帮我们创建不存在的库或表

[root@localhost ~]# mongoimport --port 27017 -d mongo666 -c bbb /backup/data1.json 
[root@localhost ~]# mongoimport --port 27017 -d test -c a /backup/data1.json 

mongodb的备份与恢复,详细实战版_第4张图片

回到数据库查看恢复的数据,发现是正常的

mongodb的备份与恢复,详细实战版_第5张图片

2. 单表备份至 csv 格式

(1)导出数据
如果我们需要导出 CSV 格式的数据,则需要使用----type=csv 参数:
mongoexport --port 27017 -d test -c test --type=csv -f item,qty,size,status -o /backup/log.csv

(2)数据恢复 :

注意:
(1)csv 格式的文件头行,有列名称

mongoimport -uroot -proot123 --port 27017 --authenticationDatabase admin -d testdb -c log2 --type=csv --headerline --file /mongodb/log.csv

(2)csv 格式的文件头行,没有列名称

mongoimport -uroot -proot123 --port 27017 --authenticationDatabase admin -d testdb -c log3 --type=csv -f id,name,age,date --file /mongodb/log.csv


--headerline:指明第一行是列名,不需要导入。

直接导出上面恢复的数据

mongoexport --port 27017 -d test -c a --type=csv -f item,qty,size,status -o /backup/data2.json 

mongodb的备份与恢复,详细实战版_第6张图片

导入数据,刚才导出的数据是有列名的,所以不用指定列名,如果没有就得指定

mongoimport --port 27017 --authenticationDatabase admin -d dbcsv -c datacsv --type=csv --headerline --file /backup/data2.json 

mongodb的备份与恢复,详细实战版_第7张图片

查看恢复的数据

mongodb的备份与恢复,详细实战版_第8张图片

可以看到数据也恢复了

不同格式的数据导入可能会不一样,可以调整好后再选择合适的方法导入

3.异构平台迁移案例(mysql-->mongodb)
 

先查看我们mysql中的数据和表结构,因为等下要用到列名

mongodb的备份与恢复,详细实战版_第9张图片

然后查看mysql可以导出数据的目录,然后将数据导出到那个目录里

mongodb的备份与恢复,详细实战版_第10张图片

成功将数据从mysql导出来以后,就可以导入到mongodb里了,这时候要记得我们的数据是没有列名的了,用第二种方法

mongoimport --port 27017 --authenticationDatabase admin -d mysqldb -c mysqldata --type=csv -f nid,stuname,sex --file /var/lib/mysql-files/data3.csv

mongodb的备份与恢复,详细实战版_第11张图片

进到mongodb查看导入的数据,可以看到是没有问题的

mongodb的备份与恢复,详细实战版_第12张图片

mongodump 和 mongorestore


(1)介绍:
mongodump 能够在 Mongodb 运行时进行备份,它的工作原理是对运行的 Mongodb 做查询,然后将所有查到的文档写入磁盘。
但是存在的问题是使用 mongodump 产生的备份不一定是数据库的实时快照,如果我们在备份时对数据库进行了写入操作,则备份出来的文件可能不完全和 Mongodb 实时数据相等。另外在备份时可能会对其它客户端性能产生不利的影响。

(2)使用方法:
$ mongodump --help

参数说明:
-h:指明数据库宿主机的 IP
-u:指明数据库的用户名
-p:指明数据库的密码
-d:指明数据库的名称

-c:指明 collection 的名称
-o:指明到要导出的文件名
-q:指明导出数据的过滤条件
-j, --numParallelCollections= number of collections to dump in parallel (4 by default)
--oplog 备份的同时备份 oplog
 

(3).mongodump 和 mongorestore 基本使用

全库备份

先查看我们本来有的数据库

mongodb的备份与恢复,详细实战版_第13张图片

然后把所有数据库备份出来,因为"local"数据库是MongoDB的系统数据库,它包含了一些重要的集合和数据,但通常不包含用户自己创建的数据,因此mongodump默认情况下不会备份它。这是出于安全性和性能方面的考虑,以防止意外地备份和恢复系统级别的数据。

mkdir /backup
mongodump --port 27017 -o /onedb/

mongodb的备份与恢复,详细实战版_第14张图片

只备份某些库

mkdir /onedb
mongodump --port 27017 -d test -o /onedb/

mongodb的备份与恢复,详细实战版_第15张图片

压缩备份
 

mongodump --port 28017 -o /backup --gzip
mongodump --port 28017 -d test -o /backup --gzip

恢复数据库

再恢复数据的时候数据不可以存在,否则会报错无法插入,也可以用--drop 参数强制恢复

mongorestore --port 27017 -d test /backup/test/ --drop

备份好以后,先删除数据再恢复

mongodb的备份与恢复,详细实战版_第16张图片

然后恢复数据,显示正常

mongodb的备份与恢复,详细实战版_第17张图片

写到这里就差不多了

写这篇文章的时候我也有参考其他文档,如有侵权请告知删除

你可能感兴趣的:(数据库,数据库,mongodb)