婷婷综合国产,91蜜桃婷婷狠狠久久综合9色 ,九九九九九精品,国产综合av

主頁 > 知識庫 > MySQL如何使用使用Xtrabackup進行備份和恢復

MySQL如何使用使用Xtrabackup進行備份和恢復

熱門標簽:話務外呼系統怎么樣 云南電商智能外呼系統價格 400電話可以辦理嗎 外東北地圖標注 大眾點評星級酒店地圖標注 高清地圖標注道路 智能外呼系統復位 拉卡拉外呼系統 臨清電話機器人

1 備份

進行備份前需要先創建備份用戶,直接使用 root 用戶進行備份也行,但是這樣不太規范。

    create user backup@'localhost' identified by '123456';
    grant reload,process,lock tables,replication client on *.* to backup@localhost;

1.1 全備

備份整個庫,使用的是備份用戶,備份文件存放地址為 /backup/

    innobackupex --defaults-file=/etc/my.cnf --user=backup --password=123456 /backup/

1.2 增備

指定為增量備分,使用的是備份用戶,增量的基礎為上一次的全備,已經使用 --incremental-basedir 進行指定了,備份后存放的文件為 /backup/

    innobackupex --defaults-file=/etc/my.cnf --user=backup --password=123456 --incremental --incremental-basedir=/backup/2021-06-01_14-44-54 /backup/

2 備份恢復

2.1 準備數據

回滾未提交的事務及同步已經提交的事務至數據文件使數據文件處于一致性狀態

    innobackupex --apply-log --redo-only /backup/2021-06-01_14-44-54/

2.2 進行恢復

在恢復前,需要確保 MySQL 的數據目錄為已經刪除了。

    innobackupex --copy-back --datadir=/usr/local/mysql/data /backup/2021-06-01_14-44-54/

恢復后,需要對 MySQL 的data 目錄進行重新賦權:

    chown -R mysql:mysql data/

到這恢復就完成了。

3 目錄結構

4 備份腳本

4.1 腳本

