MongoDB 备份和恢复——筑梦之路

安装mongoDB
yum install libcurl openssl
#添加yum源
vim /etc/yum.repos.d/mongodb-org.repo
[mongodb-org]
name=MongoDB 4.4 Repository
baseurl=https://repo.mongodb.org/yum/redhat/$releasever/mongodb-org/4.4/$basearch/
gpgcheck=0
enabled=1
#安装
yum install -y mongodb-org
#操作
systemctl start|enable|stop|status mongod.service

#修改配置文件
vim /etc/mongod.conf
bindIp  0.0.0.0  #允许远程连接

备份恢复方法:

1.图形化工具连接备份恢复(Navicat、DBeaver),导出导入简单,不适合大量数据

2.使用命令行mongodump\mongorestore\mongoexport\mongoimport

这里重点介绍命令行方式


mongodump -h dbhost -d dbname -o dbdirectory

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

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

--host <:port>, -h <:port>:
MongoDB所在服务器地址,默认为: localhost:27017
--db , -d :
需要恢复的数据库实例,例如:test,当然这个名称也可以和备份时候的不一样,比如test2
--drop:
恢复的时候,先删除当前数据,然后恢复备份的数据。就是说,恢复后,备份后添加修改的数据都会被删除,慎用哦!
<path>:
mongorestore 最后的一个参数,设置备份数据所在位置,例如:c:\data\dump\test。
你不能同时指定 <path> 和 --dir 选项,--dir也可以设置备份目录。
--dir:
指定备份的目录
注意:
你不能同时指定 <path> 和 --dir 选项。

如果开启了账户认证,需要传参 
-u 用户
-p 密码
--authenticationDatabase 数据库实例



mongoexport 命令参数说明:
-h,--host :代表远程连接的数据库地址,默认连接本地Mongo数据库;
--port:代表远程连接的数据库的端口,默认连接的远程端口27017;
-u,--username:代表连接远程数据库的账号,如果设置数据库的认证,需要指定用户账号;
-p,--password:代表连接数据库的账号对应的密码;
-d,--db:代表连接的数据库;
-c,--collection:代表连接数据库中的集合;
-f, --fields:代表集合中的字段,可以根据设置选择导出的字段;
--type:代表导出输出的文件类型,包括csv和json文件;
-o, --out:代表导出的文件名;
-q, --query:代表查询条件;
 --skip:跳过指定数量的数据;
--limit:读取指定数量的数据记录;
--sort:对数据进行排序,可以通过参数指定排序的字段,并使用 1 和 -1 来指定排序的方式,其中 1 为升序排列,而-1是用于降序排列,如sort({KEY:1})。

mongoimport命令参数说明:
h,--host :代表远程连接的数据库地址,默认连接本地Mongo数据库;
--port:代表远程连接的数据库的端口,默认连接的远程端口27017;
-u,--username:代表连接远程数据库的账号,如果设置数据库的认证,需要指定用户账号;
-p,--password:代表连接数据库的账号对应的密码;
-d,--db:代表连接的数据库;
-c,--collection:代表连接数据库中的集合;
-f, --fields:代表导入集合中的字段;
--type:代表导入的文件类型,包括csv和json,tsv文件,默认json格式;
--file:导入的文件名称
--headerline:导入csv文件时,指明第一行是列名,不需要导入;

示例:

mongoexport --port 27030 -u admin -p admin -d test -c bike -f bikeId,lat,lng,current_time,source --type=json -o bike.csv --query='{"source":"ofo"}' --limit=1

mongoexport --port 27030 -u admin -p admin -d test -c bike -f bikeId,lat,lng,current_time,source --type=csv -o bike.csv --query='{"source":"ofo"}' --limit=1

mongoimport --port 27030 -u admin -p admin -d test -c bike_bak  --type=json --file bike.json
区别:
mongoexport/mongoimport导入/导出的是JSON格式,而mongodump/mongorestore导入/导出的是BSON格式。
JSON可读性强但体积较大,BSON则是二进制文件,体积小但对人类几乎没有可读性。
在一些mongodb版本之间,BSON格式可能会随版本不同而有所不同,所以不同版本之间用mongodump/mongorestore可能不会成功,具体要看版本之间的兼容性。当无法使用BSON进行跨版本的数据迁移的时候,使用JSON格式即mongoexport/mongoimport是一个可选项。跨版本的mongodump/mongorestore个人并不推荐,实在要做请先检查文档看两个版本是否兼容(大部分时候是的)。
JSON虽然具有较好的跨版本通用性,但其只保留了数据部分,不保留索引,账户等其他基础信息。使用时应该注意

备份方面比较:
1、mongoexport 可以指定集合中的字段,   mongodump最多到集合
2、mongoexport 可以带导出的过滤条件 -q, mongodump则不可以
3、mongoexport 可以导出json和csv格式,  mongodump导出的是bson可读性不如前者

4、mongodump   的速度和压缩率都最好,每秒125M的数据,压缩率达28%
5、mongodump   更适合全库备份,mongoexport更适合单个集合备份
 
恢复方面比较:
1、mongoimport  速度较快,但不保证数据完整导入 。
2、mongorestore 速度较慢,比mongoimport慢2.5倍左右,但是根据mongodump导出的数据,可以完整导入数据

针对不同版本之间的mongodb迁移提供以下脚本

环境说明:python3

from pymongo import MongoClient

# TODO 源mongo地址, 自行更改
FROM_ADDRESS = ("192.168.100.23", 27017) 
# TODO 目的mongo地址, 自行更改
TO_ADDRESS = ("192.168.30.23", 27017)  
#需要备份的数据库, 自行更改
DB_NAME = "test"


def write(_id, data):
    to_conn = MongoClient(*TO_ADDRESS)
    to_db = to_conn[DB_NAME]
    tab = to_db[_id]
    tab.insert(data)
    to_conn.close()


def main():
    from_conn = MongoClient(*FROM_ADDRESS)
    from_db = from_conn[DB_NAME]
    tables_list = from_db.list_collection_names()  # 数据库里面所有的表
    """
    这里可以去掉不需要动的一些表
    """
    tables_list.pop(tables_list.index("system.indexes"))  # 去掉了system.indexes这张表
    for table in tables_list:
        db_data = from_db[table].find()
        # _db[table].drop()  # 若源数据库的数据不再需要就解开注释
        """
        这里可对数据进行操作, 批量修改, 排序等
        """
        write(table, db_data)  # 写入数据库
    from_conn.close()


if __name__ == '__main__':
    main()

或者使用mongosync

git clone https://github.com/jacketwoo/mongosync

or

git clone https://gitee.com/mirrors_Qihoo360/mongosync.git

yum install -y scons

yum install -y boost boost-devel

yum install -y openssl-devel

cd mongosync/ && make

示例:
mongosync --src_srv 10.6.13.140:27000 --src_user ucloudbackup --src_passwd xxx --src_auth_db admin --dst_srv 10.19.110.146:27000 --dst_user ucloudbackup --dst_passwd xxx --dst_auth_db admin --oplog --is_mongos --shard_user ucloudbackup --shard_passwd xxx

(全量+增量)
shard_user和shard_passwd指的是每一个分片的登录账户和密码

参考链接:
https://www.cnblogs.com/dh17/articles/14484367.html
https://www.cnblogs.com/cp-miao/p/8568010.html

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值