mysql數據庫定期備份腳本

#由於現在的數據量小,每天的增量也不多,所以使用腳本來定期備份mysql

#服務器192.168.2.10,腳本存在此服務器上。
#mysql服務器地址192.168.2.50
#另一臺服務器192.168.2.40
#腳本在10上,將50數據庫備份到本地tmp目錄下,在將備份文件拷到 40和50上,刪除本地的備份(本地的也可保留)。
#需建立10到40、50 的無密碼登錄
#腳本適合小數據量的數據庫備份

#這裏使用了我自己的用戶名登錄,注意備份目錄的權限

 

 

#!/usr/bin/env bash

 

TIME_STAMP="`date +%Y%m%d_%H%M%S`"
DB_HOST=192.168.2.50
DB_USER=root
DB_PASSWD='atad@yeyu'
DB_FILE=mysql_$TIME_STAMP.sql.gz

RET="OK"

cd /tmp/

# function

yeyu_mail ()
{
        DBINFO=/dev/shm/dbinfo.txt
        echo "[FILE INFORMATION]"                                                       >  $DBINFO
        ls -lh $DB_FILE                                                                 >> $DBINFO
        ls -l $DB_FILE                                                                  >> $DBINFO
       
        EMAIL_SUBJECT="Database Backup for 50 $RET: $TIME_STAMP"
        FROM_EMAIL_ADDRESS=wxc_08
        FRIENDLY_NAME=WXC_08_163
        [email protected]
        EMAIL_ACCOUNT_PASSWORD=test 

        SMTP_ADDRESS="smtp://smtp.163.com"  #這裏使用了163的smtp服務
        TO_EMAIL_LIST="[email protected]"

        for TO_EMAIL_ADDRESS in $TO_EMAIL_LIST; do
                cat $DBINFO | mailx -v -s "$EMAIL_SUBJECT" \
                -S smtp-use-starttls \
                -S ssl-verify=ignore \
                -S smtp-auth=login \
                -S smtp="$SMTP_ADDRESS" \
                -S from="$FROM_EMAIL_ADDRESS($FRIENDLY_NAME)" \
                -S smtp-auth-user=$FROM_EMAIL_ADDRESS \
                -S smtp-auth-password=$EMAIL_ACCOUNT_PASSWORD \
                -S ssl-verify=ignore \
                $TO_EMAIL_ADDRESS

                # Not spam
                sleep 5
        done

        rm -f $DBINFO
}

# dump & check from db (192.168.2.50) to local (192.168.2.10, /tmp/)

mysqldump -h$DB_HOST -u$DB_USER -p$DB_PASSWD --all-databases | gzip > $DB_FILE

gzip -t $DB_FILE || RET="ERROR(1)"
gzip -t $TABLE_FILE || RET="ERROR(1)"

# md5
md5sum $DB_FILE > $DB_FILE.md5
md5sum $TABLE_FILE > $TABLE_FILE.md5
if [ "$RET" != "OK" ]; then
        yeyu_mail
        exit 1
fi

# copy file from local (192.168.2.10, /tmp/) to db server (192.168.2.50, /mnt/sda1/db_bak)

scp -P22822 -i /home/wang/.ssh/id_rsa_50 $DB_FILE* $TABLE_FILE* [email protected]:/mnt/sda1/db_bak/
ssh -p22822 -i /home/wang/.ssh/id_rsa_50 [email protected] "cd /mnt/sda1/db_bak/ && md5sum -c $DB_FILE.md5" || RET="ERROR(2)"
if [ "$RET" != "OK" ]; then
        yeyu_mail
        exit 2
fi

# copy file from local (192.168.2.10, /tmp/) to other server (192.168.2.40, /mnt/sdc1/db_bak)

scp -P22822 -i /home/wang/.ssh/id_rsa_40 $DB_FILE* $TABLE_FILE* [email protected]:/mnt/sdc1/db_bak/
ssh -p22822 -i /home/wang/.ssh/id_rsa_40 [email protected] "cd /mnt/sdc1/db_bak/ && md5sum -c $DB_FILE.md5" || RET="ERROR(3)"
if [ "$RET" != "OK" ]; then
        yeyu_mail
        exit 3
fi

# delete old files
ssh -p22822 -i /home/wang/.ssh/id_rsa_40 [email protected] "cd /mnt/sdc1/db_bak/ && find . -mtime +30 | xargs rm -f"
ssh -p22822 -i /home/wang/.ssh/id_rsa_50 [email protected] "cd /mnt/sda1/db_bak/ && find . -mtime +30 | xargs rm -f"

# mail
yeyu_mail

# rm
rm -f $DB_FILE $DB_FILE.md5 $TABLE_FILE $TABLE_FILE.md5

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章