主頁 >  其他 > MySQL--??這套【全網超細】萬字資料庫備份方案,老板看了直呼加薪???《?務必收藏?》

MySQL--??這套【全網超細】萬字資料庫備份方案,老板看了直呼加薪???《?務必收藏?》

2021-09-02 07:37:04 其他

【實戰背景】

不管你是正在上學,還是已經作業了,想必多多少少都聽說過發生rm -rf刪庫跑路的情況,主要指的就是被有意無意的洗掉掉了資料庫的資料,而資料是整個業務最重要的價值體現,如果你的公司或者專案組沒有一個成熟的資料庫資料備份方案,一旦發生意外,我只能說年輕人,大意了吧,沒有備份資料庫!!!

資料庫備份方案根據實際需要進行定制,一般比較主流的方案是方案一:每周一次全量備份+每天一次增量備份,主要是為了節省MySQL資料庫服務器的空間(省錢),當然如果老板比較有錢,光是MySQL服務器的空間就有幾千個G,空間大,比較任性的,直接方案二:每天做一次全量備份也可以~

本文主要介紹基于Xtrabackup實作MySQL資料庫的全量備份+增量備份方案~

很細,建議先點?收藏,預防走丟???,進入正文~

目錄

  • 一、Xtrabackup介紹
  • 二、Xtrabackup安裝
    • 2.1 版本說明
    • 2.2 資源準備
      • 2.2.1 查看作業系統
      • 2.2.2 查看MySQL版本號
      • 2.2.3 資源下載
      • 2.2.4 資源上傳
  • 2.3 開始安裝
    • 2.3.1 安裝xtrabackup
    • 2.3.2 安裝libv
    • 2.3.3 卸載重裝
    • 2.3.3 安裝qpress
  • 三、MySQL開啟binlog日志
    • 3.1 什么是binlog日志?
    • 3.2 如何開啟binlog日志?
  • 三、Xtrabackup備份及還原命令
    • 3.1 xtrabackup全量備份命令
    • 3.2 xtrabackup增量備份命令
    • 3.3 xtrabackup恢復備份命令
      • 3.3.1 解壓資料
      • 3.3.2 預恢復備份
      • 3.3.3 恢復備份資料
  • 四、MySQL資料庫備份及還原(完整方案)
    • 4.1 完整方案介紹
    • 4.2 資料庫備份腳本
      • 4.2.1 創建目錄
      • 4.2.2 創建腳本
      • 4.2.3 執行腳本
      • 4.2.4 配置定時服務
    • 4.3 資料庫恢復腳本
      • 4.3.1 創建腳本
      • 4.3.2 刪庫跑路(模擬)
      • 4.3.3 手動執行恢復腳本

一、Xtrabackup介紹

官方介紹檔案
在這里插入圖片描述

簡單總結下來就是XtraBackupPercona旗下的一款產品,支持MySQL資料庫的熱備份(在線不停機),并且是免費開源,適用所有MySQL版本非阻塞緊密壓縮高度安全~

在這里插入圖片描述
心動就先點一下?收藏唄! 哈哈哈,回歸正題,進入實戰演練~

二、Xtrabackup安裝

2.1 版本說明

(1)Percona XtraBackup 2.4版本,支持 MySQL 5.1 [1]、5.5、5.6 和 5.7服務器上的InnoDB資料庫備份,但不支持MySQL 8.0 資料庫備份,
(2)Percona XtraBackup8.0版本,僅支持MySQL 8.0服務器上存盤引擎為InnoDB的資料庫備份,但不支持在MySQL 8.0之前版本的資料庫備份~

Percona XtraBackup 8.0 官方檔案
在這里插入圖片描述
Percona XtraBackup 2.4 官方檔案
在這里插入圖片描述

2.2 資源準備

2.2.1 查看作業系統

查看服務器 lsb_release -a
在這里插入圖片描述
我的作業系統資訊是Linux CentOS 7.7.1908 位數64,那么我后面我需要下載對應的相關安裝包~

2.2.2 查看MySQL版本號

方式一:Linux終端命令列
mysql -V
在這里插入圖片描述

方式二:MySQL終端命令列
mysql> select version();
在這里插入圖片描述
根據前面【版本說明】提到的MySQL5.7應該選擇的是Percona XtraBackup 2.4相關版本~

2.2.3 資源下載

這里我個人作業系統環境對應安裝的資源及版本如下:

  • 安裝包 percona-xtrabackup-24-2.4.19-1.el7.x86_64.rpm
  • 壓縮工具 qpress-11-linux-x64.tar

XtraBackup其他版本官方下載 https://www.percona.com/downloads/

XtraBackup 8.0
XtraBackup 2.4
在這里插入圖片描述
在這里插入圖片描述

