DBA必知的mysql備份與還原的幾大方法

博主QQ:819594300mysql

博客地址:http://zpf666.blog.51cto.com/sql

有什麼疑問的朋友能夠聯繫博主,博主會幫大家解答,謝謝支持!1、mysqldump備份結合binlog日誌恢復數據庫

說明:MySQL備份通常採起全庫備份加日誌備份的方式,例如天天執行一次全備份,每小時執行一次二進制日誌備份。這樣在MySQL故障後可使用全備份和日誌備份將數據恢復到最後一個二進制日誌備份前的任意位置或時間。bash

一、binlog介紹服務器

1)該日誌記錄着數據庫的全部增、刪、改的操做日誌,還包括這些操做的執行時間。session

Binlog功能默認是關閉的,沒有開啓。app

查看binlog,用mysqlbinlog  -v  mysql-bin.000001dom

Binlog的用途:1:主從同步          2:恢復數據庫ide

開啓binary log功能:經過編輯my.cnf中的log-bin選項能夠開啓二進制日誌;形式如右:log-bin[=DIR/[filename]] ,註釋:每次重啓mysql服務或運行mysql> flush logs;都會生成一個新的二進制日誌文件,這些日誌文件的number會不斷地遞增,除了生成上述的文件外還會生成一個名爲filename.index的文件。這個文件中存儲全部二進制日誌文件的清單又稱爲二進制文件的索引。工具

wKiom1jl5Q3wb6P9AAEYfTuy5LM622.jpg

wKiom1jl5Q7AVBRpAADHrEvajBQ685.jpg

2)查看產生的binary log   注:查看binlog內容是爲了恢復數據

說明:bin-log由於是二進制文件,不能經過文件內容查看命令直接打開查看,mysql提供兩種方式查看方式。

①在介紹以前,咱們先對數據庫進行一下增刪改的操做,不然log裏邊數據有點空。

wKioL1jl5Q6zHzjBAAIWzmDrbJc556.jpg

②從新開始一個新的日誌文件

wKioL1jl5RCDLZZBAAMWxYOQJPA691.jpg

③查看MySQL Server上的二進制日誌

wKiom1jl5RDz377XAAExUdRxDjU318.jpg

wKiom1jl5RKBs8_BAAKwFCbD34g231.jpg

查看指定的二進制日誌中的事件:

wKioL1jl5RKRVt0sAAHi0STJTdY171.jpg

該命令還包含其餘選項以便靈活查看:

wKiom1jl5ROgb19EAAES70txWz4973.jpg

wKioL1jl5ROQ5m5BAAEt_3PcYMs590.jpg

wKiom1jl5RTyg8d6AAGmUrUnT3w875.jpg

總結:上述方式能夠查看到服務器上存在的二進制日誌文件及文件中的事件,可是想查看到文件中具體的內容並應於恢復場景還得藉助mysqlbinlog這個工具。

語法格式:mysqlbinlog  [options]  log_file ...

輸出內容會因日誌文件的格式以及mysqlbinlog工具使用的選項不一樣而略不一樣。

mysqlbinlog的可用選項可參考man手冊。

wKioL1jl5RSzjk1gAAJD7USzPww355.jpg

wKiom1jl5RWRT_g0AAC96Qslxa0077.jpg

wKioL1jl5RXj_v-TAADMyw5nHFA609.jpg

說明:不管是本地二進制日誌文件仍是遠程服務器上的二進制日誌文件,不管是行模式、語句模式仍是混合模式的二進制日誌文件,被mysqlbinlog工具解析後均可直接應用與MySQL Server進行基於時間點、位置或數據庫的恢復。

 

下面咱們就來演示如何使用binlog恢復以前刪除數據(id=2那條記錄)

注意:在實際生產環境中,若是遇到須要恢復數據庫的狀況,不要讓用戶能訪問到數據庫,以免新的數據插入進來,以及在主從的環境下,關閉主從。

①查看binlog文件,從中找出delete from bdqn.test where id=2

