Mongodb 定期备份

目录 [−]

  1. 参考资料

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

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

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

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