MongoDB脚本将本地备份复制集备份到Windows Server

时间:2013-11-06 21:09:19

标签: mongodb

我想从运行Windows 2012服务器的复制集中对MongoDB进行每日备份。

最终目标是获得每日备份并将备份写入远程或本地共享 - Windows。

我可以批量处理mongodump命令吗?

非常感谢任何帮助!!

2 个答案:

答案 0 :(得分:27)

对不起,这有点晚了,但以下似乎对我来说还行。该脚本转储数据库并使用7-Zip压缩输出。

1)创建备份脚本(backup.bat)

@echo off

REM move into the backups directory
CD C:\database_backups


REM Create a file name for the database output which contains the date and time. Replace any characters which might cause an issue.
set filename=database %date% %time%
set filename=%filename:/=-%
set filename=%filename: =__%
set filename=%filename:.=_%
set filename=%filename::=-%

REM Export the database
echo Running backup "%filename%"
C:\mongodb\mongodump --out %filename%


REM ZIP the backup directory
echo Running backup "%filename%"
"c:\Program Files\7-Zip\7z.exe" a -tzip "%filename%.zip" "%filename%"


REM Delete the backup directory (leave the ZIP file). The /q tag makes sure we don't get prompted for questions 
echo Deleting original backup directory "%filename%"
rmdir "%filename%" /s /q

echo BACKUP COMPLETE

2)安排备份

  1. 打开计算机管理
  2. 转到任务计划程序,然后选择创建任务
  3. 常规标签上,输入说明并选择运行用户是否已登录,如果您希望该任务在晚上运行。
  4. 触发器标签上,选择您希望任务运行的时间。
  5. 操作标签上,创建一个指向批处理脚本的新操作。

答案 1 :(得分:3)

我在Linux上运行,而不是Windows 2012,但这就是我的工作。在副本集中的一个服务器上,此脚本每晚通过cron作业运行。

#config
BACKUPNAME=[backup file name]
DATAPATH=[path to mongo data folder]

DATESTAMP=$(date +"%Y-%m-%d")
FILENAME=backup.$BACKUPNAME.$DATESTAMP.tar.gz
TARPATH=$DATAPATH/$FILENAME
echo $DATESTAMP;

/etc/init.d/mongod stop

/usr/bin/mongodump --journal --dbpath $DATAPATH --out $DATAPATH/backup
tar czvf $TARPATH $DATAPATH/backup
rm -rf $DATAPATH/backup
/usr/bin/s3cmd put $TARPATH s3://[backup s3 bucket name]/$FILENAME
rm -f $TARPATH

/etc/init.d/mongod start
/scripts/prunebackups

我正在使用s3cmd将文件发送到Amazon AWS上的S3存储桶,但您可以轻松地将文件复制到任何位置。 prunebackups是一个脚本,它根据它们的年龄从S3中删除旧备份。

在Windows上,我创建了一个执行类似任务的批处理文件。实质上:

  1. 停止mongod
  2. 运行mongodump以生成数据
  3. 压缩转储的数据并将其移动到某个地方
  4. 清理文件
  5. 再次启动mongod
  6. 然后,您可以使用Task Scheduler定期运行它。

    如果副本集中有其他mongod实例,则不应遇到任何停机问题。我的设置中的备份实例从不用于读取或写入,但仅用于备份,以防其中一个实例出现故障。

    MongoDB有关于不同备份策略的文档:http://docs.mongodb.org/manual/administration/backup/

    我们选择了mongodump方法,因为对我们来说,存储转储备份比快照更便宜。这是我们使用的具体策略:http://docs.mongodb.org/manual/tutorial/backup-databases-with-binary-database-dumps/。好消息是,我们实际上必须将数据从备份恢复到生产一次,这非常轻松。

相关问题