MySQL--??這套【全網(wǎng)超細】萬字數(shù)據(jù)庫備份方案,老板看了直呼加薪???《?務(wù)必收藏?》

      網(wǎng)友投稿 1011 2025-03-31

      【實戰(zhàn)背景】


      不管你是正在上學(xué),還是已經(jīng)工作了,想必多多少少都聽說過發(fā)生rm -rf、刪庫跑路的情況,主要指的就是被有意或無意的刪除掉了數(shù)據(jù)庫的數(shù)據(jù),而數(shù)據(jù)是整個業(yè)務(wù)最重要的價值體現(xiàn),如果你的公司或者項目組沒有一個成熟的數(shù)據(jù)庫數(shù)據(jù)備份方案,一旦發(fā)生意外,我只能說年輕人,大意了吧,沒有備份數(shù)據(jù)庫!!!

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

      本文主要介紹基于Xtrabackup實現(xiàn)MySQL數(shù)據(jù)庫的全量備份+增量備份方案~

      ==很細,建議先點?,預(yù)防走丟???,進入正文~==

      @TOC

      一、Xtrabackup介紹

      官方介紹文檔

      簡單總結(jié)下來就是XtraBackup是Percona旗下的一款產(chǎn)品,支持MySQL數(shù)據(jù)庫的熱備份(在線不停機),并且是免費、開源,適用所有MySQL版本,非阻塞、緊密壓縮、高度安全~

      ==心動就先點一下?唄!== 哈哈哈,回歸正題,進入實戰(zhàn)演練~

      二、Xtrabackup安裝

      2.1 版本說明

      (1)Percona XtraBackup 2.4版本,支持 ==MySQL 5.1 [1]、5.5、5.6 和 5.7==服務(wù)器上的InnoDB數(shù)據(jù)庫備份,但==不支持MySQL 8.0== 數(shù)據(jù)庫備份。

      (2)Percona XtraBackup8.0版本,僅支持MySQL 8.0服務(wù)器上存儲引擎為InnoDB的數(shù)據(jù)庫備份,但==不支持在MySQL 8.0之前版本==的數(shù)據(jù)庫備份~

      Percona XtraBackup 8.0 官方文檔

      Percona XtraBackup 2.4 官方文檔

      2.2 資源準備

      2.2.1 查看操作系統(tǒng)

      查看服務(wù)器 lsb_release -a

      我的操作系統(tǒng)信息是Linux CentOS 7.7.1908 位數(shù)64,那么我后面我需要下載對應(yīng)的相關(guān)安裝包~

      2.2.2 查看MySQL版本號

      方式一:Linux終端命令行

      mysql -V

      方式二:MySQL終端命令行

      mysql> select version();

      根據(jù)前面【版本說明】提到的MySQL5.7應(yīng)該選擇的是Percona XtraBackup 2.4相關(guān)版本~

      2.2.3 資源下載

      這里我個人操作系統(tǒng)環(huán)境對應(yīng)安裝的資源及版本如下:

      安裝包 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)問題:

      有同學(xué)問,你為啥下載的是rpm包,我選擇的卻是tar.gz安裝包?而且你為啥不直接在服務(wù)器通過wget +資源url在線下載呢?簡單又省事~

      (2)回答:

      首先下載什么包,這個跟你選擇的操作系統(tǒng)有關(guān),選擇Linux-Generic是通用版本的,對應(yīng)tar.gz包,我選擇的是CentOS7,對應(yīng)rpm安裝包~

      其次下載好rpm的安裝包后,再進行離線安裝這種方式,我個人覺得比較穩(wěn)妥,因為實際生產(chǎn)環(huán)境很多都是內(nèi)網(wǎng),無法直接在線下載安裝,因此需要提前下載好離線安裝包,再上傳到服務(wù)器,進行安裝~

      2.2.4 資源上傳

      按實際需要,創(chuàng)建存放安裝資源的目錄~

      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

      libv是xtrabackup的依賴包,==如果使用yum命令已經(jīng)正常安裝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:yum和rpm最大的區(qū)別就是通過yum命令安裝缺失包時,會自動去加載需要的包,而通過rpm命令安裝缺失包時,不會自動去加載缺失的包,而是直接報錯~

      所以當使用rpm命令安裝xtrabackup時,此時==安裝xtrabackup需要依賴libev==,如果libev沒安裝,則會安裝失敗,報錯關(guān)鍵信息如下:

      ==libev.so.4==()(64bit) is needed by ==percona-xtrabackup-24-2.4.19-1.el7.x86_64==

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

      (1)下載libev包

      推薦比較靠譜的rpm包-:http://rpm.pbone.net/

      根據(jù)我的操作系統(tǒng)及操作系統(tǒng)版本號(CentOS 7.7.1908 位數(shù)x64)對應(yīng)的libev的rpm安裝包版本是 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 卸載重裝

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

      (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用戶操作安裝qpress,qpress主要用于xtrabackup備份數(shù)據(jù)庫時對數(shù)據(jù)文件進行壓縮(壓縮文件后綴.qp)以及還原數(shù)據(jù)庫時再對壓縮數(shù)據(jù)文件(后綴.qp)進行解壓,大大節(jié)省存儲空間,當然如果老板非常有錢,服務(wù)器空間超大,不需要進行壓縮的可以忽略~

      安裝過程

      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修改和添加的操作信息,主要用于數(shù)據(jù)庫的主從復(fù)制以及備份還原==,幾乎所有的第三方數(shù)據(jù)庫備份及恢復(fù),都需要依賴于這個binlog日志實現(xiàn),非常重要!!!

      MySQL的binlog主要有STATEMENT、ROW和MIXED三種模式,比較主流的是==ROW==模式,建議大家有空可以了解了解~

      3.2 如何開啟binlog日志?

      修改MySQL的配置文件vim /etc/my.cnf,設(shè)置binlog為開啟:

      #=====設(shè)置binlog方式1=========== log_bin=ON log_bin_basename=/data/mysqllog/bin-log/mysql-bin log_bin_index=/data/mysqllog/bin-log/mysql-bin.index #=====設(shè)置binlog方式2=========== log_bin=/data/mysqllog/bin-log/mysql-bin

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

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

      #設(shè)置binlog模式,ROW表示日志格式為記錄每行數(shù)據(jù)的變化 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

      參數(shù)說明:

      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

      參數(shù)說明:

      3.3 xtrabackup恢復(fù)備份命令

      3.3.1 解壓數(shù)據(jù)

      ==沒對數(shù)據(jù)進行壓縮的,這步可以直接跳過~==

      如果在備份(全備或增備)時使用了--compress 壓縮數(shù)據(jù)文件,此時的數(shù)據(jù)文件后綴為.qp,恢復(fù)數(shù)據(jù)庫數(shù)據(jù)時,需要先通過qpress進行解壓.qp得到正常的數(shù)據(jù)文件,再刪除原.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 預(yù)恢復(fù)備份

      使用xtrabackup進行恢復(fù)數(shù)據(jù)庫數(shù)據(jù)之前,需要先進行預(yù)恢復(fù)備份~

      假設(shè)數(shù)據(jù)庫備份方案是全量備份+增量備份,那么這個預(yù)恢復(fù)就分為兩步來完成~

      第一步:先進行預(yù)恢復(fù)全量備份

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

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

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

      參數(shù)說明:

      全量+增量預(yù)恢復(fù)備份,最核心的部分就是 --apply-log-only 參數(shù),可以看下

      MySQL--??這套【全網(wǎng)超細】萬字數(shù)據(jù)庫備份方案,老板看了直呼加薪???《?務(wù)必收藏?》

      增量備份官方文檔說明

      簡單的總結(jié)就是預(yù)恢復(fù)備份時必須要指定 --apply-log-only 參數(shù),用來防止未提交事務(wù)的回滾,當預(yù)恢復(fù)備份到最后一個備份版本時,需要去掉該參數(shù)~

      3.3.3 恢復(fù)備份數(shù)據(jù)

      恢復(fù)命令

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

      參數(shù)說明:

      這里需要注意的是--target-dir指定恢復(fù)的備份目錄,是經(jīng)過預(yù)恢復(fù)備份之后~

      四、MySQL數(shù)據(jù)庫備份及還原(完整方案)

      4.1 完整方案介紹

      前面介紹了如何xtrabackup對MySQL進行全量備份、增量備份、預(yù)恢復(fù)備份、恢復(fù)備份的基本命令~

      本文實際上實施整套MySQL數(shù)據(jù)庫備份及還原方案的話,需要通過Shell腳本+定時服務(wù)來實現(xiàn)~

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

      (2)定時服務(wù)主要目的是定時每天執(zhí)行Shell腳本,完成數(shù)據(jù)庫備份,定時服務(wù)方式很多,本文主要介紹Linux自帶的Crond定時服務(wù),簡單易上手~

      (3)本文采用周日全量備份+非周日增量備份的完整數(shù)據(jù)庫備份方案,需要注意的是數(shù)據(jù)庫的備份方案都是比較嚴謹?shù)模?=一般都是定制化好的,該方案要保證每天只有一份備份,如果當天有多份備份,那又需要重新定制備份和恢復(fù)的Shell腳本了==~

      4.2 數(shù)據(jù)庫備份腳本

      4.2.1 創(chuàng)建目錄

      分別規(guī)劃以下幾個目錄:

      腳本存放目錄:mkdir -p /data/mysqlbackup/tools

      全量備份主目錄:mkdir -p /data/mysqlbackup/full

      增量備份主目錄:mkdir -p /data/mysqlbackup/incr

      備份日志主目錄:mkdir -p /data/mysqlbackup/logs

      4.2.2 創(chuàng)建腳本

      mysqlbackup.sh內(nèi)容如下:

      #!/bin/sh #基于Xtrabackup的MySQL數(shù)據(jù)庫備份腳本,每周日全量備份,其他增量備份 #MySQL配置文件 mysqlConfig="/data/mysqldata/my.cnf" #MySQL的sock文件 mysqlSocket="/data/mysqldata/mysql.sock" #數(shù)據(jù)庫用戶 dbUser="bkpuser" #數(shù)據(jù)庫密碼 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" #數(shù)據(jù)庫備份保存天數(shù) SAVE_DAYS=7 #清理備份保存天數(shù)之前的數(shù)據(jù)文件 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 執(zhí)行腳本

      (1)手動修改時間

      生產(chǎn)環(huán)境,要通過后面設(shè)置的==定時服務(wù)==來執(zhí)行Shell腳本~

      不過實際開發(fā)環(huán)境時,一般需要馬上驗證腳本是否正確,這時可以通過修改Linux操作系統(tǒng)的日期,兩個間隔的日期分別手動執(zhí)行一次備份腳本,模擬按日的數(shù)據(jù)庫備份方案,==修改操作時間需謹慎!!!不能修改系統(tǒng)時間的可以當天手動執(zhí)行一次備份腳本,隔天后再手動執(zhí)行一次備份腳本進行驗證==~

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

      (2)同步網(wǎng)絡(luò)時間(最后)

      這步僅用于修改Linux操作系統(tǒng)時間后,分別在不同日期下執(zhí)行完備份腳本后,再將Linux操作系統(tǒng)時間同步為互聯(lián)網(wǎng)的時間,==沒修改系統(tǒng)時間的可以忽略==~

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

      (3)執(zhí)行備份腳本

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

      (4)查看日志

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

      備份成功會提示如下:

      如果給的權(quán)限不夠可能會報錯:

      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

      說明執(zhí)行備份的MySQL用戶權(quán)限不夠~

      查看權(quán)限

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

      授權(quán)如下權(quán)限:

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

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

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

      4.2.4 配置定時服務(wù)

      (1)定時服務(wù)作用?

      配置定時服務(wù)主要目的是定時每天執(zhí)行Shell備份腳本,完成數(shù)據(jù)庫備份,定時服務(wù)方式很多,本文主要介紹Linux自帶的Crond定時服務(wù),簡單易上手~

      (2)什么是Crond服務(wù)?

      crond是Linux操作系統(tǒng)自帶的定時服務(wù),自帶守護進程,一般用于運行計劃任務(wù)如系統(tǒng)備份、日志分割及清理。

      crond服務(wù)適合在那些24x7不間斷運行的機器如服務(wù)器上運行的計劃任務(wù)。

      crond表達式

      示例1:0 0 * * * 每天整點執(zhí)行

      示例2:0 4 * * * 每天4點整執(zhí)行

      示例3:*/1 0 * * * 每隔一分鐘執(zhí)行

      –參數(shù)說明

      crond表達式從左右分別表示分鐘(0-59) 小時(0-23) 日期(1-31) 月份(1-12) 星期(0-6,0代表星期天)

      驗證crond配置

      配置當前用戶crond的執(zhí)行命令/usr/bin/crontab -e

      編輯內(nèi)容為: crond表達式 要執(zhí)行的Command命令

      實時查看cron執(zhí)行日志(這里只有root用戶有權(quán)限查看~)

      tail -f /var/log/cron

      (3)Crond常用命令

      ==Linux通過Crond服務(wù)配置定時服務(wù),需要確保Crond處于運行狀態(tài)~==

      查看啟動狀態(tài)命令

      systemctl status crond.service

      其他常用命令

      systemctl start crond.service

      systemctl restart crond.service

      systemctl stop crond.service

      關(guān)于Crond定時服務(wù),也可以看下我的這篇博文學(xué)習(xí)

      Linux-- 定時服務(wù)crond VS anacron和 crontab VS anacrontab區(qū)別對比

      (4)定時執(zhí)行備份腳本

      使用啟動MySQL的Linux終端用戶進行操作,我這里是mysql用戶~

      執(zhí)行命令

      /usr/bin/crontab -e

      添加內(nèi)容:

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

      表示每天==凌晨4點整==,會自動執(zhí)行基于Xtrabackup的MySQL數(shù)據(jù)庫全量備份+增量備份的Shell腳本~

      4.3 數(shù)據(jù)庫恢復(fù)腳本

      4.3.1 創(chuàng)建腳本

      vim mysqlrecovery.sh添加內(nèi)容:

      #!/bin/sh #基于Xtrabackup的MySQL數(shù)據(jù)庫恢復(fù)腳本,手動執(zhí)行恢復(fù) #全量備份主目錄 fullBackupPath="/data/mysqlbackup/full" #增量備份主目錄 incrBackupPath="/data/mysqlbackup/incr" #全量備份日期(最新) fullBackupDate="20210826" #增量備份日期(最新) incrBackupDate="20210827" #MySQL配置文件 mysqlConfig="/data/mysqldata/my.cnf" #數(shù)據(jù)恢復(fù)日志文件 logfile="/data/mysqlbackup/logs/recovery_$(date +%Y%m%d).log" #格式化全量備份日期為秒數(shù) fullBackupTime=`date -d "$fullBackupDate" +%s` #格式化增量備份日期為秒數(shù) incrBackupTime=`date -d "$incrBackupDate" +%s` #計算兩個日期之間的天數(shù)差 diffTimes=$[$incrBackupTime - $fullBackupTime] #天數(shù)差 diffDays=$[diffTimes/86400] #解壓全量備份的壓縮文件 for j in $(find $fullBackupPath/$fullBackupDate -name "*.qp"); do qpress -d $j $(dirname $j) && rm -rf $j; done; #按天數(shù)差遍歷:從最新全量備份依次預(yù)恢復(fù)到最新增量備份 for((i=0;i<=diffDays;i++)) do #預(yù)恢復(fù)備份日期 prepareRevoveryDate=`date -d "$fullBackupDate $i day" +%Y%m%d` #一、天數(shù)差為0 if [ $diffDays == 0 ];then #預(yù)恢復(fù)最新全量備份,后面沒有增量備份,不需要指定--apply-log-only,回滾未提交事務(wù) xtrabackup --prepare --target-dir=$fullBackupPath/$fullBackupDate 2>> ${logfile} #二、天數(shù)差不為0 else #2.1 預(yù)恢復(fù)備份日期等于全量備份日期 if [ $prepareRevoveryDate == $fullBackupDate ];then #預(yù)恢復(fù)最新全量備份,后面還有增量備份,需指定--apply-log-only,防止回滾未提交事務(wù) xtrabackup --prepare --apply-log-only --target-dir=$fullBackupPath/$fullBackupDate 2>> ${logfile} #2.2 預(yù)恢復(fù)備份日期不等于全量備份日期 else #解壓預(yù)恢復(fù)增量備份 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 #預(yù)恢復(fù)最新增量備份,不需要指定--apply-log-only,回滾未提交事務(wù) xtrabackup --prepare --target-dir=$fullBackupPath/$fullBackupDate --incremental-dir=$incrBackupPath/$prepareRevoveryDate 2>> ${logfile} #2.2.2 非最新增量備份 else #預(yù)恢復(fù)非最新增量備份,需指定--apply-log-only,防止回滾未提交事務(wù) xtrabackup --prepare --apply-log-only --target-dir=$fullBackupPath/$fullBackupDate --incremental-dir=$incrBackupPath/$prepareRevoveryDate 2>> ${logfile} fi fi fi done #xtrabackup恢復(fù)預(yù)恢復(fù)完成的全量備份數(shù)據(jù) xtrabackup --defaults-file=$mysqlConfig --copy-back --target-dir=$fullBackupPath/$fullBackupDate 2>> ${logfile} #退出程序 exit 0

      4.3.2 刪庫跑路(模擬)

      手動備份數(shù)據(jù)目錄(預(yù)防恢復(fù)失敗)

      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 手動執(zhí)行恢復(fù)腳本

      查看MySQL進程

      ps -ef|grep mysql

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

      service mysql stop

      或者

      kill -9 進程號

      執(zhí)行恢復(fù)腳本

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

      查看恢復(fù)日志

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

      啟動mysql

      如圖所示,表示恢復(fù)成功~

      最后連接MySQL查看==全量備份和增量備份恢復(fù)是否完整==~

      $ mysql -uroot -p

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

      原創(chuàng)不易,覺得有用的小伙伴來個一鍵三連(++評論 )+關(guān)注支持一下,非常感謝~

      MySQL 數(shù)據(jù)庫

      版權(quán)聲明:本文內(nèi)容由網(wǎng)絡(luò)用戶投稿,版權(quán)歸原作者所有,本站不擁有其著作權(quán),亦不承擔(dān)相應(yīng)法律責(zé)任。如果您發(fā)現(xiàn)本站中有涉嫌抄襲或描述失實的內(nèi)容,請聯(lián)系我們jiasou666@gmail.com 處理,核實后本網(wǎng)站將在24小時內(nèi)刪除侵權(quán)內(nèi)容。

      版權(quán)聲明:本文內(nèi)容由網(wǎng)絡(luò)用戶投稿,版權(quán)歸原作者所有,本站不擁有其著作權(quán),亦不承擔(dān)相應(yīng)法律責(zé)任。如果您發(fā)現(xiàn)本站中有涉嫌抄襲或描述失實的內(nèi)容,請聯(lián)系我們jiasou666@gmail.com 處理,核實后本網(wǎng)站將在24小時內(nèi)刪除侵權(quán)內(nèi)容。

      上一篇:如何做到精通GitLab CI/CD?
      下一篇:分隔域在哪里?(隔離區(qū)域分區(qū))
      相關(guān)文章
      亚洲人xxx日本人18| 亚洲电影在线播放| 亚洲一区精品视频在线| 亚洲AV无码专区国产乱码电影| 久久久精品国产亚洲成人满18免费网站 | 国产精品亚洲不卡一区二区三区 | 久久精品国产精品亚洲色婷婷| 综合亚洲伊人午夜网 | 国产AV无码专区亚洲AV琪琪| 精品亚洲成A人在线观看青青| 亚洲国产午夜精品理论片在线播放 | 欧洲亚洲国产清在高| 亚洲午夜久久久影院伊人| 在线日韩日本国产亚洲| 伊人久久大香线蕉亚洲五月天| 国产AV无码专区亚洲AV漫画| 亚洲一区爱区精品无码| 国产亚洲综合一区柠檬导航| 亚洲国产成人精品无码区在线观看| 国产AV无码专区亚洲AVJULIA| 久久精品国产精品亚洲艾| 亚洲爱情岛论坛永久| 337p欧洲亚洲大胆艺术| 亚洲春色另类小说| 波多野结衣亚洲一级| 亚洲中文字幕乱码AV波多JI| 亚洲av永久中文无码精品| jizzjizz亚洲日本少妇| 亚洲精品一级无码中文字幕| 国产成人综合亚洲亚洲国产第一页| 亚洲乱码日产一区三区| 亚洲精品成人av在线| 亚洲精品mv在线观看| 中文字幕 亚洲 有码 在线| 亚洲精品动漫免费二区| 亚洲AV无码一区二区三区在线观看 | 亚洲人成日本在线观看| 四虎必出精品亚洲高清| 337P日本欧洲亚洲大胆艺术图| 亚洲国产精品成人网址天堂| 亚洲人成图片小说网站|