脚本启动后立即对mongodb数据库进行本地全量备份,获取oplog时间戳,然后每天定时进行增量备份,脚本已内置定时器,只需要把脚本加入开机启动。所有配置都在脚本内更改,脚本支持跨平台。
- Oplog的开启是需要开启副本集才能开启的,所以以上备份策略是针对副本集。
- 时间戳格式 mongodb时间戳规范
- json规范更新需要用“\”转义。如:
{\"ts\":{\"$gt\": {\"$timestamp\": {\"t\": 1582524149, \"i\": 1}}}}
- 恢复备份时出现 Failed: restore error: error applying oplog: applyOps: (Unauthorized) not authorized on admin 解决方法:更新数据库用户的权限,参见【恢复备份】
使用python3.7.6和 mongo4.2.3
脚本依赖python schedule模块需要执行:
pip install schedule
或 pip3 install schedule
- 命令
python3 mongodump_oplog.py
- 命令
nohup python3 -u mongodump_oplog.py > out.log 2>&1 &
- 查看后台
ps aux |grep python
- 删除进程
kill -9 [进程id]
- 编辑rc.local
vim /etc/rc.d/rc.local
- 添加开机执行的xx.py文件
python3 /opt/mongodb/mongodump_oplog.py
- 赋予脚本可执行权限(/opt/mongodb/mongodump_oplog.py是你的脚本路径)
chmod +x /opt/mongodb/mongodump_oplog.py
- 在centos7中,/etc/rc.d/rc.local的权限被降低了,所以需要执行如下命令赋予其可执行权限
chmod +x /etc/rc.d/rc.local
- 恢复全库(恢复库包含admin库会重置admin的角色,注意重新更新admin的角色)
mongorestore -h 192.168.0.123:27017 --authenticationDatabase admin --authenticationMechanism SCRAM-SHA-1 -u admin -p 123456 --oplogReplay --drop main_backup/
- 创建更新admin的角色
use admin
db.auth("admin", "123456")
db.createRole({role:'sysadmin',roles:[], privileges:[ {resource:{anyResource:true},actions:['anyAction']}]})
db.grantRolesToUser( "admin" , [{ role: "root", db: "admin" }, { role: "sysadmin", db: "admin" },{role:"userAdminAnyDatabase", db:"admin"},{role:"readWrite", db:"admin"} ])
- 恢复增量oplog(备份时带有参数--gzip,恢复时也要带--gzip)
mongorestore -h 192.168.0.123:27017 --authenticationDatabase admin --authenticationMechanism SCRAM-SHA-1 -u admin -p 123456 --gzip --oplogReplay next_backup\20200226150743\local\oplog.rs.bson.gz