跳到主內容

MariaDB 排程備份

因為目前用到的服務都是使用到資料庫,因為無法定時手動備份,可以利用排程的方式來備份資料庫裡的資料,上網查詢相關資料使用 Shell 腳本的方法來進行備份

腳本設定


建立腳本例:mysqlbak.sh

#!/bin/bash
# sql 備份腳本
# 保留最近7天備份

# 要刪除的7天前的日期
DEL_TEN_DAY=`date -d -7day +%F-%H%M%S`

# Others vars
BACK_DIR="/root/backup/sqlbak" # 要備份的目錄
DATE_TITILE=`date +%F`         # 標題時間
DATE_TODAY=`date +%F-%H%M%S`   # 備份時間

# 資料庫備份帳號密碼
DB_USER="user"
DB_PASS="password"
# ip
DB_HOST="127.0.0.1"
# 要備份的資料庫,可以多個資料庫要用空格分開,例如 (db1 db2)
DB_NAME=(dbname)


# 如果該目錄不存在則建立新目錄
if [ ! -d $BACK_DIR ]; 
then     
    mkdir -p $BACK_DIR; 
fi

cd /root/backup/sqlbak

echo "-----$DATE_TITILE-----" >>$BACK_DIR/BAK_LOG.txt
for DATA_BASE in ${DB_NAME[@]}; do
	echo "開始備份 $DATA_BASE" >>$BACK_DIR/BAK_LOG.txt
	mysqldump -h $DB_HOST -u $DB_USER -p$DB_PASS $DATA_BASE | gzip >db_${DATA_BASE}_${DATE_TODAY}.sql.gz
	# 寫入備份日誌
	echo "備份成功 db_${DATA_BASE}_${DATE_TODAY} 到 $BACK_DIR" >>$BACK_DIR/BAK_LOG.txt
	if [ ! -f "$BACK_DIR/db_${DATA_BASE}_${DEL_TEN_DAY}.sql.gz" ]; then
		echo "7天前($DEL_TEN_DAY)備份檔不存在,無需刪除" >>$BACK_DIR/BAK_LOG.txt
	else
		rm -f $BACK_DIR/db_${DATA_BASE}_${DEL_TEN_DAY}.sql.gz
		echo "刪除7天前備份檔 $BACK_DIR/db_${DATA_BASE}_${DEL_TEN_DAY}.sql.gz" >>$BACK_DIR/BAK_LOG.txt
	fi
done

腳本權限


chmod a+x mysqlbak.sh

說明


備份出來的檔名為 「 db_資料庫名稱_日期 」 壓縮檔,如果該目錄有7天以上的檔案會自動刪除掉,這樣子才不會一直占硬碟空間。

排程


每天三點執行備份任務

0 3 * * * /root/mysqlbak.sh



參考相關網頁