# cd/usr/local/mysql/data/

# mysqlbinlog  -v mysql-bin.000002

顯示結果以下:

wKioL1jl5RXjYpNjAAFmHgDeEfc757.jpg

圖片看不清楚的能夠看下面複製的日誌:
# at 219

#170316 21:52:28 server id 1  end_log_pos 287 CRC32 0xff83a85b    Query   thread_id=2 exec_time=0 error_code=0

SET TIMESTAMP=1489672348/*!*/;

SET @@session.pseudo_thread_id=2/*!*/;

SET @@session.foreign_key_checks=1,@@session.sql_auto_is_null=0, @@session.unique_checks=1,@@session.autocommit=1/*!*/;

SET @@session.sql_mode=1075838976/*!*/;

SET @@session.auto_increment_increment=1, @@session.auto_increment_offset=1/*!*/;

/*!\C utf8 *//*!*/;

SET@@session.character_set_client=33,@@session.collation_connection=33,@@session.collation_server=33/*!*/;

SET @@session.lc_time_names=0/*!*/;

SET @@session.collation_database=DEFAULT/*!*/;

BEGIN

/*!*/;

# at 287

#170316 21:52:28 server id 1  end_log_pos 337 CRC32 0x343e7343   Table_map: `bdqn`.`test` mapped to number 108

# at 337

#170316 21:52:28 server id 1  end_log_pos 382 CRC32 0xa3d1ce0d    Delete_rows: table id 108 flags: STMT_END_F

 

BINLOG '

nJjKWBMBAAAAMgAAAFEBAAAAAGwAAAAAAAEABGJkcW4ABHRlc3QAAgMPAjwAAkNzPjQ=

nJjKWCABAAAALQAAAH4BAAAAAGwAAAAAAAEAAgAC//wCAAAABGxpc2kNztGj

'/*!*/;

### DELETE FROM `bdqn`.`test`

### WHERE

###   @1=2

###   @2='lisi'

# at 382

#170316 21:52:28 server id 1  end_log_pos 413 CRC32 0x257e7073    Xid = 10

COMMIT/*!*/;

說明:能夠從上圖能夠看出來delete時間發生position是287,事件結束position是413。

②恢復流程:直接用bin-log日誌將數據庫恢復到刪除位置287前,而後跳過故障點,再進行恢復下面全部的操做,命令以下

因爲以前沒有作過全庫備份,因此要使用全部binlog日誌恢復,因此生產環境中須要很長時間恢復,導出相關binlog文件。

wKiom1jl5RaC-mKpAAEP3e3ssTs183.jpg

③刪除bdqn數據庫(刪除bdqn和恢復數據以前,要關閉binlog功能)

wKioL1jl5RaS-RirAAEYCzOGoNY876.jpg

wKiom1jl5Reg9ipfAACBBD-2kLw934.jpg

④利用binlog恢復數據

wKioL1jl5RehPYf9AAFnVlgJIRA170.jpg

⑤恢復完成後,咱們檢查下表的數據是否完整

wKiom1jl5RiSI8ABAAEMOeezeYg211.jpg

wKiom1jl5RiR9xuWAACbwRYv-OI890.jpg

wKioL1jl5Rmhf5G5AAKNPUOi6bk494.jpg

二、mysqldump介紹

做用:mysqldump是mysql自帶的備份和數據轉移的工具。

特色:它只產生sql語句(即sql命令)封裝在文件,而不是真實的數據。

Mysqldump是邏輯備份,不是物理備份,備份的是SQL語句,而不是數據文件。

Mysqldump適用於小型數據庫,數據容量通常是在幾個G大小,當數據量很大的狀況下,不建議使用mysqldump。

導出對象:能夠針對單個表、多個表、單個數據庫、多個數據庫、全部數據庫。

格式:

#mysqldump   [選項]   庫名   [表名1]  [表名2]  … > /備份路徑/備份文件名

//導出指定數據庫的單個或多個表

#mysqldump   [選項]   --databases  庫名1 [庫名2]  … >  /備份路徑/備份文件名

