<span id="mktg5"></span>

<i id="mktg5"><meter id="mktg5"></meter></i>

        <label id="mktg5"><meter id="mktg5"></meter></label>
        最新文章專題視頻專題問答1問答10問答100問答1000問答2000關鍵字專題1關鍵字專題50關鍵字專題500關鍵字專題1500TAG最新視頻文章推薦1 推薦3 推薦5 推薦7 推薦9 推薦11 推薦13 推薦15 推薦17 推薦19 推薦21 推薦23 推薦25 推薦27 推薦29 推薦31 推薦33 推薦35 推薦37視頻文章20視頻文章30視頻文章40視頻文章50視頻文章60 視頻文章70視頻文章80視頻文章90視頻文章100視頻文章120視頻文章140 視頻2關鍵字專題關鍵字專題tag2tag3文章專題文章專題2文章索引1文章索引2文章索引3文章索引4文章索引5123456789101112131415文章專題3
        問答文章1 問答文章501 問答文章1001 問答文章1501 問答文章2001 問答文章2501 問答文章3001 問答文章3501 問答文章4001 問答文章4501 問答文章5001 問答文章5501 問答文章6001 問答文章6501 問答文章7001 問答文章7501 問答文章8001 問答文章8501 問答文章9001 問答文章9501
        當前位置: 首頁 - 科技 - 知識百科 - 正文

        編寫腳本令Xtrabackup對MySQL數據進行備份的教程_MySQL

        來源:懂視網 責編:小采 時間:2020-11-09 20:16:27
        文檔

        編寫腳本令Xtrabackup對MySQL數據進行備份的教程_MySQL

        編寫腳本令Xtrabackup對MySQL數據進行備份的教程_MySQL:Xtrabackup備份恢復原理 備份innodb表時,xtrabackup若干個線程拷貝獨立表空間的.ibd文件,并不停監視此過程中redo log的變化,添加到自己的事務日志文件(xtrabackup_logfile)中。在此過程中,發生的物理寫操作越多,xtrabackup_logfile
        推薦度:
        導讀編寫腳本令Xtrabackup對MySQL數據進行備份的教程_MySQL:Xtrabackup備份恢復原理 備份innodb表時,xtrabackup若干個線程拷貝獨立表空間的.ibd文件,并不停監視此過程中redo log的變化,添加到自己的事務日志文件(xtrabackup_logfile)中。在此過程中,發生的物理寫操作越多,xtrabackup_logfile
        Xtrabackup備份恢復原理
        備份innodb表時,xtrabackup若干個線程拷貝獨立表空間的.ibd文件,并不停監視此過程中redo log的變化,添加到自己的事務日志文件(xtrabackup_logfile)中。在此過程中,發生的物理寫操作越多,xtrabackup_logfile越大。在拷貝完成后的第一個prepare階段,xtrabackup采用類似于innodb崩潰恢復的方法,把數據文件恢復到與日志文件一致的狀態,并把未提交的事務回滾。如果同時需要備份myisam表以及innodb表結構等文件,那么就需要用flush tables with lock來獲得全局鎖,開始拷貝這些不再變化的文件,同時獲得binlog位置,拷貝結束后釋放鎖,也停止對redo log的監視。

        很多同學對上面的理解有混淆,以為拷貝.ibd文件就跟操作系統拷貝文件一樣。其實這里涉及到fractured page的問題,他應該會重新讀取(應該也有重試次數,超過后備份不成功)。

        其實這個原理很簡單,了解下doublewrite就可以理解了“本段摘錄自《MySQL技術內幕:InnoDB存儲引擎》”:
        如果說插入緩沖帶給InnoDB存儲引擎的是性能,那么兩次寫帶給InnoDB存儲引擎的是數據的可靠性。當數據庫宕機時,可能發生數據庫正在寫一個頁面,而這個頁只寫了一部分(比如16K的頁,只寫前4K的頁)的情況,我們稱之為部分寫失效(partial page write)。在InnoDB存儲引擎未使用double write技術前,曾出現過因為部分寫失效而導致數據丟失的情況。

        有人也許會想,如果發生寫失效,可以通過重做日志進行恢復。這是一個辦法。但是必須清楚的是,重做日志中記錄的是對頁的物理操作,如偏移量800,寫“aaaa”記錄。如果這個頁本身已經損壞,再對其進行重做是沒有意義的。這就是說,在應用(apply)重做日志前,我們需要一個頁的副本,當寫入失效發生時,先通過頁的副本來還原該頁,再進行重做,這就是doublewrite。


        一、下載和安裝
        XtraBackup現在最新版本為2.1.5,官方也提供了2.0的版本可供下載,官方鏈接地址:http://www.percona.com/software/percona-xtrabackup;可以下載源碼編譯安裝,也可以下載適合的RPM包或使用yum進行安裝。由于沒有需要特殊定制的,因此建議直接使用RPM安裝即可。

        安裝方法一:
        下載RPM安裝包:

        wget http://www.percona.com/downloads/XtraBackup/LATEST/RPM/rhel6/x86_64/percona-xtrabackup-2.1.5-680.rhel6.x86_64.rpm
        

        安裝依賴:

        [root@localhost ~]# yum install -y perl-DBD-MySQL perl-DBI perl-Time-HiRes libaio*

        安裝:

        [root@localhost ~]# rpm -ivh percona-xtrabackup-2.1.5-680.rhel6.x86_64.rpm 
        

        Preparing... ########################################### [100%] 
        1:percona-xtrabackup ########################################### [100%]
        
        

        安裝方法二:
        安裝percona源:

        [root@localhost ~]# rpm -Uhv http://www.percona.com/downloads/percona-release/percona-release-0.0-1.x86_64.rpm
        

        使用yum安裝percona-xtrabackup:

        [root@localhost ~]# yum -y install percona-xtrabackup
        

        查看安裝結果:

        [root@localhost ~]# rpm -qa |grep xtrabackup 
        

        percona-xtrabackup-2.1.5-680.rhel6.x86_64 
        

        [root@localhost ~]# rpm -ql percona-xtrabackup-2.1.5-680.rhel6.x86_64 
        

        /usr/bin/innobackupex 
        /usr/bin/innobackupex-1.5.1 
        /usr/bin/xbcrypt 
        /usr/bin/xbstream 
        /usr/bin/xtrabackup 
        /usr/bin/xtrabackup_55 
        /usr/bin/xtrabackup_56 
        /usr/share/doc/percona-xtrabackup-2.1.5 
        /usr/share/doc/percona-xtrabackup-2.1.5/COPYING
        
        

        Xtrabackup中主要包含兩個工具:
        xtrabackup:是用于熱備份innodb, xtradb表中數據的工具,不能備份其他類型的表,也不能備份數據表結構;

        innobackupex:是將xtrabackup進行封裝的perl腳本,提供了備份myisam表的能力。

        二、備份腳本

        #!/bin/sh
        #===================================================================================================
        ## 備份工具:
        ## percona-xtrabackup-2.2.6
        ##
        ## 備份策略:
        ## (1)、每天凌晨04:20點進行全量備份一次;
        ## (2)、每隔1小時增量備份一次;
        ##
        #===================================================================================================
        PATH=/sbin:/bin:/usr/sbin:/usr/bin:/usr/local/bin:/usr/local/sbin
         
        ## DB備份基路徑
        BACKUP_BASE_DIR="/data/mysql_backup"
         
        ## 增量備份時,用到的基準目錄列表文件
        ## 內容格式:基準目錄|本次備份目錄|備份類型【full|inc】
        INC_BASE_LIST="${BACKUP_BASE_DIR}/incremental_basedir_list.txt"
         
        ## 備份工具路徑
        XTRABACKUP_PATH="/usr/local/xtrabackup/bin/innobackupex"
         
        ## MySQL配置路徑
        MYSQL_CNF_PATH="/etc/my.cnf"
         
        ## 線程數
        THREAD_CNT=6
         
        #===================================================================================================
        function print_help_info()
        {
         echo "--------------------------------------------------------------"
         echo "Usage: $0 full | inc | help"
         echo "--------------------------------------------------------------"
         echo ""
         exit 1
        }
         
        [[ $# -lt 1 ]] && print_help_info
        [[ -d ${BACKUP_BASE_DIR} ]] || mkdir -p ${BACKUP_BASE_DIR}
         
        ## xtrabackup基礎套件不存在時,進行自動下載安裝
        if [[ ! -e ${XTRABACKUP_PATH} ]]; then
         cd /usr/local
         wget -q -O xtrabackup-2.2.6.tgz http://www.percona.com/redir/downloads/XtraBackup/LATEST/binary/tarball/percona-xtrabackup-2.2.6-5042-Linux-x86_64.tar.gz
         tar xvzf xtrabackup-2.2.6.tgz >/dev/null 2>&1 && rm -f xtrabackup-2.2.6.tgz
         mv percona-xtrabackup-2.2.6-Linux-x86_64 xtrabackup-2.2.6
         rm -rf xtrabackup && ln -s xtrabackup-2.2.6 xtrabackup
         
         for FNAME in `ls -1t /usr/local/xtrabackup/bin`
         do
         rm -f /usr/bin/${FNAME} && ln -s /usr/local/xtrabackup/bin/${FNAME} /usr/bin/${FNAME}
         done
        fi
         
        ## 只允許一個副本運行,以避免全量備份與增量備份出現交叉,發生數據錯亂的可能性
        ##[[ -n `ps uax | grep innobackupex | grep -v grep` ]] && exit 1
         
        ## 目錄名默認精確到分鐘,為避免意外情況,導致備份任務失敗,可以精確到秒
        CURRENT_BAK_PATH="${BACKUP_BASE_DIR}/"`date +%F_%H-%M`
        [[ -d ${CURRENT_BAK_PATH} ]] && CURRENT_BAK_PATH="${BACKUP_BASE_DIR}/"`date +%F_%H-%M-%S`
         
        #===================================================================================================
        ## 全量備份
        if [[ "$1" == "full" ]]; then
         ${XTRABACKUP_PATH} --user=root --defaults-file=${MYSQL_CNF_PATH} --parallel=${THREAD_CNT} --no-timestamp ${CURRENT_BAK_PATH}
         echo "NULL|${CURRENT_BAK_PATH}|full" >> ${INC_BASE_LIST}
         
        ## 增量備份
        elif [[ "$1" == "inc" ]]; then
         ## 基準目錄列表文件不存在或者為空的情況,需要做一次全量備份
         if [[ ! -f ${INC_BASE_LIST} || `sed '/^$/d' ${INC_BASE_LIST} | wc -l` -eq 0 ]]; then
         ${XTRABACKUP_PATH} --user=root --defaults-file=${MYSQL_CNF_PATH} --parallel=${THREAD_CNT} --no-timestamp ${CURRENT_BAK_PATH}
         echo "NULL|${CURRENT_BAK_PATH}|full" >> ${INC_BASE_LIST}
         
         ## 不存在任何目錄的情況,需要做一次全量備份,以避免增量備份失敗
         elif [[ `find ${BACKUP_BASE_DIR} -maxdepth 1 -type d | wc -l` -eq 1 ]]; then
         ${XTRABACKUP_PATH} --user=root --defaults-file=${MYSQL_CNF_PATH} --parallel=${THREAD_CNT} --no-timestamp ${CURRENT_BAK_PATH}
         echo "NULL|${CURRENT_BAK_PATH}|full" >> ${INC_BASE_LIST}
         
         ## 在上一次備份的基礎上,進行增量備份
         else
         PREV_BACKUP_DIR=`sed '/^$/d' ${INC_BASE_LIST} | tail -1 | awk -F '|' '{print $2}'`
         ## 上次的備份目錄不存在或者目錄為空的情況,以避免人為刪除的可能性【針對部分惡意刪除的情況,目前還沒有較好的檢查方法】
         if [[ ! -d ${PREV_BACKUP_DIR} || -z `ls ${PREV_BACKUP_DIR}` ]]; then
         ${XTRABACKUP_PATH} --user=root --defaults-file=${MYSQL_CNF_PATH} --parallel=${THREAD_CNT} --no-timestamp ${CURRENT_BAK_PATH}
         echo "NULL|${CURRENT_BAK_PATH}|full" >> ${INC_BASE_LIST}
         else
         ${XTRABACKUP_PATH} --user=root --defaults-file=${MYSQL_CNF_PATH} --parallel=${THREAD_CNT} --no-timestamp --incremental ${CURRENT_BAK_PATH} --incremental-basedir=${PREV_BACKUP_DIR}
         echo "${PREV_BACKUP_DIR}|${CURRENT_BAK_PATH}|inc" >> ${INC_BASE_LIST}
         fi
         fi
         
        elif [[ "$1" == "help" ]]; then
         print_help_info
         
        else
         print_help_info
        fi
         
        ## 刪除2周前的數據備份
        rm -rf ${BACKUP_BASE_DIR}/`date -d '14 days ago' +'%F'`_*
        sed -i "/`date -d '14 days ago' +'%F'`/d" ${INC_BASE_LIST}
         
        #===================================================================================================
        ##The End
         
        ####################################################################################################
        ## 需要添加的crontab信息:
        ## (1)、全量備份
        ## 20 04 * * * /data/scripts/mysql_backup.sh full >/dev/null 2>&1
        ##
        ## (2)、增量備份
        ## 00 * * * * /data/scripts/mysql_backup.sh inc >/dev/null 2>&1
        ##
        ####################################################################################################
         
        ####################################################################################################
        ## DB數據恢復步驟:
        ## (1)、應用基準
        ## innobackupex --user=root --defaults-file=/etc/my.cnf --use-memory=8G --apply-log --redo-only /data/mysql_backup/full
        ##
        ## (2)、應用第一個增量備份
        ## innobackupex --user=root --defaults-file=/etc/my.cnf --use-memory=8G --apply-log --redo-only /data/mysql_backup/full --incremental-dir=/data/mysql_backup/inc_one
        ##
        ## (3)、應用第二個增量備份
        ## innobackupex --user=root --defaults-file=/etc/my.cnf --use-memory=8G --apply-log /data/mysql_backup/full --incremental-dir=/data/mysql_backup/inc_two
        ##
        ## (4)、再次應用基準
        ## innobackupex --user=root --defaults-file=/etc/my.cnf --use-memory=8G --apply-log /data/mysql_backup/full
        ##
        ## (5)、恢復
        ## innobackupex --user=root --defaults-file=/etc/my.cnf --copy-back /data/mysql_backup/full
        ####################################################################################################
        

        三、效果展示

        2015129164153028.jpg (505×180)

        2015129164226725.jpg (388×157)

        2015129164242929.jpg (588×141)

        聲明:本網頁內容旨在傳播知識,若有侵權等問題請及時與本網聯系,我們將在第一時間刪除處理。TEL:177 7030 7066 E-MAIL:11247931@qq.com

        文檔

        編寫腳本令Xtrabackup對MySQL數據進行備份的教程_MySQL

        編寫腳本令Xtrabackup對MySQL數據進行備份的教程_MySQL:Xtrabackup備份恢復原理 備份innodb表時,xtrabackup若干個線程拷貝獨立表空間的.ibd文件,并不停監視此過程中redo log的變化,添加到自己的事務日志文件(xtrabackup_logfile)中。在此過程中,發生的物理寫操作越多,xtrabackup_logfile
        推薦度:
        標簽: 備份 教程 數據庫
        • 熱門焦點

        最新推薦

        猜你喜歡

        熱門推薦

        專題
        Top
        主站蜘蛛池模板: 手机看片国产免费永久| 波多野结衣亚洲一级| 欧洲乱码伦视频免费国产 | 亚洲A∨精品一区二区三区下载| 国产精品免费精品自在线观看| 亚洲AV第一页国产精品| 91大神免费观看| 亚洲午夜精品在线| 成年女人毛片免费视频| 亚洲av无码无线在线观看| 国产中文字幕免费观看| 日韩少妇内射免费播放| 亚洲毛片αv无线播放一区| 精品国产免费一区二区三区香蕉 | 亚洲精品第一国产综合境外资源| 国产精品亚洲综合网站| 亚洲人成网站色在线入口| 久久精品免费大片国产大片| 国产亚洲人成无码网在线观看| 免费A级毛片av无码| 中文字幕乱码亚洲无线三区 | 亚洲男人的天堂在线播放| 91精品免费在线观看| 亚洲国产精品无码久久98| 亚洲国产午夜中文字幕精品黄网站| 精品熟女少妇aⅴ免费久久| 久久亚洲精品成人| 99精品全国免费观看视频| 羞羞漫画页面免费入口欢迎你| 国产亚洲一区二区在线观看| 亚洲天堂免费在线| 新最免费影视大全在线播放| 亚洲天堂视频在线观看| 青青草国产免费久久久下载| 一级有奶水毛片免费看| 亚洲一级毛片中文字幕| 亚洲第一黄片大全| 免费看片在线观看| 一级毛片a免费播放王色电影| 亚洲精品亚洲人成在线观看麻豆 | 国产jizzjizz视频免费看|