backup.sh

    #!/bin/bash
    # 獲得程序路徑名
    program_dir=`dirname $0`/..
    # 讀取配置文件中的所有變量值, 設置為全局變量
    # 配置文件
    conf_file="$program_dir/conf/backup.conf"
    # mysql 用戶
    user=`sed '/^user=/!d;s/.*=//' $conf_file`
    # mysql 密碼
    password=`sed '/^password=/!d;s/.*=//' $conf_file`
    # mysql 備份目錄
    backup_dir=`sed '/^backup_dir=/!d;s/.*=//' $conf_file`
    # mysql 備份壓縮打包目錄
    gzip_dir=`sed '/^gzip_dir=/!d;s/.*=//' $conf_file`
    # percona-xtrabackup命令xtrabackup路徑
    xtrabackup_bin=`sed '/^xtrabackup_bin=/!d;s/.*=//' $conf_file`
    # mysql 全備前綴標識
    full_backup_prefix=`sed '/^full_backup_prefix=/!d;s/.*=//' $conf_file`
    # mysql 增量備前綴標識
    increment_prefix=`sed '/^increment_prefix=/!d;s/.*=//' $conf_file`
    # 備份錯誤日志文件
    error_log=$program_dir/var/`sed '/^error_log=/!d;s/.*=//' $conf_file`
    # 備份索引文件
    index_file=$program_dir/var/`sed '/^index_file=/!d;s/.*=//' $conf_file`
    # 備份日期
    backup_date=`date +%F`
    # 備份時間
    backup_time=`date +%H-%M-%S`
    # 備份時的周幾
    backup_week_day=`date +%u`
    # 創建相關目錄
    log_dir=$program_dir/log/backup
    var_dir=$program_dir/var
    mkdir -p $backup_dir
    mkdir -p $log_dir
    mkdir -p $var_dir
    mkdir -p $gzip_dir
    # 全量備份
    function full_backup() {
      backup_folder=${full_backup_prefix}_${backup_date}_${backup_time}_${backup_week_day}
      mkdir -p $backup_dir/$backup_folder
      $xtrabackup_bin \

        --user=$user \

        --password=$password \

        --backup \

        --target-dir=$backup_dir/$backup_folder > $log_dir/${backup_folder}.log 2>1
      return $?
    }
    # 增量備份
    function increment_backup() {
      backup_folder=${increment_prefix}_${backup_date}_${backup_time}_${backup_week_day}
      incr_base_folder=`sed -n '$p' $index_file | \

                       awk -F '[, {}]*' '{print $3}' | \

                       awk -F ':' '{print $2}'`
      mkdir -p $backup_dir/$backup_folder
      $xtrabackup_bin \

        --user=$user \

        --password=$password \

        --backup \

        --target-dir=$backup_dir/$backup_folder \

        --incremental-basedir=$backup_dir/$incr_base_folder > $log_dir/${backup_folder}.log 2>1
      return $?
    }
    # 刪除之前的備份(一般在全備完成后使用)
    function delete_before_backup() {
      cat $index_file | awk -F '[, {}]*' '{print $3}' | \

        awk -v backup_dir=$backup_dir -F ':' '{if($2!=""){printf("rm -rf %s/%s\n", backup_dir, $2)}}' | \

        /bin/bash
      cat $index_file | awk -F '[, {}]*' '{print $3}' | \

        awk -v gzip_dir=$gzip_dir -F ':' '{if($2!=""){printf("rm -rf %s/%s\n", gzip_dir, $2)}}' | \

        /bin/bash
      cat $index_file | awk -F '[, {}]*' '{print $3}' | \

        awk -v log_dir=$log_dir -F ':' '{if($2!=""){printf("rm -rf %s/%s.log\n", log_dir, $2)}}' | \

        /bin/bash
    }
    # 備份索引文件
    function backup_index_file() {
      cp $index_file ${index_file}_$(date -d "1 day ago" +%F)
    }
    # 備份索引文件
    function send_index_file_to_remote() {
      # ./expect_scp ip地址 賬號 密碼  ${index_file} 目標服務器存放的文件夾 端口號 
      echo 'send index file ok'
    }
    # 添加索引, 索引記錄了當前最新的備份
    function append_index_to_file() {
      echo "{week_day:$backup_week_day, \

             dir:${1}_${backup_date}_${backup_time}_${backup_week_day}, \

             type:${1}, \

             date:${backup_date}}" >> $index_file
    }
    # 記錄錯誤消息到文件
    function logging_backup_err() {
      echo "{week_day:$backup_week_day, \

             dir:${1}_${backup_date}_${backup_time}_${backup_week_day}, \

             type:${1}, \

             date:${backup_date}}" >> $error_log
    }
    # 清空索引
    function purge_index_from_file() {
      > $index_file
    }
    # 清空錯誤日志信息
    function purge_err_log() {
      > $error_log
    }
    # 打包備份
    function tar_backup_file() {
      cd $backup_dir
      tar -jcf ${gzip_dir}/${1}_${backup_date}_${backup_time}_${backup_week_day}.tar.bz2 \

               ${1}_${backup_date}_${backup_time}_${backup_week_day}
      cd - > /dev/null
      rm -rf ${backup_dir}/${1}_${backup_date}_${backup_time}_${backup_week_day}
    }
    # 發送備份到遠程
    function send_backup_to_remote() {
      #  ./expect_scp ip地址 賬號 密碼 ${gzip_dir}/${1}_${backup_date}_${backup_time}_${backup_week_day}.tar.bz2 目標服務器存放的文件夾 端口號 
      echo "send $1 remote ok"
    }
    # 判斷是應該全備還是增量備份
    # 0:full, 1:incr
    function get_backup_type() {
      backup_type=0
      if [ 1 -eq `date +%H` ]; then
        backup_type=0
      else
        backup_type=1
      fi
      touch $index_file
      if [ ! -n "`cat $index_file`" ]; then
        backup_type=0
      fi
      return $backup_type
    }
    # 測試配置文件正確性
    function test_conf_file() {
      # 判斷每個變量是否在配置文件中有配置,沒有則退出程序
      if [ ! -n "$user" ]; then echo 'fail: configure file user not set'; exit 2; fi
      if [ ! -n "$password" ]; then echo 'fail: configure file password not set'; exit 2; fi
      if [ ! -n "$backup_dir" ]; then echo 'fail: configure file backup_dir not set'; exit 2; fi
      if [ ! -n "$gzip_dir" ]; then echo 'fail: configure file backup_dir not set'; exit 2; fi
      if [ ! -n "$full_backup_prefix" ]; then echo 'fail: configure file full_backup_prefix not set'; exit 2; fi
      if [ ! -n "$increment_prefix" ]; then echo 'fail: configure file increment_prefix not set'; exit 2; fi
      if [ ! -n "$error_log" ]; then echo 'fail: configure file error_log not set'; exit 2; fi
      if [ ! -n "$index_file" ]; then echo 'fail: configure file index_file not set'; exit 2; fi
    }
    # 執行
    function main() {
      # 檢測配置文件值
      test_conf_file
      # 判斷是執行全備還是增量備份
      get_backup_type
      backup_type=$?
      case $backup_type in
        0 )
          # 全量備份
          full_backup
          backup_ok=$?
          if [ 0 -eq "$backup_ok" ]; then
          # 全備成功
            # 打包最新備份
            tar_backup_file $full_backup_prefix
            # # 將tar備份發送到遠程
            send_backup_to_remote $full_backup_prefix
            # 備份索引文件
            backup_index_file
            # 清除之前的備份
            delete_before_backup
            # 清除索引文件
            purge_index_from_file
            # 添加索引, 索引記錄了當前最新的備份
            append_index_to_file $full_backup_prefix
            # 發送索引文件到遠程
            send_index_file_to_remote
          else
          # 全備失敗
            # 刪除備份目錄
            rm -rf ${backup_dir}/${full_backup_prefix}_${backup_date}_${backup_time}_${backup_week_day}
            # 記錄錯誤日志
            logging_backup_err $full_backup_prefix
          fi
          ;;
        1 )
          # 增量備份
          increment_backup
          backup_ok=$?
          if [ "$backup_ok" -eq 0 ]; then
          # 增量備份成功
            # 打包最新備份
            tar_backup_file $increment_prefix
            # # 將tar備份發送到遠程
            send_backup_to_remote $increment_prefix
            # 添加索引, 索引記錄了當前最新的備份
            append_index_to_file $increment_prefix
            # # 發送索引文件到遠程
            send_index_file_to_remote
          else
          # 增量備份失敗
            # 刪除備份目錄
            rm -rf ${backup_dir}/${increment_prefix}_${backup_date}_${backup_time}_${backup_week_day}
            # 記錄錯誤日志
            logging_backup_err $increment_prefix
          fi
          ;;
      esac
    }
    main