//導出指定的數據庫或多個數據庫

#mysqldump   [選項]   --all-databases  >  /備份路徑/備份文件名

//導出全部的數據庫

#mysqldump   -uroot  -p123456 --flush-logs   bdqn  > /opt/bdqn.sql

//導出數據庫bdqn,其中「—flush-logs」這個選項是完整備份完畢後開啓一個新的binlog

#mysql -uroot  -p123456  bdqn <  /opt/bdqn.sql

//從備份文件導入數據庫bdqn

下面用一個具體的實驗說明用mysqldump實現全庫備份+binlog的數據恢復

1)開啓binlog功能並重啓服務

wKiom1jl5RmzTNyFAADJPASkmh4419.jpg

wKioL1jl5RmxiV7xAAB7FRVBOP0208.jpg

2)建立備份目錄

wKiom1jl5RqhtvTMAAECTD4ceRk383.jpg

3)建立實驗數據

wKiom1jl5RvwW90fAAK69libYyk796.jpg

4)開始全庫備份(注意:全庫備份不會備份binlog日誌文件)

wKioL1jl5RuhgTSnAAFnJ9apn5Y881.jpg

5)備份mysqldump全庫備份以前的全部的binlog日誌文件(注意:真是生產環境中可能不止一個binlog文件)

wKioL1jl5RzBBZS1AAI6V-G-KZY600.jpg

6)由於全庫備份以前的binlog已經備份了,如今就刪除它們(即新產生的binlog以前的全部的binlog刪除)

wKiom1jl5RyTNhztAAGUEN4G304520.jpg

7)模擬誤操做,刪除了數據,而且新增長了新的數據

wKiom1jl5R2SVo3iAADIxGL_hl8870.jpg

8)備份自mysqldump以後的binlog日誌文件

wKioL1jl5R3jPAEsAAFUw1rjvJo074.jpg

9)使用mysqldump的全庫備份+binlog來恢復數據

①使用mysqldump的備份進行全庫恢復(即恢復到所有備份時候的全部數據)

wKioL1jl5R6ArbtfAAJM9oKUMbQ228.jpg

②分析新開啓的binlog日誌文件(我這裏是mysql-bin.000002)裏面誤操做的事件的起始位置和終止位置,只要跳過這一段事件便可

wKiom1jl5R-AqNpiAABwY8W_O_U062.jpg

wKiom1jl5WrzWau-AAHqrJk_t_w091.jpg

圖片看不清楚的能夠看下面複製的日誌:

# at 219

#170318 21:14:42 server id 1  end_log_pos 291 CRC32 0xddbf8eff    Query   thread_id=5 exec_time=0 error_code=0

SET TIMESTAMP=1489842882/*!*/;

SET @@session.pseudo_thread_id=5/*!*/;

SET @@session.foreign_key_checks=1,@@session.sql_auto_is_null=0, @@session.unique_checks=1,@@session.autocommit=1/*!*/;

SET @@session.sql_mode=1075838976/*!*/;

SET @@session.auto_increment_increment=1,@@session.auto_increment_offset=1/*!*/;

/*!\C utf8 *//*!*/;

SET @@session.character_set_client=33,@@session.collation_connection=33,@@session.collation_server=33/*!*/;

SET @@session.lc_time_names=0/*!*/;

SET @@session.collation_database=DEFAULT/*!*/;

BEGIN

/*!*/;

# at 291

#170318 21:14:42 server id 1  end_log_pos 339 CRC32 0x4a9ec8f2   Table_map: `bdqn`.`it` mapped to number 108

# at 339

#170318 21:14:42 server id 1  end_log_pos 388 CRC32 0x2e8a3da8    Delete_rows: table id 108 flags: STMT_END_F

 

BINLOG '

wjLNWBMBAAAAMAAAAFMBAAAAAGwAAAAAAAEABGJkcW4AAml0AAIDDwI8AALyyJ5K

