Mongodb 定期备份

鸟窝
鸟窝
创建于2022-5-25 阅读
0
阅读原文

目录 [−]

  1. 参考资料

在生产系统中,数据库的备份是必要的,否则当服务器被攻击,硬盘坏掉,运维误删等原因将数据库干掉的时候就欲哭无泪了。

备份MongoDB数据库常见的方式有三种:

  • 使用[MongoDB管理服务(MMS)(https://mms.mongodb.com/)进行云备份
  • 使用文件系统快照
  • 使用MongoDB自身的mongodump工具

本文介绍第三种简单的备份,对于备份数据量不是太大的数据库还是很有效的。

Sheharyar Naseer在Regular Mongo Backups Using Cron一文中提供了一个简单的脚本mongo_backup.sh:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
#!/bin/bash
MONGO_DATABASE="your_db_name"
APP_NAME="your_app_name"
MONGO_HOST="127.0.0.1"
MONGO_PORT="27017"
TIMESTAMP=`date +%F-%H%M`
MONGODUMP_PATH="/usr/bin/mongodump"
BACKUPS_DIR="/home/username/backups/$APP_NAME"
BACKUP_NAME="$APP_NAME-$TIMESTAMP"
# mongo admin --eval "printjson(db.fsyncLock())"
# $MONGODUMP_PATH -h $MONGO_HOST:$MONGO_PORT -d $MONGO_DATABASE
$MONGODUMP_PATH -d $MONGO_DATABASE
# mongo admin --eval "printjson(db.fsyncUnlock())"
mkdir -p $BACKUPS_DIR
mv dump $BACKUP_NAME
tar -zcvf $BACKUPS_DIR/$BACKUP_NAME.tgz $BACKUP_NAME
rm -rf $BACKUP_NAME

View Gist on Github

如果你想在备份的时候锁住数据库,避免备份的时候有更新操作,可以uncomment fsyncLockfsyncUnlock这两行。

然后将其加入到cron中:

1
crontab -e

配置如下:

1
00 00 * * * /bin/bash /home/username/scripts/mongo_backup.sh

micahwedemeyer提供了更强大的一个脚本automongobackup.sh,提供了更强大的备份的功能。

参考资料

  1. http://www.infoq.com/cn/articles/mongodb-deployment-backup-security
  2. https://docs.mongodb.org/manual/reference/program/mongodump/
  3. https://docs.mongodb.org/manual/reference/program/mongorestore/
  4. https://sheharyar.me/blog/regular-mongo-backups-using-cron/
  5. https://github.com/micahwedemeyer/automongobackup