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

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/450405.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/450405.shtml
英文地址,請注明出處:http://en.pswp.cn/news/450405.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

爆棧的處理方法

爆棧指遞歸中,存儲的信息量大于系統棧的內存。 信息量包括元素編號,每一層中開的變量。 和遞歸的層數正相關。 (雖然noip一般開棧) 1.手寫棧 while(top){ int xsta[top]; for(each son) if(has son){ //blablabla sta[top]son; h…

項目面試題

項目面試題 1.描述最熟悉的或者(最近)的一個項目 ? 目的:檢測技術和項目的熟悉程度工作職責 回答:項目名稱,項目的甲方,背景,實現的目的和意義,該項目主要是為了解決什…

MySQL定時備份(全量備份+增量備份)

MySQL 定時備份 參考 zone7_ 的 實戰-MySQL定時備份系列文章 參考 zmcyu 的 mysql數據庫的完整備份、差異備份、增量備份 更多binlog的學習參考馬丁傳奇的 MySQL的binlog日志,這篇文章寫得認真詳細,如果看的認真的話,肯定能學的很好的。 如果…

java 接口可以多繼承

前些天發現了一個巨牛的人工智能學習網站,通俗易懂,風趣幽默,忍不住分享一下給大家。點擊跳轉到教程。 接口是常量值和方法定義的集合。接口是一種特殊的抽象類。 java類是單繼承的。classB Extends classA java接口可以多繼承。Interface…

C語言struct關鍵字詳解—結構體

struct 是個神奇的關鍵字,它將一些相關聯的數據打包成一個整體,方便使用。在網絡協議、通信控制、嵌入式系統、驅動開發等地方,我們經常要傳送的不是簡單的字節流(char 型數組),而是多種數據組合起來的一個…

JDK1.8使用Dubbo時需注意

2019獨角獸企業重金招聘Python工程師標準>>> Dubbo自帶的很多包都比較舊了,其中的javassist在JDK1.8上運行會報錯 而且錯誤通常比較詭異,javassist是編輯和創建Java字節碼的類庫,常見的錯誤會從spring中報出 解決辦法:…

Java 11 已發布,String 還能這樣玩!

在文章《Java 11 正式發布,這 8 個逆天新特性教你寫出更牛逼的代碼》中,我有介紹到 Java 11 的八個新特性,其中關于 String 加強部分,我覺得有點意思,這里單獨再拉出來講。 Java 11 增加了一系列的字符串處理方法&…

Redis1 晨考題

Redis1 晨考題 1.Redis 是什么 ? redis 是一個開源的使用 ANSI C 語言編寫、支持網絡、可基于內存亦可持久化的日志型、Key-Value 的內存數據庫,并提供多種語言的 API。 2.NOSQL 是什么 ?出現的目的和意義是什么 ? NoSQL 泛指…

C語言void關鍵字

void 有什么好講的呢?如果你認為沒有,那就沒有;但如果你認為有,那就真的有。有點像“色即是空,空即是色”。一、void a? void 的字面意思是“空類型”,void *則為“空類型指針”,vo…

深入了解RabbitMQ工作原理及簡單使用

深入了解RabbitMQ工作原理及簡單使用 RabbitMQ系列文章 RabbitMQ在Ubuntu上的環境搭建深入了解RabbitMQ工作原理及簡單使用RabbitMQ交換器Exchange介紹與實踐RabbitMQ事務和Confirm發送方消息確認——深入解讀使用Docker部署RabbitMQ集群你不知道的RabbitMQ集群架構全解RabbitM…

使用el-checkbox實現全選,點擊失效沒有反應

最近在公司接收到了一個需求,給收藏夾的書籍添加批量、全選刪除實現思路:點擊全選改變item的checked,改變item的checked,重新便利一下所有item的checked來改變全選的selectAll1)該組件基本功能已經實現,che…

Spring3.2新注解@ControllerAdvice

前些天發現了一個巨牛的人工智能學習網站,通俗易懂,風趣幽默,忍不住分享一下給大家。點擊跳轉到教程。 ControllerAdvice,是spring3.2提供的新注解,從名字上可以看出大體意思是控制器增強。讓我們先看看ControllerAdv…

Mysql1 晨考題

Mysql1 晨考題 1.描述主鍵、外鍵、候選主鍵、超鍵分別是什么 ? (1)主鍵:數據庫表中對存儲數據對象給予唯一完整標識的數據列或屬性的組合。一個數據列只能有一個主 鍵,且主鍵的取值不能缺失,即不能為空值…

C語言關鍵字

C語言do、while、for關鍵字—循環 C 語言中循環語句有三種:while 循環、do-while 循環、for 循環。while 循環:先判斷while 后面括號里的值,如果為真則執行其后面的代碼;否則不執行。while(1)表示死循環。…

C語言字符篇(五)內存函數

memcpy不可以把目的地址寫成本身但是memmove可以,因為它是先保存到臨時空間 #include <string.h> void *memcpy(void *dest, const void *src, size_t n);將內存src拷貝n個字符到內存destvoid *memmove(void *dest, const void *src, size_t n);將內存src的前n個數據拷貝…

GMQ交易平臺大力探索區塊鏈技術,進一步推動產業繁榮

近年來&#xff0c;區塊鏈技術作為金融科技的中堅力量&#xff0c;受到了產業界的熱切關注&#xff0c;其實驗開展和應用研發正在如火如荼的進行。 在此背景下&#xff0c;各地涌現出一大批優秀的企業投入到區塊鏈產業中&#xff0c;各類企業投融 資活動十分活躍&#xff0c;充…

java 筆試題

JAVA-2003筆試題 一、選擇題&#xff08;每小題2&#xff0c;共10分&#xff09; 下列語句序列執行后&#xff0c;m 的值是&#xff08; C &#xff09; int a10, b3, m5; if( ab ) ma; else ma*m; A.15 B.50 C.55 D.5若已定義byte[]x{11,22,33,-66}其中0≤k≤3&#xff0c;則…

objectdatasouce的溫故

在做ecxel的時候&#xff0c;需要前臺做一個聯動的效果。 記錄一下這個數據源的用法&#xff0c;大學時候用的&#xff0c;忘得差不多了 首先就是往頁面拖拽一個objectdatasouce的控件 然后配置數據源&#xff1a; 選擇業務對象(其實就是選擇你要用的哪個類&#xff0c;如果下拉…

都會五星回評,歡迎留下地址-博客之星

歡迎五星回評地址https://bbs.csdn.net/topics/603961857

jQuery核心

jQuery(selector) jQuery 的核心功能都是通過這個函數實現的。 jQuery中的一切都基于這個函數&#xff0c;或者說都是在以某種方式使用這個函數。這個函數最基本的用法就是向它傳遞一個表達式&#xff08;通常由 CSS 選擇器組成&#xff09;&#xff0c;然后根據這個表達式來查…