wjLNWCABAAAAMQAAAIQBAAAAAGwAAAAAAAEAAgAC//wBAAAACHpoYW5nc2FuqD2KLg==

'/*!*/;

### DELETE FROM `bdqn`.`it`

### WHERE

###   @1=1

###  @2='zhangsan'

# at 388

#170318 21:14:42 server id 1  end_log_pos 419 CRC32 0xa1c06a4f    Xid = 43

COMMIT/*!*/;

③開始使用全庫備份後的增量備份的binlog日誌文件備份文件進行對全庫恢復後的增量數據的恢復

wKiom1jl5WuSuvKDAAGPJ5yN7xM732.jpg

10)查看恢復結果

wKioL1jl5Wvg0_2FAADjipacst0448.jpg

總結:從上圖顯示能夠看出數據恢復到正常狀態,實際生產環境中mysql數據庫的備份是週期性重複操做,全部一般是要編寫腳本實現,經過crond計劃任務週期性執行備份腳本。

 

 

經過crontad計劃任務週期性執行備份腳本

1)制定mysqldump備份方案

週日凌晨1點全庫備份;

週一到週六凌晨每隔4個小時增量備份一次

設置crontab任務,天天執行備份腳本:

wKiom1jl5WzjEwvcAAHvaEsIn3g980.jpg

2)編寫mysqlfullbackup.sh腳本(即mysql全庫備份腳本)

wKioL1jl5W6w1qkzAAQ74IxxqIw468.jpg

wKiom1jl5XKjKKMdAAf4NaqPecw785.jpg

圖片看不清楚的能夠看下面複製的腳本原文件:

#!/bin/bash

#Name:mysqlFullBackup.sh

#定義數據庫目錄

mysqlDir=/usr/local/mysql

#定義用於備份數據庫的用戶名和密碼

user=root

userpwd=123456

dbname=bdqn

#定義備份目錄

databackupdir=/opt/mysqlbackup

[ ! -d $databackupdir ] && mkdir $databackupdir

#定義郵件正文文件

emailfile=$databackupdir/email.txt

#定義郵件地址

email=root@localhost.localdomain

#定義備份日誌文件

logfile=$databackupdir/mysqlbackup.log

DATE=`date -I`

echo "" > $emailfile

echo $(date +"%Y-%m-%d %H:%M:%S") >>$emailfile

cd $databackupdir

#定義備份文件名

dumpfile=mysql_$DATE.sql

gzdumpfile=mysql_$DATE.sql.tar.gz

#使用mysqldump備份數據庫,請根據具體狀況設置參數

$mysqlDir/bin/mysqldump -u$user -p$userpwd --flush-logs-x $dbname > $dumpfile

#壓縮備份文件

if [ $? -eq 0 ]; then

   tar zcvf$gzdumpfile $dumpfile >> $emailfile 2>&1

   echo"BackupFileName:$gzdumpfile" >> $emailfile

   echo"DataBase Backup Success!" >> $emailfile

   rm -rf$dumpfile

else

   echo"DataBase Backup Fail!" >> $emailfile

fi

#寫日誌文件

echo"-------------------------------------------------" >> $logfile

cat $emailfile >> $logfile

#發送郵件通知

cat $emailfile | mail -s "MySQL Backup" $email

2)編寫mysqldailybackup.sh腳本(即mysql增量備份腳本)

wKiom1jl5XSyGK1oAATvqtxKuxA954.jpg

wKioL1jl5XXRPRtNAARDTQX6VlE561.jpg

wKioL1jl5Xyi1ru_AAy5MUbYQlo889.jpg

圖片看不清楚的能夠看下面複製的腳本原文件:

#!/bin/bash

#Name:mysqlDailyBackup.sh

#定義數據庫目錄和數據目錄

mysqldir=/usr/local/mysql

datadir=$mysqldir/data

#定義用於備份數據庫的用戶名和密碼

user=root

userpwd=123456

#定義備份目錄、每日備份文件備份到$databackupdir/daily

databackupdir=/opt/mysqlbackup

dailybackupdir=$databackupdir/daily

