freebsd下實現mysql的自動備份

溝通很重要,溝通的渠道很重要。當團隊需要配合的時候,要想辦法將自己當下做的事情,以最有效的方式通知給團隊其它成員,以避免不必要的傷害。

比如,剛剛發生瞭如下事情:
有一測試系統,歷史的任務是完成上線前的最後一次測試,然後:
A 爲了客戶演示系統的使用,在此係統上添加了大量的供演示用的支撐數據。
B 爲了刪除生產環境下冗餘數據,用生產環境下的數據覆蓋了測試的數據。

導致:
A很無奈:覆蓋數據前竟然不和我打招呼!
B很無辜:測試系統不就是用來測試而可以隨時覆蓋的嗎?

以上是閒談,如果我們每日都對數據進行備份呢?是不是就可以解決A、B兩個人的問題?

腳本

#!/bin/bash
# 

# Set these variables
MyUSER=""    # DB_USERNAME
MyPASS=""    # DB_PASSWORD
MyHOST=""    # DB_HOSTNAME

# Backup Dest directory
DEST="" # /home/username/backups/DB

# Email for notifications
EMAIL=""

# How many days old files must be to be removed
DAYS=3

# Linux bin paths
MYSQL="$(which mysql)"
MYSQLDUMP="$(which mysqldump)"
GZIP="$(which gzip)"

# Get date in dd-mm-yyyy format
NOW="$(date +"%d-%m-%Y_%s")"

# Create Backup sub-directories
MBD="$DEST/$NOW/mysql"
install -d $MBD

# DB skip list
SKIP="information_schema
another_one_db"

# Get all databases
DBS="$($MYSQL -h $MyHOST -u $MyUSER -p$MyPASS -Bse 'show databases')"

# Archive database dumps
for db in $DBS
do
    skipdb=-1
    if [ "$SKIP" != "" ];
    then
        for i in $SKIP
        do
            [ "$db" == "$i" ] && skipdb=1 || :
        done
    fi
 
    if [ "$skipdb" == "-1" ] ; then
        FILE="$MBD/$db.sql"
    $MYSQLDUMP -h $MyHOST -u $MyUSER -p$MyPASS $db > $FILE
    fi
done

# Archive the directory, send mail and cleanup
cd $DEST
tar -cf $NOW.tar $NOW
$GZIP -9 $NOW.tar

echo "MySQL backup is completed! Backup name is $NOW.tar.gz" | mail -s "MySQL backup" $EMAIL
rm -rf $NOW

# Remove old files
find $DEST -mtime +$DAYS -exec rm -f {} \;
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章