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

发布时间:2023年12月21日

备份与恢复工具介绍


(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> 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

实战操作:

查看已有数据

将数据备份出来

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

把原表删除

恢复数据,指定的库名表名都可以不存在,因为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 

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

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 

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

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

查看恢复的数据

可以看到数据也恢复了

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

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

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

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

成功将数据从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查看导入的数据,可以看到是没有问题的

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 基本使用

全库备份

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

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

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

只备份某些库

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

压缩备份
?

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

恢复数据库

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

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

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

然后恢复数据,显示正常

写到这里就差不多了

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

文章来源:https://blog.csdn.net/m0_58833554/article/details/132763205
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。