日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > 数据库 >内容正文

数据库

mysql 备份脚本

發布時間:2023/12/18 数据库 26 豆豆
生活随笔 收集整理的這篇文章主要介紹了 mysql 备份脚本 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
#!/bin/bash INNOBACKUPEXFULL="/usr/bin/innobackupex" MYSQL_CMD=' --socket=/ssd/mysql/3346/tmp/mysql.sock --user=root --password=mysqlpassword --port=3346' MYSQL_UP=' --user=root --password=mysqlpassword --port=3346 ' #mysqladmin的用戶名和密碼 TMPLOG="/data/tmp/innobackupex.$$.log" MY_CNF="/usr/local/mysql/mysql3346.cnf" #mysql的配置文件 TMP_DIR=/data/backup_tmp MYSQL=/usr/local/mysql/bin/mysql MYSQL_ADMIN=/usr/local/mysql/bin/mysqladmin BACKUP_DIR=/data/backup # 備份的主目錄 FULLBACKUP_DIR=$BACKUP_DIR/full # 全庫備份的目錄 INCRBACKUP_DIR=$BACKUP_DIR/incre # 增量備份的目錄 FULLBACKUP_INTERVAL=86400 # 全庫備份的間隔周期,時間:秒 KEEP_FULLBACKUP=1 # 至少保留幾個全庫備份 logfiledate=/data/backup/backup.`date +%Y%m%d%H%M`.txt #開始時間 STARTED_TIME=`date +%s`############################################################################# # 顯示錯誤并退出 ############################################################################# error() {echo "$1" 1>&2exit 1 } # 檢查執行環境 if [ ! -x $INNOBACKUPEXFULL ]; thenerror "$INNOBACKUPEXFULL未安裝或未鏈接到/usr/bin." fiif [ ! -d $BACKUP_DIR ]; thenerror "備份目標文件夾:$BACKUP_DIR不存在." fimysql_status=`netstat -nl | awk 'NR>2{if ($4 ~ /.*:3346/) {print "Yes";exit 0}}'` if [ "$mysql_status" != "Yes" ];thenerror "MySQL 沒有啟動運行." fiif ! `echo 'exit' | $MYSQL -s $MYSQL_CMD` ; thenerror "提供的數據庫用戶名或密碼不正確!" fi# 備份的頭部信息 echo "----------------------------" echo echo "$0: MySQL備份腳本" echo "開始于: `date +%F' '%T' '%w`" echo#新建全備和差異備份的目錄 mkdir -p $FULLBACKUP_DIR mkdir -p $INCRBACKUP_DIR#查找最新的完全備份 LATEST_FULL_BACKUP=`find $FULLBACKUP_DIR -mindepth 1 -maxdepth 1 -type d -printf "%P\n" | sort -nr | head -1`# 查找最近修改的最新備份時間 #########m by sk 將文件目錄改成時間"2017-10-01_02-02-02" #先轉成TEMPSTR "2017-10-01 02:02:02" #LATEST_FULL_BACKUP_CREATED_TIME=`stat -c %Y $FULLBACKUP_DIR/$LATEST_FULL_BACKUP` TEMPSTR=`echo "$LATEST_FULL_BACKUP" | sed "s/_/ /"|sed "s/-/:/3g"` LATEST_FULL_BACKUP_CREATED_TIME=`date +%s -d "$TEMPSTR"` ######### #如果全備有效進行增量備份否則執行完全備份 if [ "$LATEST_FULL_BACKUP" -a `expr $LATEST_FULL_BACKUP_CREATED_TIME + $FULLBACKUP_INTERVAL - 300` -ge $STARTED_TIME ] ; then# 如果最新的全備未過期則以最新的全備文件名命名在增量備份目錄下新建目錄echo -e "完全備份$LATEST_FULL_BACKUP未過期,將根據$LATEST_FULL_BACKUP名字作為增量備份基礎目錄名"echo " "NEW_INCRDIR=$INCRBACKUP_DIR/$LATEST_FULL_BACKUPmkdir -p $NEW_INCRDIR# 查找最新的增量備份是否存在.指定一個備份的路徑作為增量備份的基礎LATEST_INCR_BACKUP=`find $NEW_INCRDIR -mindepth 1 -maxdepth 1 -type d -printf "%P\n" | sort -nr | head -1`if [ ! $LATEST_INCR_BACKUP ] ; thenINCRBASEDIR=$FULLBACKUP_DIR/$LATEST_FULL_BACKUPecho -e "增量備份將以$INCRBASEDIR作為備份基礎目錄"echo " "elseINCRBASEDIR=$INCRBACKUP_DIR/${LATEST_FULL_BACKUP}/${LATEST_INCR_BACKUP}echo -e "增量備份將以$INCRBASEDIR作為備份基礎目錄"echo " "fiecho "使用$INCRBASEDIR作為基礎本次增量備份的基礎目錄."$INNOBACKUPEXFULL --defaults-file=$MY_CNF --encrypt=AES256 --encrypt-key=jiamistring --encrypt-threads=5 --use-memory=4G $MYSQL_CMD --incremental --parallel=4 --no-lock --safe-slave-backup --slave-info --tmpdir=$TMP_DIR $NEW_INCRDIR --incremental-basedir $INCRBASEDIR > $TMPLOG 2>&1#保留一份備份的詳細日志cat $TMPLOG>$logfiledateif [ -z "`tail -1 $TMPLOG | grep 'innobackupex: completed OK!'`" ] ; thenecho "$INNOBACKUPEX命令執行失敗:"; echoecho -e "---------- $INNOBACKUPEX_PATH錯誤 ----------"cat $TMPLOGrm -f $TMPLOGexit 1fiTHISBACKUP=`awk -- "/Backup created in directory/ { split( \\\$0, p, \"'\" ) ; print p[2] }" $TMPLOG`##add by skecho "skmsize:`du -sm $THISBACKUP | awk '{print $1}'`">>$logfiledate##rm -f $TMPLOGecho -n "數據庫成功備份到:$THISBACKUP"xbcrypt -d --encrypt-key=jiamistring --encrypt-algo=AES256 -i $THISBACKUP/xtrabackup_checkpoints.xbcrypt -o $THISBACKUP/xtrabackup_checkpointsecho# 提示應該保留的備份文件起點LATEST_FULL_BACKUP=`find $FULLBACKUP_DIR -mindepth 1 -maxdepth 1 -type d -printf "%P\n" | sort -nr | head -1`NEW_INCRDIR=$INCRBACKUP_DIR/$LATEST_FULL_BACKUPLATEST_INCR_BACKUP=`find $NEW_INCRDIR -mindepth 1 -maxdepth 1 -type d -printf "%P\n" | sort -nr | head -1`RES_FULL_BACKUP=${FULLBACKUP_DIR}/${LATEST_FULL_BACKUP}RES_INCRE_BACKUP=`dirname ${INCRBACKUP_DIR}/${LATEST_FULL_BACKUP}/${LATEST_INCR_BACKUP}`echoecho -e '\e[31m NOTE:---------------------------------------------------------------------------------.\e[m' #紅色echo -e "必須保留$KEEP_FULLBACKUP份全備即全備${RES_FULL_BACKUP}和${RES_INCRE_BACKUP}目錄中所有增量備份."echo -e '\e[31m NOTE:---------------------------------------------------------------------------------.\e[m' #紅色echo elseecho "*********************************"echo -e "正在執行全新的完全備份...請稍等..."echo "*********************************"$INNOBACKUPEXFULL --defaults-file=$MY_CNF --encrypt=AES256 --encrypt-key=jiamistring --encrypt-threads=5 --use-memory=4G --no-lock --safe-slave-backup --parallel=4 --tmpdir=$TMP_DIR --slave-info $MYSQL_CMD $FULLBACKUP_DIR > $TMPLOG 2>&1 #保留一份備份的詳細日志cat $TMPLOG>$logfiledateif [ -z "`tail -1 $TMPLOG | grep 'innobackupex: completed OK!'`" ] ; thenecho "$INNOBACKUPEX命令執行失敗:"; echoecho -e "---------- $INNOBACKUPEX_PATH錯誤 ----------"cat $TMPLOGrm -f $TMPLOGexit 1fiTHISBACKUP=`awk -- "/Backup created in directory/ { split( \\\$0, p, \"'\" ) ; print p[2] }" $TMPLOG`##add by skecho "skmsize:`du -sm $THISBACKUP | awk '{print $1}'`">>$logfiledate##rm -f $TMPLOGecho -n "數據庫成功備份到:$THISBACKUP"xbcrypt -d --encrypt-key=jiamistring --encrypt-algo=AES256 -i $THISBACKUP/xtrabackup_checkpoints.xbcrypt -o $THISBACKUP/xtrabackup_checkpointsecho# 提示應該保留的備份文件起點LATEST_FULL_BACKUP=`find $FULLBACKUP_DIR -mindepth 1 -maxdepth 1 -type d -printf "%P\n" | sort -nr | head -1`RES_FULL_BACKUP=${FULLBACKUP_DIR}/${LATEST_FULL_BACKUP}echoecho -e '\e[31m NOTE:---------------------------------------------------------------------------------.\e[m' #紅色echo -e "無增量備份,必須保留$KEEP_FULLBACKUP份全備即全備${RES_FULL_BACKUP}."echo -e '\e[31m NOTE:---------------------------------------------------------------------------------.\e[m' #紅色echofi#刪除過期的全備 echo -e "find expire backup file...........waiting........." echo -e "尋找過期的全備文件并刪除">>$logfiledate #for efile in $(/usr/bin/find $FULLBACKUP_DIR/ -mtime +7) ##do ## if [ -d ${efile} ]; then # rm -rf "${efile}" # echo -e "刪除過期全備文件:${efile}" >>$logfiledate # elif [ -f ${efile} ]; then # rm -rf "${efile}" # echo -e "刪除過期全備文件:${efile}" >>$logfiledate # fi; # #done cd $FULLBACKUP_DIR /usr/bin/find -maxdepth 1 -type d -mtime +5|xargs rm -fr if [ $? -eq "0" ];thenechoecho -e "未找到可以刪除的過期全備文件" fi echo echo "完成于: `date +%F' '%T' '%w`"cd $INCRBACKUP_DIR /usr/bin/find -maxdepth 1 -type d -mtime +5|xargs rm -fr if [ $? -eq "0" ];thenechoecho -e "未找到可以刪除的過期增量備份文件" fi echo echo "完成于: `date +%F' '%T' '%w`" exit 0

  

轉載于:https://www.cnblogs.com/52shaidan/p/10104890.html

創作挑戰賽新人創作獎勵來咯,堅持創作打卡瓜分現金大獎

總結

以上是生活随笔為你收集整理的mysql 备份脚本的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。