MySQL 全量及增量備份,基於xtrabackup 2.3.5

来源:http://www.cnblogs.com/jusonsummer/archive/2016/08/21/5793811.html
-Advertisement-
Play Games

昨天一個pgp加密盤壞了,東西全丟了。。。,我的筆記啊!我咋怎麼2呢。。 備份個腳本吧,方便以後手機查看,話說我都快忘記帳號密碼了 備註:腳步恢復時只能恢復到備份前的狀態,如果需要恢復到當前狀態,還需配合binlog,睡覺就這樣 ...


昨天一個pgp加密盤壞了,東西全丟了。。。,我的筆記啊!我咋怎麼2呢。。

備份個腳本吧,方便以後手機查看,話說我都快忘記帳號密碼了

備註:腳步恢復時只能恢復到備份前的狀態,如果需要恢復到當前狀態,還需配合binlog,睡覺就這樣

#!/bin/sh  

####################################################
#  AUTHOR          :             JusonSummer       #
#  VERSION         :               V1.0.0          #
#  DATE            :              2016-08-13       #
#  CORPORATION     :              FiberHome        #
####################################################

#基於xtrabackup 2.3.5  
#星期四,星期日全備,其他工作日每天一次增量備份,手動執行可通過設置WEEK_NUM來確定是增量還是全量