4.2 配置文件

backup.conf

    # mysql 用戶名
    user=backup
    # mysql 密碼
    password=123456
    # 備份路徑
    backup_dir=/data/backup
    # 備份壓縮打包目錄
    gzip_dir=/data/backups/backups_zip
    # innobackupex 命令路徑
    xtrabackup_bin=/opt/xtrabackup/bin/xtrabackup
    # 全量備信息名稱 前綴
    full_backup_prefix=full
    # 增量備信息名稱 前綴
    increment_prefix=incr
    # 錯誤日志文件(根據此文件知道備份是否成功)
    # format:
    # {week_day:1,dir:full/incr_2015-12-29_00-00-00_7,type:full/incr,date:2015-12-30}
    error_log=mysql_increment_hot_backup.err
    # 索引文件
    # format:
    # {week_day:1,dir:full/incr_2015-12-29_00-00-00_7,type:full/incr,date:2015-12-30}
    index_file=mysql_increment_hot_backup.index

5 恢復腳本

5.1 腳本

restore.sh

    #!/bin/bash
    # 獲得程序路徑名
    program_dir=`dirname $0`/..
    # 讀取配置文件中的所有變量值, 設置為全局變量
    # 配置文件
    conf_file="$program_dir/conf/restore.conf"
    # MySQL 數據文件夾
    data_dir=`sed '/^data_dir=/!d;s/.*=//' $conf_file`
    # 備份索引文件路徑
    backup_index_file=`sed '/^backup_index_file=/!d;s/.*=//' $conf_file`
    # percona-xtrabackup命令xtrabackup路徑
    xtrabackup_bin=`sed '/^xtrabackup_bin=/!d;s/.*=//' $conf_file`
    # 備份文件目錄
    backup_restore_dir=`sed '/^backup_restore_dir=/!d;s/.*=//' $conf_file`
    # 檢查配置文件正確性
    function exam_conf_file() {
        # 判斷每個變量是否在配置文件中有配置,沒有則退出程序
        if [ ! -n "$data_dir" ]; then echo 'fail: configure file data_dir not set'; exit 2; fi
        if [ ! -n "$backup_index_file" ]; then echo 'fail: configure file backup_index_file not set'; exit 2; fi
        if [ ! -n "$xtrabackup_bin" ]; then echo 'fail: configure file xtrabackup_bin not set'; exit 2; fi
        if [ ! -n "$backup_restore_dir" ]; then echo 'fail: configure file backup_restore_dir not set'; exit 2; fi
    }
    # 檢查備份文件是否是壓縮格式
    function exam_backup_restore_file(){
        file_backup_restore_name_arr=`ls $backup_restore_dir`
        for file_name in $file_backup_restore_name_arr;do
            if [ "${file_name##*.}"x = "bz2"x ];then
                tar -jxf $backup_restore_dir/$file_name -C $backup_restore_dir
                rm -rf $backup_restore_dir/$file_name
            fi

        done
    }
    # 檢查 MySQL 是否停止
    function exam_mysql_is_stop(){
        if [ 0 -eq `ps -ef | grep mysql | grep -v grep | wc -l` ]; then
            echo "MySQL 服務已停止"
        else
            /etc/init.d/mysqld stop
            echo "正在停止 MySQL 服務"
            sleep 3
            echo "已停止 MySQL 服務"
        fi
    }
    # 檢查 MySQL data 文件是否刪除
    function exam_data_is_del(){
        if [ -d $data_dir ];then
            echo "正在刪除 MySQL 的data文件"
            rm -rf $data_dir
        else
            echo "MySQL 的數據文件已刪除 "
        fi
    }
    # 讀取備份索引文件
    function read_backup_index() {
        cat $backup_index_file | awk '{print $2}' | awk -F: '{print $2}' | awk '{sub(/.$/,"")}1'
    }
    # 準備全備文件
    function ready_full(){
        full_file_name=`echo ${1} | awk '{print $1}'`
        $xtrabackup_bin/innobackupex \

            --apply-log \

            --redo-only \

            $backup_restore_dir/$full_file_name

        echo "全備文件已準備好"
    }
    # 準備增備文件
    function ready_incr(){
        backup_index=$(read_backup_index)
        full_file_name=`echo $backup_index | awk '{print $1}'`
        for file_name in $backup_index;do
            if [ 1 -eq `echo "$file_name" | grep incr | wc -l` ]; then 
                $xtrabackup_bin/innobackupex \

                    --apply-log \

                    --redo-only \

                    $backup_restore_dir/$full_file_name \

                    --incremental-dir=$backup_restore_dir/$file_name
            fi
        done
        echo "增備文件已準備好"
    }
    # 執行備份恢復
    function exec_backup_restore(){
        echo "開始進行備份恢復"
        full_file_name=`echo ${1} | awk '{print $1}' `
        $xtrabackup_bin/innobackupex \

            --copy-back \

            --datadir=$data_dir \

            $backup_restore_dir/$full_file_name
    }
    # 執行
    function main() {
        # 檢查配置文件正確性
        exam_conf_file
        # 檢查備份文件是否是壓縮格式
        exam_backup_restore_file
        # 檢查 MySQL 是否停止
        exam_mysql_is_stop
        # 檢查 MySQL data 文件是否刪除
        exam_data_is_del
        # 讀取索引文件
        backup_index=$(read_backup_index)
        # 準備全備文件
        ready_full $backup_index
        # 準備增備文件
        ready_incr
        # 執行備份恢復
        exec_backup_restore $backup_index
        # 對數據文件進行賦權
        echo "重新對數據目錄賦權"
        chown -R mysql:mysql $data_dir
        echo "正在啟動MySQL"
        /etc/init.d/mysqld start
        echo "備份恢復成功"
    }
    main

