linux下mysql數據庫進行備份腳本


1.數據庫備份 ,支持多數據庫,清理過期備份數據

執行以下腳本文件進行數據庫備份,會當前目錄下創建mysql文件夾進行備份操作

需要注意的點:

1.不要使用xftp等工具創建sh腳本,會有字符無法識別的異常,正確做法是使用vim命令創建sh腳本

#編輯sh腳本
vim mysqlback.sh

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.0.1'
#需要備份的數據庫,多個數據庫用空格分開
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
    echo "備份時間為${backtime},備份數據庫: ${table} 備份開始!!" >> ${logpath}/mysqllog.log
    echo "備份時間為${backtime},備份數據庫: ${table} 備份開始!!"
    source=`/usr/local/mysql/bin/mysqldump --skip-lock-tables -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.0.1'
#需要備份的數據庫
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 --skip-lock-tables -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.定時運行備份

查看當前服務器的定時任務

crontab -e

添加定時任務執行腳本,每天0點運行一次,根據業務需要調整時間

0 0 0 1/1 * cd /home/mysqlback;./mysqlback.sh

 測試運行一下定時任務命令,查看是否運行正常

cd /home/mysqlback;./mysqlback.sh

運行后出現以下異常

-bash: ./mysqlback.sh: Permission denied

執行權限分配命令

chmod u+x *.sh

再次執行命令,備份成功

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM