天天看點

[Shell 腳本] 備份資料庫檔案至OSS服務(純shell腳本無sdk)

背景:

凡事使用伺服器搭建的網站就需要定時備份網站資料,常見的方法是打包網站目錄,然後備份到FTP伺服器上等。也有通過OSS SDK把備份的網站檔案上傳到OSS伺服器上,但是通過SDK來實作,需要一定的技術能力,而且相對比較複雜,需要使用更多的檔案,而這篇文章是通過shell腳本,并不是通過OSS SDK來上傳檔案,簡單友善。

步驟:

1、首先需要在阿裡雲新增賬號,開通OSS服務,建立bucket,Bucket設定為私有讀寫。

2、将下面的腳本檔案複制下來,儲存為 .sh 腳本檔案(例如:backupsqls,放置在/usr/local/sbin/backupsites),其中需要把oss位址、bucket名字、Access ID、Access Key、網站目錄,已經通知郵件的位址修改成自己的。

3、使用指令: chmod +x /usr/local/sbin/backupsqls 對檔案設定執行權限。

4、使用指令: echo “0 0 * * * /usr/local/sbin/backupsqls” >>/var/spool/cron/root

設定每天零點進行備份網站資料。

腳本:

#!/bin/bash
PATH=/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin:~/bin
export PATH

Date=`date +%Y-%m-%d_%H:%M:%S`
BucketTime=`date +%Y%m`
OldDate=$(date -d "-7 days" "+%Y-%m-%d")

Host="oss-cn-hangzhou-internal.aliyuncs.com"
###oss的位址###
Bucket="bucketname"
###bucket名字###
Id="xxxxxxxx"
###Access ID###
Key="xxxxxxxxxx"
###Access Key###
OssHost=$Bucket.$Host

MYUSER="xxxxx"
MYPASS="xxxxxx"
###備份資料庫賬号資訊###
DBS=`mysql -u$MYUSER -p$MYPASS -P3306 -Bse "show databases" | grep -v "information_schema" | grep -v "test"`
###羅列資料庫資訊###
#========================BackUp SQL========================

for DateName in $DBS; do
    mysqldump --single-transaction -u$MYUSER -p$MYPASS -P3306 $DateName > /tmp/$DateName.$Date.sql
    zip -P 密碼 /tmp/$DateName.$Date.sql.zip /tmp/$DateName.$Date.sql
###zip壓縮設定的密碼###
    if [ -s /tmp/$DateName.$Date.sql.zip ] ; then
        
        source="/tmp/$DateName.$Date.sql.zip"
        dest="$BucketTime/$DateName.$Date.sql.zip"
        
        resource="/${Bucket}/${dest}"
        contentType=`file -ib ${source} |awk -F ";" '{print $1}'`
        dateValue="`TZ=GMT env LANG=en_US.UTF-8 date +'%a, %d %b %Y %H:%M:%S GMT'`"
        stringToSign="PUT\n\n${contentType}\n${dateValue}\n${resource}"
        signature=`echo -en $stringToSign | openssl sha1 -hmac ${Key} -binary | base64`

        url=http://${OssHost}/${dest}
        echo "upload ${source} to ${url}"

        curl -i -q -X PUT -T "${source}" \
            -H "Host: ${OssHost}" \
            -H "Date: ${dateValue}" \
            -H "Content-Type: ${contentType}" \
            -H "Authorization: OSS ${Id}:${signature}" \
            ${url}

        if [ $? -ne 0 ];then
            echo -e ""[$HOSTNAME] DateName $DateName $Date Fail Upload"" | mutt -s "'[$HOSTNAME] DateName $DateName $Date Fail Upload'" [email protected]  
        else
            echo -e ""[$HOSTNAME] DateName $DateName $Date Success"" | mutt -s "'[$HOSTNAME] DateName $DateName $Date Success'" [email protected]
            rm -rf /tmp/$DateName.$OldDate*
        fi
    
    else
        echo -e ""[$HOSTNAME] DateName $DateName $Date Fail Backup "" | mutt -s "'[$HOSTNAME] DateName $DateName $Date Fail Backup'" [email protected]
    fi
done

#========================BackUp SQL========================           

執行效果可以檢視:

http://blog.daobidao.com/shell-backup-sqls-to-oss.html

http://img.blog.daobidao.com/BackUp-Mysql-To-OSS-01.jpg