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> 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
备份好以后,先删除数据再恢复
然后恢复数据,显示正常
写到这里就差不多了
写这篇文章的时候我也有参考其他文档,如有侵权请告知删除
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!