#定義郵件正文文件

emailfile=$databackupdir/email.txt

#定義郵件地址

email=root@localhost.localdomain

#定義日誌文件

logfile=$databackupdir/mysqlbackup.log

echo "" > $emailfile

echo $(date +"%Y-%m-%d %H:%M:%S") >>$emailfile

#刷新日誌,使數據庫使用新的二進制日誌文件

$mysqldir/bin/mysqladmin -u$user -p$userpwd --flush-logs

cd $datadir

#獲得二進制日誌列表

filelist=`cat mysql-bin.index`

icounter=0

for file in $filelist

do

  icounter=`exper$icounter + 1`

done

nextnum=0

ifile=0

for file in $filelist

do

 binlogname=`basename $file`

  nextnum=`expr$nextnum + 1`

#跳過最後一個二進制日誌(數據庫當前使用的二進制日誌文件)

if [ $nextnum -eq $icounter ]; then

  echo "Skiplastest!" > /dev/null

else

 dest=$dailybackupdir/$binlogname

#跳過已經備份的二進制日誌文件

if [ -e $dest ]; then

  echo "Skipexist $binlogname!" > /dev/null

else

#備份日誌文件到備份目錄

cp $binlogname $dailybackupdir

if [ $? -eq 0 ]; then

ifile=`expr $ifile + 1`

echo "$binlogname backup success!" >>$emailfile

      fi

   fi

fi

done

if [ $ifile -eq 0 ]; then

   echo "NoBinlog Backup!" >> $emailfile

else

   echo"Backup $ifile File(s)." >> $emailfile

   echo"Backup MySQL Binlog OK!" >> $emailfile

fi

#發送郵件通知

cat $emailfile | mail -s "MySQL Backup" $email

#寫日誌文件

echo"-----------------------------------------" >> $logfile

cat $emailfile >> $logfile


發送郵件測試:

wKiom1jl5X3gMoPcAACtXiP9SFU619.jpg

wKioL1jl5X-z4h5JAAMeF_EK4Ro561.jpg

安裝libmysqlclient.so.18

wKiom1jl5YCgycuBAAFYxfn0G0A033.jpg

wKioL1jl5YLyZ0ehAAMWA8YlH7w846.jpg

再次測試:

wKiom1jl5YOSdjLZAAIuw9Wiei4600.jpg

2、  使用xtrabackup進行MySQL數據庫備份

前面介紹mysqldump備份方式是採用邏輯備份,其最大的缺陷就是備份和恢復速度都慢,對於一個小於50G的數據庫而言,這個速度仍是能接受的,但若是數據庫很是大,那再使用mysqldump備份就不太適合了。

這時就須要一種好用又高效的工具,xtrabackup就是其中一款,號稱免費版的InnoDB HotBackup。

Xtrabackup實現是物理備份,並且是物理熱備。

目前主流的有兩個工具能夠實現物理熱備:ibbackup和xtrabackup;ibbackup是商業軟件,須要受權,很是昂貴。而xtrabackup功能比ibbackup還要強大,但倒是開源的。所以咱們這裏就來介紹xtrabackup的使用。

Xtrabackup提供了兩種命令行工具:

xtrabackup:專用於備份InnoDB和XtraDB引擎的數據;

innobackupex:這是一個perl腳本,在執行過程當中會調用xtrabackup命令,這樣用該命令便可以實現備份InnoDB,也能夠備份MyISAM引擎的對象。

 

Xtrabackup是由percona提供的mysql數據庫備份工具,特色:

(1)備份過程快速、可靠;

(2)備份過程不會打斷正在執行的事務;

(3)可以基於壓縮等功能節約磁盤空間和流量;

(4)自動實現備份檢驗;

(5)還原速度快。

官方連接地址:http://www.percona.com/software/percona-xtrabackup;能夠下載源碼編譯安裝,也能夠下載適合的RPM包或使用yum進行安裝或者下載二進制源碼包。

安裝xtrabackup

1)下載xtrabackup

