1.數據庫備份 ,支持多數據庫,清理過期備份數據
執行以下腳本文件進行數據庫備份,會當前目錄下創建mysql文件夾進行備份操作
(PS:不要使用xftp等工具創建sh腳本,會有字符無法識別的異常,正確做法是使用vim命令創建sh腳本)
#!/bin/bash
#功能說明:本功能用於備份
#編寫日期:2020/09/05
PATH=/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin
export PATH
#數據庫用戶名
dbUser='root'
#數據庫密碼
dbPasswd='password'
#數據庫IP
dbIp='192.168.10.90'
#需要備份的數據庫,多個數據庫用空格分開
dbName='test1 test2'
#備份時間
backtime=`date +%Y%m%d%H%M%S`
#日誌備份到當前路徑mysql文件夾下
logpath=$(pwd)/mysql/log
#數據備份到當前路徑mysql文件夾下
datapath=$(pwd)/mysql/data
#自動創建目錄
if [ ! -d ${logpath} ];then
mkdir -pv ${logpath}
fi
#自動創建目錄
if [ ! -d ${datapath} ];then
mkdir -pv ${datapath}
fi
#日誌記錄頭部
echo "備份時間爲${backtime},備份數據庫: ${dbName} 開始" >> ${logpath}/mysqllog.log
echo "備份時間爲${backtime},備份數據庫: ${dbName} 開始"
#正式備份數據庫
for table in $dbName; do
source=`/usr/local/mysql/bin/mysqldump -u ${dbUser} -h ${dbIp} -p${dbPasswd} ${table} > ${datapath}/${backtime}-${table}.sql` 2>> ${logpath}/mysqllog.log;
#備份成功以下操作
if [ "$?" == 0 ];then
cd $datapath
#爲節約硬盤空間,將數據庫文件壓縮,壓縮需要時間,視sql文件大小決定,耐心等待即可
tar zcvf ${backtime}-${table}.tar.gz ${backtime}-${table}.sql > /dev/null
#刪除原始文件,只留壓縮後文件
rm -f ${datapath}/${backtime}-${table}.sql
echo "備份時間爲${backtime},備份數據庫: ${table} 備份成功!!" >> ${logpath}/mysqllog.log
echo "備份時間爲${backtime},備份數據庫: ${table} 備份成功!!"
else
#備份失敗則進行以下操作
echo "備份時間爲${backtime},備份數據庫: ${table} 備份失敗!!" >> ${logpath}/mysqllog.log
echo "備份時間爲${backtime},備份數據庫: ${table} 備份失敗!!"
fi
done
#刪除30天前備份,也就是隻保存30天內的備份
find $datapath -name "*.tar.gz" -type f -print -mtime +30 -exec rm -rf {} \; > /dev/null 2>&1
執行成功後在當前路徑下/mysql/data即可查看到備份的數據庫壓縮文件
2.單數據庫單表備份 ,支持多表備份,清理過期備份數據
#!/bin/bash
#功能說明:本功能用於備份
#編寫日期:2020/09/05
PATH=/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin
export PATH
#數據庫用戶名
dbUser='root'
#數據庫密碼
dbPasswd='password'
#數據庫IP
dbIp='192.168.10.90'
#需要備份的數據庫
dbName='test1'
#需要備份的數據庫表,多個數據表用空格分開
dbTableName='table1 table2'
#備份時間
DATA=`date +%Y-%m-%d`
backTime=`date +%Y%m%d%H%M%S`
#日誌備份到當前路徑mysql文件夾下
logpath=$(pwd)/mysql/log
#數據備份到當前路徑mysql文件夾下
datapath=$(pwd)/mysql/data/${DATA}-${dbName}-backfils
#自動創建目錄
if [ ! -d ${logpath} ];then
mkdir -pv ${logpath}
fi
#自動創建目錄
if [ ! -d ${datapath} ];then
mkdir -pv ${datapath}
fi
#日誌記錄頭部
echo "備份時間爲${backTime},備份數據庫表: ${dbName}->${dbTableName} 開始" >> ${logpath}/mysqllog.log
echo "備份時間爲${backTime},備份數據庫表: ${dbName}->${dbTableName} 開始"
#正式備份數據庫
for table in $dbTableName; do
source=`/usr/local/mysql/bin/mysqldump -u ${dbUser} -h ${dbIp} -p${dbPasswd} ${dbName} ${table} > ${datapath}/${backTime}-${dbName}-${table}.sql` 2>> ${logpath}/mysqllog.log;
#備份成功以下操作
if [ "$?" == 0 ];then
cd $datapath
#爲節約硬盤空間,將數據庫文件壓縮,壓縮需要時間,視sql文件大小決定,耐心等待即可
tar zcvf ${backTime}-${table}.tar.gz ${backTime}-${dbName}-${table}.sql > /dev/null
#刪除原始文件,只留壓縮後文件
rm -f ${datapath}/${backTime}-${dbName}-${table}.sql
echo "備份時間爲${backTime},備份數據庫表: ${dbName}->${table} 備份成功!!" >> ${logpath}/mysqllog.log
echo "備份時間爲${backTime},備份數據庫表: ${dbName}->${table} 備份成功!!"
else
#備份失敗則進行以下操作
echo "備份時間爲${backTime},備份數據庫表: ${dbName}->${table} 備份失敗!!" >> ${logpath}/mysqllog.log
echo "備份時間爲${backTime},備份數據庫表: ${dbName}->${table} 備份失敗!!"
fi
done
#刪除30天前備份,也就是隻保存30天內的備份
find $datapath -name "*backfils" -type d -print -mtime +30 -exec rm -rf {} \; > /dev/null 2>&1
執行成功後在當前路徑下/mysql/data即可查看到備份的數據庫壓縮文件
3.定時運行備份
查看當前服務器的定時任務
添加定時任務執行腳本,每天0點運行一次,根據業務需要調整時間
測試運行一下定時任務命令,查看是否運行正常
cd /home/mysqlback;./mysqlback.sh
運行後出現以下異常
-bash: ./mysqlback.sh: Permission denied
執行權限分配命令
chmod u+x *.sh
再次執行命令,備份成功