mongodump只从脚本运行时转储少量集合,如果从终端运行则竞争数据库;

时间:2011-02-03 11:33:01

标签: bash mongodb

我有一个转储数据库并将其复制到S3的脚本。这是调用脚本的crontab条目:

*/1 * * * * /root/scripts/backupDB.sh

backupDB.sh:

#!/bin/sh -e

PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/root/

date_now=`date +%Y_%m_%d_%H_%M`
dir_name="db_backup"
tar_name="db_backup_${date_now}.tar.gz"
file_name="${dir_name}/${tar_name}"

if [ -z "$dir_name" ]; then
    mkdir $dir_name
fi

log() {
    echo $1
    echo $1 >> ${HOME}/tmp/mybackup.log
}

do_cleanup(){
    rm -rf db_backup* 
    log 'cleaning up....'
}

do_backup(){
    log 'Starting the backup' && \
    /usr/bin/mongodump -o ${HOME}/${dir_name} && \
    log 'Data dump created'
    /bin/tar -cjf ${HOME}/${tar_name} ${HOME}/${dir_name} && \
    log 'Created archive'

    log 'saving the backup archive in amazon S3' && \
    /usr/bin/s3cmd put --acl-private ${HOME}/${tar_name} s3://bucket/db-backups/${tar_name} && \
    log 'data backup saved in amazon s3'
}


do_backup && do_cleanup

如果通过终端运行,则相同的脚本会转储所有数据库。如果通过cron运行,则只转储每个数据库的一些集合。 mongodb日志被粘贴here.它没有显示任何奇怪的东西。您可以看到在每分钟开始时建立的连接,对应于调用脚本的crontab条目。但它也表明连接立即结束。可能是什么问题?

1 个答案:

答案 0 :(得分:1)

脚本运行多长时间?

由于你经常从cron运行它,所以总是担心下一个实例可能会在第一个实例完成之前开始导致输出的各种问题,具体取决于脚本的功能。

您需要实现some form of locking以防止并发运行。