wget https://www.percona.com/downloads/XtraBackup/Percona-XtraBackup-2.4.4/binary/tarball/percona-xtrabackup-2.4.4-Linux-x86_64.tar.gz

2)解壓

wKiom1jl5YOQepLwAABy7VcqeJI103.jpg

3)進入解壓目錄

wKioL1jl5YSBnP7_AACULyRFqiM067.jpg

4)複製bin下的全部程序到/usr/bin

wKiom1jl5YTDn7o1AABuR-Ihcts781.jpg

說明:Xtrabackup中主要包含兩個工具:

xtrabackup:是用於熱備份innodb,xtradb表中數據的工具,支持在線熱備份,能夠在不加鎖的狀況下備份Innodb數據表,不過此工具不能操做Myisam引擎表;

innobackupex:是將xtrabackup進行封裝的perl腳本,能同時處理Innodb和Myisam,但在處理Myisam時須要加一個讀鎖。

因爲操做Myisam時須要加讀鎖,這會堵塞線上服務的寫操做,而Innodb沒有這樣的限制,因此數據庫中Innodb表類型所佔的比例越大,則越有利。

5)安裝相關插件

wKioL1jl5YThrNKsAABt6w2C2J4217.jpg

6)下載percona-toolkit並安裝

#wget https://www.percona.com/downloads/percona-toolkit/2.2.19/RPM/percona-toolkit-2.2.19-1.noarch.rpm

至此就完成了xtrabackup的安裝,下面就能夠啓動備份了。

方案:xtrabackup徹底備份+binlog增量備份

1)開啓binlog功能並重啓mysqld服務

wKioL1jl5YXjYK_JAAE2k9MeNSc832.jpg

2)建立備份用的目錄(full:全備存放的目錄;inc:增量備份存放的目錄)

wKiom1jl5YXjAjj1AAFC2sJ945g883.jpg

3)建立實驗用數據庫、表、以及添加實驗數據

wKioL1jl5YbAMmIpAAG8e2NN2vA077.jpg

4)開始徹底備份

wKiom1jl5YbgCNhdAAJ1L7nBnzY644.jpg

wKioL1jl5YfhTv6UAADXw3Pkq8M652.jpg

5)咱們能夠看一下備份後的文件

wKiom1jl5YeT8we8AAC09BULKxA928.jpg

說明:1)在使用innobackupex進行備份時,還可使用--no-timestamp選項來阻止命令自動建立一個以時間命名的目錄;如此一來,innobackupex命令將會建立一個BACKUP-DIR目錄來存儲備份數據。

2)還能夠加—database選項指定要備份的數據庫,這裏指定的數據庫只對MyISAM表有效,對於InnoDB數據來講都是全備(全部數據庫中的InnoDB數據都進行了備份,不是隻備份指定的數據庫,恢復時也同樣)。

針對裏面的各個文件的說明:

wKioL1jl5YiRvbQwAALT1ksfRRw589.jpg

下面咱們護體看一下這幾個文件:

wKiom1jl5YngNa9WAAFXxVq26WA409.jpg

wKiom1jl5YnzyB2ZAAC4pwgF9j8136.jpg

wKioL1jl5YqwJj-rAAQ6sT8V30M015.jpg

說明:xtrabackup_binlog_pos_innodb和xtrabackup_binary在這個版本里面沒有了,由於版本較新,這兩個文件在新版給刪除了,只存在於老版本。

wKiom1jl5YyDsmXIAALD4NFEjnQ293.jpg

6)至此徹底備份成功,而後咱們開啓一個新的binlog日誌文件,並向mysql某個庫插入幾條數據。

wKioL1jl5YzCttohAAHSwbwhr20227.jpg

wKioL1jl5Yzi2wAAAAEXsUy-shY863.jpg

7)模擬誤操做,刪除一條數據,同時再插入兩條新數據

wKiom1jl5Y3gdlb1AAIh1FgP33U785.jpg

8)開始增量備份binlog日誌文件