5.2 配置文件

restore.conf

    # MySQL 數據文件夾
    data_dir=/opt/mysql/data
    #備份索引文件路徑
    backup_index_file=/opt/xtrabackup/backup/var/mysql_increment_hot_backup.index
    #xtrabackup bin 的目錄 
    xtrabackup_bin=/opt/xtrabackup/bin
    # 備份文件目錄
    backup_restore_dir=/data/backups/backups_zip

以上就是MySQL如何使用使用Xtrabackup進行備份和恢復的詳細內容,更多關于MySQL 用Xtrabackup備份和恢復的資料請關注腳本之家其它相關文章!

您可能感興趣的文章:
  • 安裝使用Percona XtraBackup來備份恢復MySQL的教程
  • 利用Xtrabackup工具備份及恢復(MySQL DBA的必備工具)
  • mysql xtrabackup 備份恢復實現分享
  • MySQL使用Xtrabackup備份流程詳解
  • xtrabackup備份還原MySQL數據庫
  • MySQL使用xtrabackup進行備份還原操作
  • 使用xtrabackup實現mysql備份
  • 編寫腳本令Xtrabackup對MySQL數據進行備份的教程
  • MySQL中使用innobackupex、xtrabackup進行大數據的備份和還原教程

標簽:三明 揚州 定西 阿里 福州 無錫 溫州 山西

