MongoDB的备份和恢复
(一)备份
1、逻辑备份
利用mongodump命令实现逻辑备份,如:
mongodump -h 127.0.0.1:28000 -u sys_admin --authenticationDataBase admin -p PASSWORD -d databasename -c collectionname
--dumpDbUsersAndRoles -o /home/bien/bien.sql
个命令参数含义如下:
- -h: MongoDB所在服务器地址,例如:127.0.0.1。当然也可以指定端口号:127.0.0.1:27017。
- --port:端口号
- -d:需要备份的数据库实例,例如,bien_db (数据库名)
- -c:需要备份的集合,例如:bienCollection (集合名)
- -o:备份数据的存放位置
- -u:用户名
- -p:密码
- --gzip:压缩
- --oplog:point in time恢复用的参数,并且只支持全库备份。
- --authenticationDatabase:认证库
- --dumpDbUserAndRoles:dump用户和角色,只有在单库备份时才需要这么做。
- --archive=dbname.gz:3.2版本新增,归档备份为1个文件,不能和-o参数同时使用。
2、物理备份
为了实现物流备份,可以在从库上执行下面这条命令:
db.runCommand({createBackup:1, backupDir:"/home/bien/bkData"})
其中,/home/backup/data地址可以根据自身修改,它是用来存储备份数据的。
(二)恢复
1、逻辑恢复
利用oplog实现point-in-time的恢复,步骤如下:
- 利用mongodump命令备份出oplog:
mongodump -h 127.0.0.1:27020 -u sys_admin --authenticationDataBase admin -p PASSWORD -d local -c oplog.rs -o /home/bien/backup
- 利用bsondump命令让oplog具备可读性:
bsondump /home/bien/backup/local/oplog.rs.bson > /home/bien/local.log
- 将oplog改名,避免在restore时报错,并将oplog的备份复制到Standalone机器上:
mv oplog.rs.bson oplog.bson
- Standalone实例导入物理或逻辑备份。
- Standalone库启动
- 导入全库备份,找出误操作时的具体时间,比如在 2020-02-02 02:02:02时删除,将这时间转换为一串数字时间戳;如果不能精确到秒,那么可以在02:02左右时删除。
cat local.log | grep -A 100 数字时间戳
- 利用mongrestore命令执行恢复操作:
找到误操作的时间点,会截止在这个时间点不恢复:
mongorestore -h 127.0.0.1:27030 --oplogReplay --oplogLimit 数字时间戳:1 /home/bien/bakcup/
2、物理恢复
将备份好的文件复制到待恢复的机器上,使用mongod直接拉起Mongo进程就可以完成物理恢复了。