for i in /etc/profile.d/*.sh;
do
  if [ -r "$i" ]; then
    . $i
  fi
done
if [ -f /root/.bash_profile ]; then
  . /root/.bash_profile
fi

      
INNOBACKUPEX=innobackupex                    #INNOBACKUPEX的命令  
  
#mysql目標伺服器以及備份用戶及密碼  
MYSQL_USER=root
MYSQL_PASSWORD=root
MYSQL_HOST=localhost
MYSQL_PORT=3306  
MY_CNF=/etc/my.cnf 
MYSQL_CMD=" --user=$MYSQL_USER --password=$MYSQL_PASSWORD --host=$MYSQL_HOST --port=$MYSQL_PORT"  
  
TMP_LOG="/var/log/backup.$$.log"               # $$當前shell進程號
BACKUP_DIR=/mysql_backup                       # 備份的主目錄   
FULLBACKUP_DIR=$BACKUP_DIR/full                # 全庫備份的目錄   
INCRBACKUP_DIR=$BACKUP_DIR/incre               # 增量備份的目錄  
BACKUP_LOG_DIR=$BACKUP_DIR/log                 # 備份日誌的目錄
LOGFILE_NAME=backup_`date +%Y%m%d%H%M%S`.log   # 備份日誌文件名

#星期
WEEK_NUM=`date +%w` 
#WEEK_NUM=0

#新建全備和差異備份的目錄  
  
mkdir -p $FULLBACKUP_DIR  
mkdir -p $INCRBACKUP_DIR 
mkdir -p $BACKUP_LOG_DIR 

#colour level
SETCOLOR_SUCCESS="echo -en \\033[1;32m"
SETCOLOR_FAILURE="echo -en \\033[1;31m"
SETCOLOR_WARNING="echo -en \\033[1;33m"
SETCOLOR_NORMAL="echo -en \\033[0;39m"

#日誌輸出函數
LogMsg()
{
        time=`date "+%D %T"`
        echo "[$time] : INFO    : $*"
		echo "[$time] : INFO    : $*" >>$BACKUP_LOG_DIR/$LOGFILE_NAME
        $SETCOLOR_NORMAL
}

LogWarnMsg()
{
        time=`date "+%D %T"`
        $SETCOLOR_WARNING
        echo "[$time] : WARN    : $*"
        $SETCOLOR_NORMAL
}

LogSucMsg()
{
        time=`date "+%D %T"`
        $SETCOLOR_SUCCESS
        echo "[$time] : SUCCESS : $*"
		echo "[$time] : SUCCESS : $*" >>$BACKUP_LOG_DIR/$LOGFILE_NAME
        $SETCOLOR_NORMAL
}

LogErrorMsg()
{
        time=`date "+%D %T"`
        $SETCOLOR_FAILURE
        echo "[$time] : ERROR   : $*"
        $SETCOLOR_NORMAL
}
   
# 檢查innobackupex錯誤輸出
check_innobackupex_fail()
{
    #保留一份備份的詳細日誌
    cat $TMP_LOG>>$BACKUP_LOG_DIR/$LOGFILE_NAME 
	if [ -z "`tail -2 $TMP_LOG | grep 'completed OK!'`" ] ; then
    LogErrorMsg "$INNOBACKUPEX命令執行失敗" 
    rm -f $TMP_LOG
	LogErrorMsg "錯誤日誌請查看 $BACKUP_LOG_DIR/$LOGFILE_NAME"
    exit 1
  fi
}

   
# 選項檢測
$INNOBACKUPEX -v  
if [ `echo $?` -ne 0 ]; then  
    LogErrorMsg "$INNOBACKUPEX命令不存在,請確認是否安裝xtrabackup或環境變數是否配置" 
    exit 1  
fi       
  
PORTNUM00=`netstat -lnt|grep ${MYSQL_PORT}|wc -l`
if [ $PORTNUM00 = 0  ];
then
    LogErrorMsg "MySQL處於關閉狀態,請打開MySQL."
    exit 1
fi	  
  
if ! `echo 'exit' | mysql -s $MYSQL_CMD --show-warnings=false` ; then  
    LogErrorMsg "資料庫的用戶名、密碼、主機名或埠中存在錯誤配置!"
    exit 1 
fi  
  

  
# 備份的頭部信息   
LogMsg "----------------------------------------------"   
LogMsg "$0: MySQL備份腳本"  
LogMsg "----------------------------------------------"  
LogMsg "開始於: `date +%F' '%T`"   
     
    
#查找最新的完全備份文件夾(不包括父級目錄)  
LATEST_FULL_BACKUP=`find $FULLBACKUP_DIR -mindepth 1 -maxdepth 1 -type d -printf "%P\n" | sort -nr | head -1`  

  
# 查找最最新全庫備份時間,日期格式:2016-07-20
LATEST_FULL_BACKUP_CREATED_DATE=`stat -c %y $FULLBACKUP_DIR/$LATEST_FULL_BACKUP | cut -c 1-10`  
  
  
#星期一,星期二,星期三,星期五,星期六執行增量備份  
if [ $WEEK_NUM -eq 1 -o $WEEK_NUM -eq 2 -o $WEEK_NUM -eq 3 -o $WEEK_NUM -eq 5 -o $WEEK_NUM -eq 6 ] ; then 
    LogMsg  "************************************"  
    LogMsg  "正在執行增量備份...請稍等..."  
    LogMsg  "************************************"
    
	#無全備時,需先做全備
	if [ -z $LATEST_FULL_BACKUP ] ; then
        LogErrorMsg "伺服器還沒有做過全備份,請根據安裝文檔先做一次全備!"
	    exit 1
    fi 
    	
    # 以最新的全備目錄名在增量備份目錄下新建目錄  
    LogMsg "增量備份放在$INCRBACKUP_DIR/$LATEST_FULL_BACKUP目錄下"    
    NEW_INCRDIR=$INCRBACKUP_DIR/$LATEST_FULL_BACKUP  
    mkdir -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 ] ; then  
            INCRBASEDIR=$FULLBACKUP_DIR/$LATEST_FULL_BACKUP  
            LogMsg "增量備份將以$INCRBASEDIR備份集作為備份基礎"   
        else  
            INCRBASEDIR=$INCRBACKUP_DIR/$LATEST_FULL_BACKUP/$LATEST_INCR_BACKUP
            LogMsg "增量備份將以$INCRBASEDIR備份集作為備份基礎"  
        fi  
   
    $INNOBACKUPEX --defaults-file=$MY_CNF $MYSQL_CMD --incremental $NEW_INCRDIR --incremental-basedir $INCRBASEDIR > $TMP_LOG 2>&1  
	check_innobackupex_fail
  
    LogMsg "資料庫成功增量備份到:$NEW_INCRDIR"  
	
#星期四,星期日執行全量備份 
elif [ $WEEK_NUM -eq 0 -o $WEEK_NUM -eq 4 ] ; then 
    LogMsg  "************************************"  
    LogMsg  "正在執行全新的完全備份...請稍等..."  
    LogMsg  "************************************"  
	
    $INNOBACKUPEX --defaults-file=$MY_CNF $MYSQL_CMD $FULLBACKUP_DIR> $TMP_LOG 2>&1   
    check_innobackupex_fail
  
    LogMsg "資料庫成功全量備份到:$FULLBACKUP_DIR"    
fi  
  
 
#刪除過期的全量備份以及增量備份,過期時間為7天 
  
LogMsg "尋找過期的備份文件...請稍等..."   

EXPIRE_FILE=`find $FULLBACKUP_DIR/ -mindepth 1 -maxdepth 1 -type d -mtime +7 -printf "%P\t" ` 

if [ -z "$EXPIRE_FILE" ];then   
    LogMsg "未找到可以刪除的過期備份文件" 
else
    for efile in `find $FULLBACKUP_DIR/ -mindepth 1 -maxdepth 1 -type d -mtime +7 -printf "%P\n"` 
    do  
        LogMsg "刪除過期全備文件:$efile"
	    rm -rf $FULLBACKUP_DIR/$efile
		LogMsg "刪除過期增量備份文件:$efile"
        rm -rf $INCRBACKUP_DIR/$efile 	
    done 
fi
	 
LogSucMsg "備份完成於: `date +%F' '%T' '`"  
exit 0  

  


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 我們需要監聽ScroView的滑動情況,比如滑動了多少距離,是否滑到佈局的頂部或者底部。可惜的是SDK並沒有相應的方法,不過倒是提供了一個 顯然這個方法是不能被外界調用的,因此就需要把它暴露出去,解決方式就是寫一個介面 然後重寫ScrollView類,給它提供上面寫的回調介面 佈局時,用重寫的這個S ...
  • Swift - 多個mask的動畫效果 效果 源碼 https://github.com/YouXianMing/Swift-Animations ...
  • RT 1.effective_prio函數計算進程的動態優先順序。 普通進程除了靜態優先順序,還有動態優先順序,其值的範圍是100(最高優先順序)~139(最低優先順序)。動態優先順序是調度程式在選擇新進程來運行的時候使用的數。它與靜態優先順序的關係用下麵的經驗公式表示: bonus是範圍從0-10的值,值小於5 ...
  • 該系列教程概述與目錄:http://www.cnblogs.com/chengyujia/p/5787111.html 一、知識點講解 當我們點擊系統自帶的按鈕時,按鈕的外觀會發生變化。上篇博文中我們畫了一個三角形按鈕,但點擊還不能變色,下麵我們就來實現點擊變色功能。從知識體繫上我們需要瞭解以下兩個 ...
  • 最近經過實際試驗,總結了InputType幾個常用取值表示的含義: 1、none, text, textVisiblePassword: 無任何輸入限制 2、textMultiLine: 允許多行輸入(預設EditText只允許單行輸入,即不換行) 3、textPassword: 無任何輸入限制,但 ...
  • 3、可能很多小伙伴是綠色的進入註冊表沒有ORACLE這個選項這就令人非常頭疼了。因為可能是32位的原因,你到註冊表的下麵看看HKEY_LOCAL_MACHINE->SOFTWARE->Wow6432Node看看有沒有ORACLE選項,如果還沒有那咱就添加一個;代碼如下建立二個尾碼名為AMERICAN ...
  • 前提 本文僅討論SQL Server查詢時, 對於非複合統計信息,也即每個欄位的統計信息只包含當前列的數據分佈的情況下, 在用多個欄位進行組合查詢的時候,如何根據統計信息去預估行數的。 利用不同欄位的統計信息做數據行數預估的演算法原理,以及SQL Server 2012和SQL Server 2014 ...
  • 一、前言 從20世紀90年代數字化醫院概念提出到至今的20多年時間,數字化醫院(Digital Hospital)在國內各大醫院飛速的普及推廣發展,並取得驕人成績。不但有數字化醫院管理信息系統(HIS)、影像存檔和通信系統(PACS)、電子病歷系統(EMR)和區域醫療衛生服務(GMIS)等成功實施與 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...