巨人網絡通訊聲明:本文標題《MySQL如何使用使用Xtrabackup進行備份和恢復》,本文關鍵詞  MySQL,如何,使用,Xtrabackup,;如發現本文內容存在版權問題,煩請提供相關信息告之我們,我們將及時溝通與處理。本站內容系統采集于網絡,涉及言論、版權與本站無關。
  • 相關文章
  • 下面列出與本文章《MySQL如何使用使用Xtrabackup進行備份和恢復》相關的同類信息!
  • 本頁收集關于MySQL如何使用使用Xtrabackup進行備份和恢復的相關信息資訊供網民參考!
  • 推薦文章
    婷婷综合国产,91蜜桃婷婷狠狠久久综合9色 ,九九九九九精品,国产综合av
    国产精品妹子av| 日韩一区二区三区四区| 欧美中文字幕一区二区三区亚洲| 精品欧美一区二区在线观看 | 欧美性猛交一区二区三区精品| 亚洲精品一区二区三区四区高清 | 欧美精品一区二区不卡| 麻豆精品视频在线| 日韩欧美一区中文| 五月天亚洲精品| 香港成人在线视频| 成人精品亚洲人成在线| 精品1区2区在线观看| 国内精品国产成人国产三级粉色| 日韩欧美色综合网站| 久久国产精品色婷婷| 国产视频一区二区在线| 91网站最新地址| 亚洲电影一区二区三区| 91精品国产高清一区二区三区 | 99视频一区二区| 偷拍日韩校园综合在线| 国产在线一区二区综合免费视频| 久久精品日产第一区二区三区高清版 | 国产一区999| 国产亚洲欧洲997久久综合| av不卡一区二区三区| 亚洲国产一区视频| 精品久久久久一区二区国产| 99精品国产视频| 亚洲最大成人综合| 精品久久久久久久久久久院品网| 国产主播一区二区三区| 1000部国产精品成人观看| 欧美日韩国产美| 国产激情91久久精品导航| 亚洲精品视频观看| 91精品国产高清一区二区三区蜜臀| 国产盗摄精品一区二区三区在线 | 精品国产免费一区二区三区香蕉| 欧美日本视频在线| 久久精品国产精品亚洲综合| 一区二区三区在线观看欧美 | 在线看国产日韩| 日本一区二区不卡视频| 国产精品你懂的| 亚洲国产精品成人综合色在线婷婷| 日韩精品电影一区亚洲| 国产精品色在线| 亚洲精品在线网站| 欧美片网站yy| 欧美亚洲禁片免费| 97超碰欧美中文字幕| 精品一区二区三区蜜桃| 老司机精品视频导航| 亚洲成人动漫av| 亚洲美女偷拍久久| 中文字幕电影一区| 久久噜噜亚洲综合| 精品国精品自拍自在线| 精品乱码亚洲一区二区不卡| 日韩精品一区在线| 欧美视频三区在线播放| 欧美亚洲动漫精品| 欧美吞精做爰啪啪高潮| 色域天天综合网| 99久久伊人精品| 99国产麻豆精品| 色视频成人在线观看免| 欧美在线不卡一区| 6080yy午夜一二三区久久| 这里是久久伊人| 91精品国产综合久久久久久| 制服丝袜在线91| 欧美电影免费观看高清完整版在线 | 亚洲在线视频一区| 亚洲卡通动漫在线| 亚洲欧美在线观看| 亚洲精品videosex极品| 日韩一区精品字幕| 精品中文字幕一区二区| 成人午夜视频福利| 欧美日韩一区二区电影| 欧美久久久一区| 久久久久久久久久看片| 91在线一区二区| 精品国产一区a| 久久久青草青青国产亚洲免观| 国产亚洲精品资源在线26u| 中文字幕日韩av资源站| 亚洲成人动漫一区| 激情文学综合网| 国产aⅴ精品一区二区三区色成熟| 91亚洲精品一区二区乱码| 欧美日本一道本| 中文字幕av不卡| 日韩精品欧美精品| 风间由美一区二区av101| 欧美系列亚洲系列| 欧美韩日一区二区三区| 天天色天天操综合| va亚洲va日韩不卡在线观看| 精品三级av在线| 亚洲成人午夜影院| 成人综合激情网| 欧美一区二区三区在线电影| 亚洲天堂久久久久久久| 久久精品国产亚洲aⅴ| 91色.com| 欧美国产乱子伦 | 亚洲国产精品久久久男人的天堂| 六月丁香综合在线视频| 欧美在线观看视频一区二区 | 日韩码欧中文字| 韩国中文字幕2020精品| 欧美探花视频资源| 国产精品的网站| 经典三级视频一区| 91精品国产福利| 亚洲1区2区3区4区| 91精品1区2区| 国产精品久久久久一区二区三区| 久久精品国产秦先生| 欧美一级艳片视频免费观看| 亚洲国产美国国产综合一区二区| 99在线精品一区二区三区| 久久色视频免费观看| 免费一区二区视频| 51精品视频一区二区三区| 亚洲一区在线电影| 91福利视频久久久久| 亚洲另类一区二区| 91小视频在线观看| 亚洲欧洲www| 99视频一区二区| 日韩一区在线看| 精品欧美乱码久久久久久1区2区| 亚洲福中文字幕伊人影院| 欧美日韩国产一级片| 亚洲成人动漫一区| 欧美一区二区三区在线| 久久精品国产99国产| 精品va天堂亚洲国产| 国产精品一区二区男女羞羞无遮挡| 日韩欧美成人一区二区| 老司机一区二区| 精品奇米国产一区二区三区| 激情五月播播久久久精品| 国产亚洲欧美中文| 91一区一区三区| 亚洲第一主播视频| 欧美v国产在线一区二区三区| 国内国产精品久久| 亚洲男人电影天堂| 欧美高清性hdvideosex| 日本欧洲一区二区| 久久久久国产免费免费| av不卡一区二区三区| 丝瓜av网站精品一区二区 | 成人av在线播放网址| 亚洲色大成网站www久久九九| 成人av在线播放网站| 亚洲午夜电影网| 欧美大肚乱孕交hd孕妇| 成人性生交大片免费看在线播放| 亚洲日本一区二区| 欧美一级生活片| 91免费看片在线观看| 蜜臀久久久99精品久久久久久| 久久午夜电影网| 在线视频观看一区| 国产又粗又猛又爽又黄91精品| 尤物在线观看一区| 26uuu欧美| 欧美精品少妇一区二区三区| 国产精品系列在线观看| 五月天激情小说综合| 日本一区二区免费在线| 在线播放中文一区| 成人在线综合网| 丝袜美腿亚洲综合| 亚洲欧洲精品天堂一级| 精品国产免费人成电影在线观看四季| 97精品久久久午夜一区二区三区 | 2023国产精品| 欧美精品乱码久久久久久按摩| 国产aⅴ精品一区二区三区色成熟| 午夜av区久久| 中文字幕在线一区免费| 精品国产免费视频| 91精品在线麻豆| 首页国产丝袜综合| 青青草91视频| 亚洲影视资源网| 国产精品乱人伦一区二区| 精品国内片67194| 日韩一区二区在线看| 欧美色视频在线| 欧美三区在线观看| 成人午夜电影久久影院|