(1)問題:
有同學問,你為啥下載的是rpm包,我選擇的卻是tar.gz安裝包?而且你為啥不直接在服務器通過wget +資源url在線下載呢?簡單又省事~
(2)回答:
首先下載什么包,這個跟你選擇的作業系統有關,選擇Linux-Generic是通用版本的,對應tar.gz包,我選擇的是CentOS7,對應rpm安裝包~
其次下載好rpm的安裝包后,再進行離線安裝這種方式,我個人覺得比較穩妥,因為實際生產環境很多都是內網,無法直接在線下載安裝,因此需要提前下載好離線安裝包,再上傳到服務器,進行安裝~
在這里插入圖片描述

2.2.4 資源上傳

按實際需要,創建存放安裝資源的目錄~

mkdir -p /opt/mysql/xtrabackup
cd /opt/mysql/xtrabackup

2.3 開始安裝

2.3.1 安裝xtrabackup

先查看是否已安裝~

rpm -qa |grep xtrabackup

若沒有任何提示資訊,說明未安裝,再使用root用戶進行操作安裝~

cd /opt/mysql/xtrabackup
yum -y localinstall percona-xtrabackup-24-2.4.19-1.el7.x86_64.rpm

提示如下,表明安裝成功~
在這里插入圖片描述

2.3.2 安裝libv

libvxtrabackup的依賴包,如果使用yum命令已經正常安裝Xtrabackup,這步可以跳過~

但是有的小伙伴可能沒有使用yum命令安裝Xtrabackup:

yum -y localinstall percona-xtrabackup-24-2.4.19-1.el7.x86_64.rpm

而是使用了rpm命令進行安裝Xtrabackup:

rpm -ivh percona-xtrabackup-24-2.4.19-1.el7.x86_64.rpm

PS:yumrpm最大的區別就是通過yum命令安裝缺失包時,會自動去加載需要的包,而通過rpm命令安裝缺失包時,不會自動去加載缺失的包,而是直接報錯~

所以當使用rpm命令安裝xtrabackup時,此時安裝xtrabackup需要依賴libev,如果libev沒安裝,則會安裝失敗,報錯關鍵資訊如下:
libev.so.4()(64bit) is needed by percona-xtrabackup-24-2.4.19-1.el7.x86_64

這種情況就需要下載對應版本的依賴包libev進行安裝,再繼續安裝xtrabackup~

(1)下載libev包
推薦比較靠譜的rpm包下載地址:http://rpm.pbone.net/
在這里插入圖片描述
根據我的作業系統及作業系統版本號(CentOS 7.7.1908 位數x64)對應的libevrpm安裝包版本是 libev-4.04-2.el5.x86_64.rpm~
在這里插入圖片描述

另外兩個也挺靠譜的rpm包下載地址:
https://pkgs.org/search/?q=libev
https://rpmfind.net/linux/rpm2html/search.php?query=libev

(2)查看是否已安裝libev~

rpm -qa |grep libev

若沒有任何提示資訊,說明未安裝,再使用root用戶進行操作安裝~

cd /opt/mysql/xtrabackup
rpm -ivh libev-4.15-7.el7.x86_64.rpm

再使用rpm命令進行安裝Xtrabackup:

rpm -ivh percona-xtrabackup-24-2.4.19-1.el7.x86_64.rpm

安裝成功,提示如下資訊:
在這里插入圖片描述
不過還是更推薦大家使用yum命令進行安裝Xtrabackup:

yum -y localinstall percona-xtrabackup-24-2.4.19-1.el7.x86_64.rpm

2.3.3 卸載重裝

如果想要重裝libevxtrabackup,需要先卸載原來安裝的,不需要卸載這步可以忽略~

(1)查詢

rpm -qa |grep libev
rpm -qa |grep xtrabackup

(2)卸載

yum -y remove libev
yum -y remove percona-xtrabackup

(3)再次查詢

rpm -qa |grep libev
rpm -qa |grep xtrabackup

2.3.3 安裝qpress

需要使用root用戶操作安裝qpressqpress主要用于xtrabackup備份資料庫時對資料檔案進行壓縮(壓縮檔案后綴.qp)以及還原資料庫時再對壓縮資料檔案(后綴.qp)進行解壓,大大節省存盤空間,當然如果老板非常有錢,服務器空間超大,不需要進行壓縮的可以忽略~

安裝程序

cd /opt/mysql/xtrabackup
tar -xvf qpress-11-linux-x64.tar
mv qpress /usr/bin
chmod 755 /usr/bin/qpress

三、MySQL開啟binlog日志

3.1 什么是binlog日志?

簡單點的說就是記錄了MySQL修改和添加的操作資訊,主要用于資料庫的主從復制以及備份還原,幾乎所有的第三方資料庫備份及恢復,都需要依賴于這個binlog日志實作,非常重要!!!
MySQL的binlog主要有STATEMENTROWMIXED三種模式,比較主流的是ROW模式,建議大家有空可以了解了解~

3.2 如何開啟binlog日志?

修改MySQL的組態檔vim /etc/my.cnf,設定binlog為開啟:

