實用shell指令碼-mysql異地備份
阿新 • • 發佈:2022-05-11
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