1. 程式人生 > >Shell指令碼使用匯總整理——mysql資料庫5.7.8以後備份指令碼

Shell指令碼使用匯總整理——mysql資料庫5.7.8以後備份指令碼

Shell指令碼使用匯總整理——mysql資料庫5.7.8以後備份指令碼

Shell指令碼使用的基本知識點彙總詳情見連線:

https://www.cnblogs.com/lsy-blogs/p/9223477.html

指令碼分為三部分配置資訊、指令碼檔案、定時任務;

1、配置資訊:

username=root
password=123456
backupsFileStr=/dataBack/mysql
backupsFileDay=7
threadCounts=6
mysqldumpStr=/usr/local/mysql/bin/mysqlpump
copydb=hebei,countryJgPrep

引數說明:

username:使用者名稱
password:密碼
backupsFileStr:保留備份資料檔案絕對路徑
backupsFileDay:保留備份資料檔案天數
threadCounts:備份開啟多少個執行緒,偶數個執行緒
mysqldumpStr:匯出工具mysqlpump絕對路徑,mysqlpump是mysql資料庫5.7.8以後版本一種高效的匯出方式
copydb:備份的資料庫名稱,多個數據庫用逗號分隔

2、指令碼檔案:

#!/bin/sh

#db_backups_conf.txt檔案路徑
db_backups_conf="/wocloud/shell/db_backups_conf.txt"

#判斷檔案是否存在
if [ -f "${db_backups_conf}" ];then

echo $(date +'%Y-%m-%d %H:%M:%S')" 資料庫配置資訊檔案存在,開始進行資料備份"

#獲取等號前內容,作為map中的Key值
dbArrOne=($(awk -F'[=]' '{print $1}' ${db_backups_conf} ))

#獲取等號後內容,作為map中的value值
dbArrTwo=($(awk -F'[=]' '{print $2}' ${db_backups_conf}))

#建立一個空map
declare -A map=()

#通過迴圈,將db_backups_conf配置檔案中的資訊儲存在map中
for((i=0;i<${#dbArrOne[@]};i++))
do
map[${dbArrOne[i]}]=${dbArrTwo[i]}
done

#獲取備份資料庫的字串
copyDb=${map["copydb"]}

#獲取預設的字串分隔符
old_ifs="$IFS"

#設定字串分隔符為逗號
IFS=","

#將備份資料庫value值的字串進行分隔,獲取一個數組
dbArr=($copyDb)

#將字串的分隔符重新設定為預設的分隔符
IFS="$old_ifs"

#獲取當前年月日
saveday=$(date +%Y%m%d)

#獲取超出備份天數的年月日
delday=$(date -d ${map["backupsFileDay"]}' days ago' +%Y%m%d)


#遍歷要備份的資料庫,刪除兩天前備份的資料檔案
for delDb in ${dbArr[@]};
do
echo $(date +'%Y-%m-%d %H:%M:%S')" 刪除檔案:"${map["backupsFileStr"]}/${delDb}_database_${delday}.sql

rm -f ${map["backupsFileStr"]}/${delDb}_database_${delday}.sql
done

#遍歷要備份的資料庫,備份資料檔案
for saveDb in ${dbArr[@]};
do
echo $(date +'%Y-%m-%d %H:%M:%S')" 備份資料庫:"${saveDb}
${map["mysqldumpStr"]} -u${map["username"]} -p${map["password"]} --default-parallelism=${map["threadCounts"]} -B ${saveDb} > ${map["backupsFileStr"]}/${saveDb}_database_${saveday}.sql
done

echo $(date +'%Y-%m-%d %H:%M:%S')" 資料備份完畢,指令碼執行完畢"

else
echo "檔案不存在"
fi

注意:注意程式碼開頭中讀取配置檔案的路徑,這個位置可能不一樣,需要進行適當修改。

3、定時任務:

Linux中的sh指令碼定時任務,可以通過crontab進行管理,如果linux中沒有安裝crontab,需要進行安裝:

安裝命令:

yum -y install vixie-cron
yum -y install crontabs

服務管理

service crond start     //啟動服務
service crond stop      //關閉服務
service crond restart   //重啟服務
service crond reload    //重新載入配置
service crond status    //檢視crontab服務狀態

加入開機自啟

chkconfig crond on

(1)設定定時任務:

crontab -e 編寫定時任務表示式

例如:

1 */3 * * * /wocloud/shell/fileBackupsScript.sh &>/wocloud/shell/fileBackupsLogs/fileBackupsEcho_`date +\%Y-\%m-\%d-\%H-\%M-\%S`.txt 2>&1

定時表示式+指令碼絕對路徑+指令碼列印資訊日誌輸出絕對路徑(一定要有日誌輸出記錄,方便以後進行檢視)

(2)重新啟動crond

service crond restart;