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进程就可以完成物理恢复了。

posted @ 2020-02-26 21:54  晒太阳的兔子很忙  阅读(416)  评论(0编辑  收藏  举报