#=====設定binlog方式1===========
log_bin=ON
log_bin_basename=/data/mysqllog/bin-log/mysql-bin
log_bin_index=/data/mysqllog/bin-log/mysql-bin.index

#=====設定binlog方式2===========
log_bin=/data/mysqllog/bin-log/mysql-bin

建議使用方式2,比較簡潔,相當于方式1的三行配置~

同樣vim /etc/my.cnf設定binlog模式(具體模式按實際需要進行設定):

#設定binlog模式,ROW表示日志格式為記錄每行資料的變化
binlog_format=ROW

三、Xtrabackup備份及還原命令

3.1 xtrabackup全量備份命令

全備命令:

xtrabackup --defaults-file=/etc/my.cnf --backup --user=bkpuser --password=123456 --socket=/data/mysqldata/mysql.sock --compress --compress-thread --parallel=4 --throttle=400 --target-dir=/data/mysqlbackup/full

引數說明:

引數說明
--defaults-filemysql組態檔全路徑
--backup表示備份操作
--user有權限的備份用戶
--password備份用戶密碼
--socketmysql的lock檔案
--compress使用qpress壓縮資料檔案,檔案后綴.qp
--compress-thread壓縮檔案執行緒數(不清楚就不寫該引數,使用默認的)
--parallel并發數(不清楚就不寫該引數,使用默認的
--throttle每秒IO操作的次數(不清楚就不寫該引數,使用默認的
--target-dir備份資料目錄

3.2 xtrabackup增量備份命令

增備命令

xtrabackup --defaults-file=/etc/my.cnf --backup --user=bkpuser --password=123456 --socket=/data/mysqldata/mysql.sock --compress --compress-thread --parallel=4 --throttle=400 --target-dir=/data/mysqlbackup/incr --incremental-basedir=/data/mysqlbackup/full

引數說明:

引數說明
--defaults-filemysql組態檔全路徑
--backup表示備份操作
--user有權限的備份用戶
--password備份用戶密碼
--socketmysql的lock檔案
--compress使用qpress壓縮資料檔案,檔案后綴.qp
--compress-thread壓縮檔案執行緒數(不清楚就不寫該引數,使用默認的)
--parallel并發數(不清楚就不寫該引數,使用默認的
--throttle每秒IO操作的次數(不清楚就不寫該引數,使用默認的
--target-dir備份資料目錄
--incremental-basedir備份要基于前面哪個基礎備份目錄

3.3 xtrabackup恢復備份命令

3.3.1 解壓資料

沒對資料進行壓縮的,這步可以直接跳過~
如果在備份(全備或增備)時使用了--compress 壓縮資料檔案,此時的資料檔案后綴為.qp,恢復資料庫資料時,需要先通過qpress進行解壓.qp得到正常的資料檔案,再洗掉原.qp壓縮檔案~

for j in $(find /data/mysqlbackup/full -name "*.qp"); do qpress -d $j $(dirname $j) && rm -rf $j; done;
for j in $(find /data/mysqlbackup/incr -name "*.qp"); do qpress -d $j $(dirname $j) && rm -rf $j; done;

3.3.2 預恢復備份

使用xtrabackup進行恢復資料庫資料之前,需要先進行預恢復備份~
假設資料庫備份方案是全量備份+增量備份,那么這個預恢復就分為兩步來完成~

第一步:先進行預恢復全量備份

xtrabackup --prepare --apply-log-only --target-dir=/data/mysqlbackup/full

第二步:再進行預恢復增量備份,合并當前預恢復備份到前一個備份(可能是全量或增量備份)目錄,如果有多個增量備份,依次完成所有增量備份的預恢復操作~

xtrabackup --prepare --target-dir=/data/mysqlbackup/full --incremental-dir=/data/mysqlbackup/incr

引數說明:

引數說明
--prepare表示預恢復
--apply-log-only指定該引數時,表示防止未提交事務的回滾
--target-dir預恢復目標目錄
--incremental-dir預恢復備份基于上一個備份的目錄(全量或增量備份)

全量+增量預恢復備份,最核心的部分就是 --apply-log-only 引數,可以看下
增量備份官方檔案說明
在這里插入圖片描述
簡單的總結就是預恢復備份時必須要指定 --apply-log-only 引數,用來防止未提交事務的回滾,當預恢復備份到最后一個備份版本時,需要去掉該引數~

3.3.3 恢復備份資料

恢復命令

xtrabackup --defaults-file=/etc/my.cnf  --copy-back --target-dir=/data/mysqlbackup/full

引數說明:

引數說明
--defaults-filemysql組態檔全路徑
--copy-back表示恢復操作
--target-dir要恢復資料的備份目錄

這里需要注意的是--target-dir指定恢復的備份目錄,是經過預恢復備份之后~

四、MySQL資料庫備份及還原(完整方案)

4.1 完整方案介紹

前面介紹了如何xtrabackup對MySQL進行全量備份增量備份預恢復備份恢復備份的基本命令~
本文實際上實施整套MySQL資料庫備份及還原方案的話,需要通過Shell腳本+定時服務來實作~

(1)Shell腳本主要用來來撰寫Xtrabackup的基本命令~

(2)定時服務主要目的是定時每天執行Shell腳本,完成資料庫備份,定時服務方式很多,本文主要介紹Linux自帶的Crond定時服務,簡單易上手~
(3)本文采用周日全量備份+非周日增量備份的完整資料庫備份方案,需要注意的是資料庫的備份方案都是比較嚴謹的,一般都是定制化好的,該方案要保證每天只有一份備份,如果當天有多份備份,那又需要重新定制備份和恢復的Shell腳本了~

4.2 資料庫備份腳本

4.2.1 創建目錄

分別規劃以下幾個目錄:

  • 腳本存放目錄:mkdir -p /data/mysqlbackup/tools
  • 全量備份主目錄:mkdir -p /data/mysqlbackup/full
  • 增量備份主目錄:mkdir -p /data/mysqlbackup/incr
  • 備份日志主目錄:mkdir -p /data/mysqlbackup/logs

4.2.2 創建腳本

mysqlbackup.sh內容如下:

#!/bin/sh
#基于XtrabackupMySQL資料庫備份腳本,每周日全量備份,其他增量備份

#MySQL組態檔
mysqlConfig="/data/mysqldata/my.cnf"
#MySQL的sock檔案
mysqlSocket="/data/mysqldata/mysql.sock"
#資料庫用戶
dbUser="bkpuser"
#資料庫密碼
dbPassword="abc@123456"

#全量備份主目錄
fullBackupPath="/data/mysqlbackup/full"
#增量備份主目錄
incrBackupPath="/data/mysqlbackup/incr"
#備份日志主目錄及
logPath="/data/mysqlbackup/logs"
#備份日志檔案名
logfile="/data/mysqlbackup/logs/backup_$(date +%Y%m%d).log"

#資料庫備份保存天數
SAVE_DAYS=7

#清理備份保存天數之前的資料檔案
find $fullBackupPath -type d -mtime +$SAVE_DAYS |xargs rm -rf
find $incrBackupPath -type d -mtime +$SAVE_DAYS |xargs rm -rf

#格式化今天的日期(年月日)
todayFormat=$(date -d "today" +%Y%m%d)
#格式化昨天的日期(年月日)
yesterdayformat=$(date -d "yesterday" +%Y%m%d)
#格式化昨天的星期標識(0~6表示周日~周六)
todayWeekFlg=`date -d ${todayFormat} +%w`
#格式化昨天的日期標識(0~6表示周日~周六)
yesterdayWeekFlg=`date -d ${yesterdayformat} +%w`

#一、第一次備份
if [ ! -d $fullBackupPath/$todayFormat ] && [ ! -d $fullBackupPath/$yesterdayformat ] && [ ! -d $incrBackupPath/$todayFormat ] && [ ! -d $incrBackupPath/$yesterdayformat ];then
  #全量備份
  xtrabackup --defaults-file=$mysqlConfig --backup --user=$dbUser --password=$dbPassword --socket=$mysqlSocket --compress --target-dir=$fullBackupPath/$todayFormat 2>> ${logfile}
#二、不是第一次備份
else
  #2.1 今天是周日
  if [ $todayWeekFlg == "0" ];then
    #全量備份
    xtrabackup --defaults-file=$mysqlConfig --backup --user=$dbUser --password=$dbPassword --socket=$mysqlSocket --compress --target-dir=$fullBackupPath/$todayFormat 2>> ${logfile}
  #2.2 今天不是周日
  else
    #2.2.1 昨天是周榷訓昨天有全量備份
    if [ $yesterdayWeekFlg == "0" ] || [ -d $fullBackupPath/$yesterdayformat ];then
      #增量備份: 依賴于昨天的全量備份  
      xtrabackup --defaults-file=$mysqlConfig --backup --user=$dbUser --password=$dbPassword --socket=$mysqlSocket --compress --target-dir=$incrBackupPath/$todayFormat --incremental-basedir=$fullBackupPath/$yesterdayformat 2>> ${logfile}
    #2.2.1 昨天不是周日并且昨天也沒有全量備份
    else
      #增量備份: 依賴于昨天的增量備份
      xtrabackup --defaults-file=$mysqlConfig --backup --user=$dbUser --password=$dbPassword --socket=$mysqlSocket --compress --target-dir=$incrBackupPath/$todayFormat --incremental-basedir=$incrBackupPath/$yesterdayformat 2>> ${logfile}
    fi
  fi
fi
exit 0

4.2.3 執行腳本

(1)手動修改時間
生產環境,要通過后面設定的定時服務來執行Shell腳本~
不過實際開發環境時,一般需要馬上驗證腳本是否正確,這時可以通過修改Linux作業系統的日期,兩個間隔的日期分別手動執行一次備份腳本,模擬按日的資料庫備份方案,修改操作時間需謹慎!!!不能修改系統時間的可以當天手動執行一次備份腳本,隔天后再手動執行一次備份腳本進行驗證~

date
date -s  "2021-08-26 04:00:00"
date -s  "2021-08-27 04:00:00"

(2)同步網路時間(最后)
這步僅用于修改Linux作業系統時間后,分別在不同日期下執行完備份腳本后,再將Linux作業系統時間同步為互聯網的時間,沒修改系統時間的可以忽略~

yum install -y ntpdate
ntpdate 0.asia.pool.ntp.org
hwclock --systohc
或(指定具體時間)
date -s  "2021-08-27 04:00:00"
hwclock --systohc

(3)執行備份腳本

/bin/sh /data/mysqlbackup/tools/mysqlbackup.sh

(4)查看日志

tail -f /data/mysqlbackup/logs/backup_20210826.log

備份成功會提示如下:
在這里插入圖片描述

如果給的權限不夠可能會報錯:
210826 21:02:01 Connecting to MySQL server host: localhost, user: bkpuser, password: set, port: 3306, socket: /data/mysqldata/mysql.sock
Using server version 5.7.29-log
Error: failed to execute query ‘SHOW ENGINE INNODB STATUS’: 1227 (42000) Access denied; you need (at least one of) the PROCESS privilege(s) for this operation

說明執行備份的MySQL用戶權限不夠~

查看權限

mysql> select * from mysql.user where user = 'bkpuser' \G;

授權如下權限:

GRANT SELECT, INSERT, CREATE, RELOAD, PROCESS, SUPER, LOCK TABLES, REPLICATION CLIENT, CREATE TABLESPACE ON *.* TO `bkpuser`@`localhost`;
FLUSH PRIVILEGES;

實在不確定啥權限,可以授權所有權限給備份用戶也可以:

GRANT ALL PRIVILEGES ON  *.* TO `bkpuser`@`localhost`;
FLUSH PRIVILEGES;

4.2.4 配置定時服務

(1)定時服務作用?

配置定時服務主要目的是定時每天執行Shell備份腳本,完成資料庫備份,定時服務方式很多,本文主要介紹Linux自帶的Crond定時服務,簡單易上手~

(2)什么是Crond服務?

  • crond是Linux作業系統自帶的定時服務,自帶守護行程,一般用于運行計劃任務如系統備份、日志分割及清理,
  • crond服務適合在那些24x7不間斷運行的機器如服務器上運行的計劃任務,
  • crond運算式
    示例1:0 0 * * * 每天整點執行
    示例2:0 4 * * * 每天4點整執行
    示例3:*/1 0 * * * 每隔一分鐘執行
    –引數說明
    crond運算式從左右分別表示分鐘(0-59) 小時(0-23) 日期(1-31) 月份(1-12) 星期(0-6,0代表星期天)
  • 驗證crond配置
    配置當前用戶crond的執行命令/usr/bin/crontab -e
    編輯內容為: crond運算式 要執行的Command命令
  • 實時查看cron執行日志(這里只有root用戶有權限查看~)
    tail -f /var/log/cron

(3)Crond常用命令

Linux通過Crond服務配置定時服務,需要確保Crond處于運行狀態~

查看啟動狀態命令
systemctl status crond.service
在這里插入圖片描述
其他常用命令
systemctl start crond.service
systemctl restart crond.service
systemctl stop crond.service

關于Crond定時服務,也可以看下我的這篇博文學習
Linux-- 定時服務crond VS anacron和 crontab VS anacrontab區別對比

(4)定時執行備份腳本
使用啟動MySQL的Linux終端用戶進行操作,我這里是mysql用戶~
執行命令

/usr/bin/crontab -e

添加內容:

0 4 * * * /bin/sh /data/mysqlbackup/tools/mysqlbackup.sh

表示每天凌晨4點整,會自動執行基于Xtrabackup的MySQL資料庫全量備份+增量備份的Shell腳本~

4.3 資料庫恢復腳本

4.3.1 創建腳本

vim mysqlrecovery.sh添加內容:

#!/bin/sh
#基于Xtrabackup的MySQL資料庫恢復腳本,手動執行恢復

#全量備份主目錄
fullBackupPath="/data/mysqlbackup/full"
#增量備份主目錄
incrBackupPath="/data/mysqlbackup/incr"
#全量備份日期(最新)
fullBackupDate="20210826"
#增量備份日期(最新)
incrBackupDate="20210827"
#MySQL組態檔
mysqlConfig="/data/mysqldata/my.cnf"

#資料恢復日志檔案
logfile="/data/mysqlbackup/logs/recovery_$(date +%Y%m%d).log"

#格式化全量備份日期為秒數
fullBackupTime=`date -d "$fullBackupDate" +%s`
#格式化增量備份日期為秒數
incrBackupTime=`date -d "$incrBackupDate" +%s`
#計算兩個日期之間的天數差
diffTimes=$[$incrBackupTime - $fullBackupTime]
#天數差
diffDays=$[diffTimes/86400]

#解壓全量備份的壓縮檔案
for j in $(find $fullBackupPath/$fullBackupDate -name "*.qp"); do qpress -d $j $(dirname $j) && rm -rf $j; done;

#按天數差遍歷:從最新全量備份依次預恢復到最新增量備份
for((i=0;i<=diffDays;i++))
do
  #預恢復備份日期
  prepareRevoveryDate=`date -d "$fullBackupDate $i day" +%Y%m%d`
  #一、天數差為0
  if [ $diffDays == 0 ];then
    #預恢復最新全量備份,后面沒有增量備份,不需要指定--apply-log-only,回滾未提交事務
    xtrabackup --prepare --target-dir=$fullBackupPath/$fullBackupDate 2>> ${logfile}
  #二、天數差不為0
  else
    #2.1 預恢復備份日期等于全量備份日期
    if [ $prepareRevoveryDate == $fullBackupDate ];then
      #預恢復最新全量備份,后面還有增量備份,需指定--apply-log-only,防止回滾未提交事務
      xtrabackup --prepare --apply-log-only --target-dir=$fullBackupPath/$fullBackupDate 2>> ${logfile}
    #2.2 預恢復備份日期不等于全量備份日期
    else
      #解壓預恢復增量備份
      for j in $(find $incrBackupPath/$prepareRevoveryDate -name "*.qp"); do qpress -d $j $(dirname $j) && rm -rf $j; done;
      #2.2.1 最新增量備份
      if [ i == $diffDays ];then
        #預恢復最新增量備份,不需要指定--apply-log-only,回滾未提交事務
        xtrabackup --prepare --target-dir=$fullBackupPath/$fullBackupDate --incremental-dir=$incrBackupPath/$prepareRevoveryDate 2>> ${logfile}
      #2.2.2 非最新增量備份
      else
        #預恢復非最新增量備份,需指定--apply-log-only,防止回滾未提交事務
        xtrabackup --prepare --apply-log-only --target-dir=$fullBackupPath/$fullBackupDate --incremental-dir=$incrBackupPath/$prepareRevoveryDate 2>> ${logfile}
      fi
    fi
  fi
done

#xtrabackup恢復預恢復完成的全量備份資料
xtrabackup --defaults-file=$mysqlConfig --copy-back --target-dir=$fullBackupPath/$fullBackupDate 2>> ${logfile}

#退出程式
exit 0

4.3.2 刪庫跑路(模擬)

手動備份資料目錄(預防恢復失敗)

cd /data/mysqldata
tar -czvf 3306_$(date +%Y%m%d)_$(date +%H%M%S)2.tar.gz 3306

刪庫跑路(模擬)~

cd /data/mysqldata
rm -rf 3306

在這里插入圖片描述

4.3.3 手動執行恢復腳本

查看MySQL行程

ps -ef|grep mysql

如果存在行程,需要先停止mysql

service mysql stop

或者

kill -9 行程號

執行恢復腳本

/bin/sh /data/mysqlbackup/tools/mysqlrecovery.sh

查看恢復日志

tail -f /data/mysqlbackup/logs/recovery_$(date +%Y%m%d).log

在這里插入圖片描述

啟動mysql
如圖所示,表示恢復成功~
在這里插入圖片描述
最后連接MySQL查看全量備份和增量備份恢復是否完整~
$ mysql -uroot -p


肝完了,兄弟們,沖沖沖!!!!!

原創不易,覺得有用的小伙伴來個一鍵三連(點贊+收藏+評論 )+關注支持一下,非常感謝~
在這里插入圖片描述

轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/296834.html

標籤:其他

上一篇:記憶是如何產生的 && 程式員解夢

下一篇:windows10環境安裝spark-3.0.3-bin-hadoop2.7

標籤雲
其他(157675) Python(38076) JavaScript(25376) Java(17977) C(15215) 區塊鏈(8255) C#(7972) AI(7469) 爪哇(7425) MySQL(7132) html(6777) 基礎類(6313) sql(6102) 熊猫(6058) PHP(5869) 数组(5741) R(5409) Linux(5327) 反应(5209) 腳本語言(PerlPython)(5129) 非技術區(4971) Android(4554) 数据框(4311) css(4259) 节点.js(4032) C語言(3288) json(3245) 列表(3129) 扑(3119) C++語言(3117) 安卓(2998) 打字稿(2995) VBA(2789) Java相關(2746) 疑難問題(2699) 细绳(2522) 單片機工控(2479) iOS(2429) ASP.NET(2402) MongoDB(2323) 麻木的(2285) 正则表达式(2254) 字典(2211) 循环(2198) 迅速(2185) 擅长(2169) 镖(2155) 功能(1967) .NET技术(1958) Web開發(1951) python-3.x(1918) HtmlCss(1915) 弹簧靴(1913) C++(1909) xml(1889) PostgreSQL(1872) .NETCore(1853) 谷歌表格(1846) Unity3D(1843) for循环(1842)

熱門瀏覽
  • 網閘典型架構簡述

    網閘架構一般分為兩種:三主機的三系統架構網閘和雙主機的2+1架構網閘。 三主機架構分別為內端機、外端機和仲裁機。三機無論從軟體和硬體上均各自獨立。首先從硬體上來看,三機都用各自獨立的主板、記憶體及存盤設備。從軟體上來看,三機有各自獨立的作業系統。這樣能達到完全的三機獨立。對于“2+1”系統,“2”分為 ......

    uj5u.com 2020-09-10 02:00:44 more
  • 如何從xshell上傳檔案到centos linux虛擬機里

    如何從xshell上傳檔案到centos linux虛擬機里及:虛擬機CentOs下執行 yum -y install lrzsz命令,出現錯誤:鏡像無法找到軟體包 前言 一、安裝lrzsz步驟 二、上傳檔案 三、遇到的問題及解決方案 總結 前言 提示:其實很簡單,往虛擬機上安裝一個上傳檔案的工具 ......

    uj5u.com 2020-09-10 02:00:47 more
  • 一、SQLMAP入門

    一、SQLMAP入門 1、判斷是否存在注入 sqlmap.py -u 網址/id=1 id=1不可缺少。當注入點后面的引數大于兩個時。需要加雙引號, sqlmap.py -u "網址/id=1&uid=1" 2、判斷文本中的請求是否存在注入 從文本中加載http請求,SQLMAP可以從一個文本檔案中 ......

    uj5u.com 2020-09-10 02:00:50 more
  • Metasploit 簡單使用教程

    metasploit 簡單使用教程 浩先生, 2020-08-28 16:18:25 分類專欄: kail 網路安全 linux 文章標簽: linux資訊安全 編輯 著作權 metasploit 使用教程 前言 一、Metasploit是什么? 二、準備作業 三、具體步驟 前言 Msfconsole ......

    uj5u.com 2020-09-10 02:00:53 more
  • 游戲逆向之驅動層與用戶層通訊

    驅動層代碼: #pragma once #include <ntifs.h> #define add_code CTL_CODE(FILE_DEVICE_UNKNOWN,0x800,METHOD_BUFFERED,FILE_ANY_ACCESS) /* 更多游戲逆向視頻www.yxfzedu.com ......

    uj5u.com 2020-09-10 02:00:56 more
  • 北斗電力時鐘(北斗授時服務器)讓網路資料更精準

    北斗電力時鐘(北斗授時服務器)讓網路資料更精準 北斗電力時鐘(北斗授時服務器)讓網路資料更精準 京準電子科技官微——ahjzsz 近幾年,資訊技術的得了快速發展,互聯網在逐漸普及,其在人們生活和生產中都得到了廣泛應用,并且取得了不錯的應用效果。計算機網路資訊在電力系統中的應用,一方面使電力系統的運行 ......

    uj5u.com 2020-09-10 02:01:03 more
  • 【CTF】CTFHub 技能樹 彩蛋 writeup

    ?碎碎念 CTFHub:https://www.ctfhub.com/ 筆者入門CTF時時剛開始刷的是bugku的舊平臺,后來才有了CTFHub。 感覺不論是網頁UI設計,還是題目質量,賽事跟蹤,工具軟體都做得很不錯。 而且因為獨到的金幣制度的確讓人有一種想去刷題賺金幣的感覺。 個人還是非常喜歡這個 ......

    uj5u.com 2020-09-10 02:04:05 more
  • 02windows基礎操作

    我學到了一下幾點 Windows系統目錄結構與滲透的作用 常見Windows的服務詳解 Windows埠詳解 常用的Windows注冊表詳解 hacker DOS命令詳解(net user / type /md /rd/ dir /cd /net use copy、批處理 等) 利用dos命令制作 ......

    uj5u.com 2020-09-10 02:04:18 more
  • 03.Linux基礎操作

    我學到了以下幾點 01Linux系統介紹02系統安裝,密碼啊破解03Linux常用命令04LAMP 01LINUX windows: win03 8 12 16 19 配置不繁瑣 Linux:redhat,centos(紅帽社區版),Ubuntu server,suse unix:金融機構,證券,銀 ......

    uj5u.com 2020-09-10 02:04:30 more
  • 05HTML

    01HTML介紹 02頭部標簽講解03基礎標簽講解04表單標簽講解 HTML前段語言 js1.了解代碼2.根據代碼 懂得挖掘漏洞 (POST注入/XSS漏洞上傳)3.黑帽seo 白帽seo 客戶網站被黑帽植入劫持代碼如何處理4.熟悉html表單 <html><head><title>TDK標題,描述 ......

    uj5u.com 2020-09-10 02:04:36 more
最新发布
  • 2023年最新微信小程式抓包教程

    01 開門見山 隔一個月發一篇文章,不過分。 首先回顧一下《微信系結手機號資料庫被脫庫事件》,我也是第一時間得知了這個訊息,然后跟蹤了整件事情的經過。下面是這起事件的相關截圖以及近日流出的一萬條資料樣本: 個人認為這件事也沒什么,還不如關注一下之前45億快遞資料查詢渠道疑似在近日復活的訊息。 訊息是 ......

    uj5u.com 2023-04-20 08:48:24 more
  • web3 產品介紹:metamask 錢包 使用最多的瀏覽器插件錢包

    Metamask錢包是一種基于區塊鏈技術的數字貨幣錢包,它允許用戶在安全、便捷的環境下管理自己的加密資產。Metamask錢包是以太坊生態系統中最流行的錢包之一,它具有易于使用、安全性高和功能強大等優點。 本文將詳細介紹Metamask錢包的功能和使用方法。 一、 Metamask錢包的功能 數字資 ......

    uj5u.com 2023-04-20 08:47:46 more
  • vulnhub_Earth

    前言 靶機地址->>>vulnhub_Earth 攻擊機ip:192.168.20.121 靶機ip:192.168.20.122 參考文章 https://www.cnblogs.com/Jing-X/archive/2022/04/03/16097695.html https://www.cnb ......

    uj5u.com 2023-04-20 07:46:20 more
  • 從4k到42k,軟體測驗工程師的漲薪史,給我看哭了

    清明節一過,盲猜大家已經無心上班,在數著日子準備過五一,但一想到銀行卡里的余額……瞬間心情就不美麗了。最近,2023年高校畢業生就業調查顯示,本科畢業月平均起薪為5825元。調查一出,便有很多同學表示自己又被平均了。看著這一資料,不免讓人想到前不久中國青年報的一項調查:近六成大學生認為畢業10年內會 ......

    uj5u.com 2023-04-20 07:44:00 more
  • 最新版本 Stable Diffusion 開源 AI 繪畫工具之中文自動提詞篇

    🎈 標簽生成器 由于輸入正向提示詞 prompt 和反向提示詞 negative prompt 都是使用英文,所以對學習母語的我們非常不友好 使用網址:https://tinygeeker.github.io/p/ai-prompt-generator 這個網址是為了讓大家在使用 AI 繪畫的時候 ......

    uj5u.com 2023-04-20 07:43:36 more
  • 漫談前端自動化測驗演進之路及測驗工具分析

    隨著前端技術的不斷發展和應用程式的日益復雜,前端自動化測驗也在不斷演進。隨著 Web 應用程式變得越來越復雜,自動化測驗的需求也越來越高。如今,自動化測驗已經成為 Web 應用程式開發程序中不可或缺的一部分,它們可以幫助開發人員更快地發現和修復錯誤,提高應用程式的性能和可靠性。 ......

    uj5u.com 2023-04-20 07:43:16 more
  • CANN開發實踐:4個DVPP記憶體問題的典型案例解讀

    摘要:由于DVPP媒體資料處理功能對存放輸入、輸出資料的記憶體有更高的要求(例如,記憶體首地址128位元組對齊),因此需呼叫專用的記憶體申請介面,那么本期就分享幾個關于DVPP記憶體問題的典型案例,并給出原因分析及解決方法。 本文分享自華為云社區《FAQ_DVPP記憶體問題案例》,作者:昇騰CANN。 DVPP ......

    uj5u.com 2023-04-20 07:43:03 more
  • msf學習

    msf學習 以kali自帶的msf為例 一、msf核心模塊與功能 msf模塊都放在/usr/share/metasploit-framework/modules目錄下 1、auxiliary 輔助模塊,輔助滲透(埠掃描、登錄密碼爆破、漏洞驗證等) 2、encoders 編碼器模塊,主要包含各種編碼 ......

    uj5u.com 2023-04-20 07:42:59 more
  • Halcon軟體安裝與界面簡介

    1. 下載Halcon17版本到到本地 2. 雙擊安裝包后 3. 步驟如下 1.2 Halcon軟體安裝 界面分為四大塊 1. Halcon的五個助手 1) 影像采集助手:與相機連接,設定相機引數,采集影像 2) 標定助手:九點標定或是其它的標定,生成標定檔案及內參外參,可以將像素單位轉換為長度單位 ......

    uj5u.com 2023-04-20 07:42:17 more
  • 在MacOS下使用Unity3D開發游戲

    第一次發博客,先發一下我的游戲開發環境吧。 去年2月份買了一臺MacBookPro2021 M1pro(以下簡稱mbp),這一年來一直在用mbp開發游戲。我大致分享一下我的開發工具以及使用體驗。 1、Unity 官網鏈接: https://unity.cn/releases 我一般使用的Apple ......

    uj5u.com 2023-04-20 07:40:19 more