wKiom1jl5biwUOnzAAB7SGGrwT4783.jpg

9)開始還原數據庫

①模擬數據庫損壞

我這裏直接使用刪除數據目錄文件來模擬損壞。

wKiom1jl5bjS-gFnAACOLsz78Lg354.jpg

②而後首先是還原徹底備份,準備(prepare)一個徹底備份

說明1:通常狀況下,在備份完成後,數據尚且不能用於恢復操做,由於備份的數據中可能會包含還沒有提交的事務或已經提交但還沒有同步至數據文件中的事務。所以,此時數據文件仍處理不一致狀態。「準備」的主要做用正是經過回滾未提交的事務及同步已經提交的事務至數據文件也使得數據文件處於一致性狀態。

說明2:在準備(prepare)過程結束後,InnoDB表數據已經前滾到整個備份結束的點,而不是回滾到xtrabackup剛開始時的點。

innobakupex命令的--apply-log選項可用於實現上述功能。以下面的命令:

--apply-log指明是將日誌應用到數據文件上,完成以後將備份文件中的數據恢復到數據庫中:

wKioL1jl5bmCNUU3AABqFT-lWGc384.jpg

wKiom1jl5bmCSMrtAAEkO41bHHg865.jpg

說明3:在實現「準備」的過程當中,innobackupex一般還可使用--use-memory選項來指定其可使用的內存的大小,默認一般爲100M。若是有足夠的內存可用,能夠多劃分一些內存給prepare的過程,以提升其完成速度。

③正式開始還原徹底備份的數據庫

說明1:innobackupex命令的--copy-back選項用於執行恢復操做,其經過複製全部數據相關的文件至mysql服務器DATADIR目錄中來執行恢復過程。innobackupex經過backup-my.cnf來獲取DATADIR目錄的相關信息。

wKioL1jl5bmCD-ITAABx2wfmNhQ717.jpg

wKioL1jl5bqxPFXLAAC4fbWYhLM990.jpg

wKiom1jl5buwarVLAAPqxvg5b14166.jpg

④修改data目錄的屬組和屬組爲mysql:mysql,並重啓mysqld服務。

wKiom1jl5byyMceTAACN4wpshf8546.jpg

wKioL1jl5bzA3xawAAB_GPProUo364.jpg

⑤驗證還原後的數據

wKioL1jl5byyKOtZAADYXdpvdqI018.jpg

⑥開始還原增量備份,但在此以前爲了防止還原時產生大量的二進制日誌,在還原時可臨時關閉二進制日誌後再還原。

wKiom1jl5b3RqzClAACBOm8d6RI022.jpg

⑦有誤操做的,在開始還原增量備份以前,要去binlog備份文件把誤操做事件刪除

wKioL1jl5b3Ri5VcAACOo1_WCG4443.jpg

wKiom1jl5b2S3q0wAAG2IXtQl18892.jpg

⑧正式開始還原增量備份

wKioL1jl5b3TFEK2AACOP6d7ysw038.jpg

wKiom1jl5b7CBL1_AACL_Rrddkc947.jpg

⑨從新啓動二進制日誌並驗證還原數據

wKiom1jl5b7SMMJgAAIYyAtZyiY691.jpg


附:Xtrabackup的「流」及「備份壓縮」功能

做用:Xtrabackup對備份的數據文件支持「流」功能,便可以將備份的數據經過STDOUT傳輸給tar程序進行歸檔,而不是默認的直接保存至某備份目錄中。

要使用此功能,僅須要使用--stream選項便可。如:

wKioL1jl5b-ClYGHAABvbKDv7wY736.jpg

看不清截圖的能夠看下面複製粘貼的命令:

# innobackupex --user=root --password="123456"--stream=tar /opt/mysqlbackup/full/ | gzip >/opt/mysqlbackup/full/full_`date+%F_%H%M%S`.tar.gz

(再補充一句,現實生產環境中,基本上都要用流與備份壓縮功能,由於這樣能夠很大程度上節省空間)

相關文章
相關標籤/搜索