65.9K
CodeProject 正在变化。 阅读更多。
Home

使用 CRON 和 S3CMD 自动化 MongoDB 备份

starIconstarIconstarIconstarIconstarIcon

5.00/5 (4投票s)

2013年2月18日

CPOL
viewsIcon

51654

本文档旨在提供所有步骤,以创建一个针对 Linux 服务器上 MongoDB 服务器的自动化备份,所有备份都通过 crontab 计划发送到 Amazon AWS S3 服务。

目录

简介

以下技巧描述了如何在 Linux 环境中使用 Cron 调度器和 Amazon S3 来存储所有备份数据,从而为 MongoDB 服务器创建一个自动备份例程。

背景

要完成这些步骤,您必须具备

  • 配置了 MongoDB 2.2.3 或更高版本在 Linux 环境中(最好是在 Amazon EC2 实例中) 
  • Amazon S3 帐户,用于存储所有备份数据 

安装和配置 S3CMD

S3cmd 是一个程序,允许您使用 shell 执行 Amazon S3 中的所有操作。 

要安装和配置

sudo su
sudo yum --enablerepo epel install s3cmd
s3cmd --configure

要测试 s3cmd,请显示您的 Amazon S3 帐户中的所有存储桶。

s3cmd ls

备份脚本 

创建一个新的 shell 文件,命名为 mongodb_to_s3_backup.sh,使用任何 Linux 编辑器(我使用 vi

vi mongodb_to_s3_backup.sh
#!/bin/bash
 
#Force file syncronization and lock writes
mongo admin --eval "printjson(db.fsyncLock())"
 
MONGODUMP_PATH="/usr/bin/mongodump"
MONGO_HOST="SERVER_IP_HERE" #replace with your server ip
MONGO_PORT="27017"
MONGO_DATABASE="dbname_here" #replace with your database name
 
TIMESTAMP=`date +%F-%H%M`
S3_BUCKET_NAME="bucketname_here" #replace with your bucket name on Amazon S3
S3_BUCKET_PATH="mongodb-backups"
 
# Create backup
$MONGODUMP_PATH -h $MONGO_HOST:$MONGO_PORT -d $MONGO_DATABASE
 
# Add timestamp to backup
mv dump mongodb-$HOSTNAME-$TIMESTAMP
tar cf mongodb-$HOSTNAME-$TIMESTAMP.tar mongodb-$HOSTNAME-$TIMESTAMP
 
# Upload to S3
s3cmd put mongodb-$HOSTNAME-$TIMESTAMP.tar 
   s3://$S3_BUCKET_NAME/$S3_BUCKET_PATH/mongodb-$HOSTNAME-$TIMESTAMP.tar
 
#Unlock database writes
mongo admin --eval "printjson(db.fsyncUnlock())"

测试脚本并验证您的 Amazon S3 存储桶。

bash mongodb_to_s3_backup.sh

使用 CRON 自动化备份

要安排 mongodb_to_s3_backup.sh,请使用 cron 调度器。

sudo su
crontab -e

每行(不含注释)代表一个计划

#every day at 01h 00m
00 01 * * * /bin/bash /home/ec2-user/mongodb_to_s3_backup.sh

就这些了。如有任何问题或疑虑,请告诉我,我会帮助您。祝您愉快;]

所有代码都在我的 gist 帐户中:https://gist.github.com/lazarofl/4961746

© . All rights reserved.