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