1. 程式人生 > 其它 >實用shell指令碼-mysql異地備份

實用shell指令碼-mysql異地備份

mysql異地備份shell指令碼

cd /data/scripts
vim mysqlLogicBackup.sh
#!/bin/bash
###################################################################
# Date:        2022-05-10 09:50:00
# Auther:      Created by min.li
# Blog:        https://www.cnblogs.com/liminops/
# Description: This scripts function is mysql remote logic backup
# Version:     1.0
###################################################################
#設定xz壓縮使用cpu的核數為2核
export XZ_DEFAULTS="-T 2"
#預設的環境引數
DateTime="`date +%Y%m%d`"
MYSQL_DUMP_CMD='/usr/local/mysql/bin/mysqldump'
linuxJobNotify_CMD='/usr/local/bin/linuxJobNotify'
#這裡的企業微信機器人訊息通知工具,需要小夥伴自行實現
RemoteHostUser='user'
RemoteHostIP='123.123.123.123'
RemoteHostPort='8888'
backPath='/data/backup/mysql'
at_user='bob'
webhook='43111111-19b9-4e11-115a-0822222222e5'

LogicBackup () {
    #全庫mysql備份
    start_time=`date "+%Y-%m-%d %H:%M:%S"`
    echo -e "`date +"%Y-%m-%d %H:%M:%S"` Start backup ${Instance} ..."|tee -a log
    ${MYSQL_DUMP_CMD} -h${IP} -u${User} -p${Password} -P${Port} --single-transaction --master-data=2 --routines --all-databases > ${Instance}-${DateTime}-alldb.sql|tee -a log
    #如果備份失敗直接退出
    if [ $? -ne 0 ];then
        echo -e " `date +"%Y-%m-%d %H:%M:%S"` ${Instance} backup failed !"|tee -a log
        ${linuxJobNotify_CMD} -j "db back" -s "mysqldump備份失敗" -S "${start_time}" -E "`date "+%Y-%m-%d %H:%M:%S"`" -t ${Instance} -H ${HOSTNAME} -u ${at_user} -k ${webhook}
        exit
    fi
    echo -e "`date +"%Y-%m-%d %H:%M:%S"` Backup ${Instance} Success."|tee -a log
}

CompressCopy () {
    #打包並壓縮
    current_time=`date "+%Y-%m-%d %H:%M:%S"`
    echo -e "`date +"%Y-%m-%d %H:%M:%S"` Start Compress ${Istance} ..."|tee -a log
    tar -Jcf ${Instance}-${DateTime}-alldb.sql.xz ${Instance}-${DateTime}-alldb.sql
    if [ $? -ne 0 ];then
        echo -e "`date +"%Y-%m-%d %H:%M:%S"` Compression ${Instance} fail."|tee -a log
        ${linuxJobNotify_CMD} -j "db back" -s "壓縮失敗" -S "${current_time}" -E "`date "+%Y-%m-%d %H:%M:%S"`" -t ${Instance} -H ${HOSTNAME} -u ${at_user} -k ${webhook}
        exit
    fi
    echo -e "`date +"%Y-%m-%d %H:%M:%S"` Compress ${Istance} Success."|tee -a log
    #清理備份sql檔案
    rm -f ${Instance}-${DateTime}-alldb.sql
    if [ $? -ne 0 ];then
        exit
    fi
    #傳輸到本地機房
    echo -e "`date +"%Y-%m-%d %H:%M:%S"` Start Remote Copy ${Istance} ..."|tee -a log
    scp -P ${RemoteHostPort} ${Instance}-${DateTime}-alldb.sql.xz ${RemoteHostUser}@${RemoteHostIP}:${backPath}
    if [ $? -ne 0 ];then
        echo -e "`date +"%Y-%m-%d %H:%M:%S"` Remote Copy ${Instance} fail."|tee -a log
        ${linuxJobNotify_CMD} -j "db back" -s "SCP傳輸失敗" -S "${current_time}" -E "`date "+%Y-%m-%d %H:%M:%S"`" -t ${Instance} -H ${HOSTNAME} -u ${at_user} -k ${webhook}
        exit
    fi
    echo -e "`date +"%Y-%m-%d %H:%M:%S"` Remote Copy ${Istance} Success."|tee -a log
    #清理壓縮檔案
    rm -f ${Instance}-${DateTime}-alldb.sql.xz
    if [ $? -ne 0 ];then
        exit
    fi
}

#db01
Instance='db01'
User='backup'
Password='asdfasdfasdf4321'
Port=3306
IP='192.168.1.101'
LogicBackup
CompressCopy

#db02
Instance='db02'
User='backup'
Password='asdfasdfasdf4321'
Port=3306
IP='192.168.1.102'
LogicBackup
CompressCopy

配置cron定時任務

cd /data/scripts
chmod +x mysqlLogicBackup.sh
crontab -e
0 3 * * * cd /data/scripts && bash mysqlLogicBackup.sh