刪庫跑路?這篇文章教你如何使用xtraback備份MySQL數據庫

1、mysqldump備份方式是採用邏輯備份。最大的缺陷就是備份和恢復的速度都慢,對於一個50G的數據庫而言,這個速度仍是能夠接受的,可是若是數據庫很是大,那在使用mysqdump備份就不是太合適了。。mysql

這時候就須要一種很好用又高效的工具,xtraback 就是其中的一款,號稱免費版的innodb hotbackupsql

xtraback特色以下:數據庫

  1. 備份過程快速,可靠app

  2. 備份過程不會打斷正在執行的事務工具

  3. 可以基於壓縮等功能節約磁盤空間和流量測試

  4. 自動實現備份檢驗.net

  5. 還原速度快插件

2、安裝xtraback3d

1)下載xtraback日誌

 
  1. 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)解壓

 
  1. [root@master ~]# tar zxf percona-xtrabackup-2.4.4-Linux-x86_64.tar.gz  

3)進入解壓目錄複製bin下的全部程序到/usr/bin下便可

 
  1. [root@master ~]# cd percona-xtrabackup-2.4.4-Linux-x86_64/  
  2. [root@master percona-xtrabackup-2.4.4-Linux-x86_64]# cp bin/* /usr/bin/ 

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

4)安裝相關的插件

 
  1. yum install perl-DBI perl-DBD-MySQL perl-Time-HiRes perl-IO-Socket-SSL perl-TermReadKey.x86_64 perl-Digest-MD5 –y 

5)下載percona-toolkit並安裝

 
  1. wget https://www.percona.com/downloads/percona-toolkit/2.2.19/RPM/percona-toolkit-2.2.19-1.noarch.rpm  
  2. [root@master ~]# rpm -ivh percona-toolkit-2.2.19-1.noarch.rpm  
  3. warning: percona-toolkit-2.2.19-1.noarch.rpm: Header V4 DSA/SHA1 Signature, key ID cd2efd2a: NOKEY  
  4. Preparing... ################################# [100%]  
  5. Updating / installing...  
  6.  1:percona-toolkit-2.2.19-1 ################################# [100%] 

3、備份

方案一:xtrabackup徹底備份+binlog增量備份 (須要開啓bin-log日誌)

建立備份目錄

 
  1. [root@master ~]# mkdir -p /opt/mysqlbackup/{full,inc} 

首先咱們創一個test庫,在test庫中建立一個tb1的表,在tb1表中插入三行數據,以下:

插入數據後咱們進行徹底備份 以下:

 
  1. [root@master ~]# innobackupex --user=root --password=pwd123 /opt/mysqlbackup/full/ 

以上徹底備份路徑爲咱們剛剛建立的mysqlbackup目錄下。

出現如下提示證實備份成功

備份後的文件以下:

至此全備徹底成功,而後向mysql某個庫插入幾條數據,而後進行增量備份

對徹底備份的後數據庫更改進行二進制日誌增量備份:

查看徹底備份時binlog日誌位置(position):

以上就是咱們徹底備份完成後的位置,那麼若是咱們如今插入數據的話,是從這個位置開始的,從這個位置開始的咱們稱爲增量備份,如今咱們在tb1表中插入數據以下:

增量備份二進制文件:

 
  1. [root@master ~]# mysqlbinlog --start-position=1279 /usr/local/mysql/data/mysql-bin.000001 > /opt/mysqlbackup/inc/`date +%F`.sql 

備份完成後,咱們模擬數據庫損壞,誤刪操做,以下

 
  1. [root@master ~]# rm -rf /usr/local/mysql/data/*  

恢復數據庫

首先恢復咱們的徹底備份,也就是tom1/2/3的數據 以下:

 
  1. [root@master ~]#innobackupex --copy-back /opt/mysqlbackup/full/2017-11-21_11-47-42/ 

出現如下提示證實還原成功

當數據恢復至DATADIR目錄之後,還須要確保全部數據文件的屬主和屬組均爲正確的用戶,如mysql,不然,在啓動mysqld以前還須要事先修改數據文件的屬主和屬組。如:

 
  1. # chown -R mysql:mysql /usr/local/mysql/data/ 

重啓mysql服務查看是否還原成功

以上看出徹底備份已經還原成功,由於咱們在徹底備份的時候插入了3行數據,那麼接下來咱們還原增量備份以下:

爲了防止還原時產生大量的二進制日誌,在還原時可臨時關閉二進制日誌後再還原:

隨後咱們驗證是否還原成功!

此時咱們已經所有恢復成功,以上經過binlog+xtrabackup工具來實現的備份,是否是感受有點小麻煩。如感受到麻煩請看-如下方案二。

2、xtrabackup徹底備份+xtrabacup增量備份

測試環境準備

建立一個測試數據庫,並建立一張表輸入幾行數據

以上操做解釋:

建立了一個test庫,在test庫中建立了xx表,在xx表中插入了tom1和tom2的數據。

接下來執行徹底備份以下:

 
  1. [root@master ~]# xtrabackup --defaultes-file=/etc/my.cnf --user=root --password='pwd123' --popt=3306 --backup --target-dir=/opt/mysqlbackup/full/full_incre_$(date +%Y%m%d_%H%M%S)  

以上黑色部分是存放位置。出現如下證實備份成功

這時候咱們再次插入數據,進行一次增量備份

備份第一次增量以下:

 
  1. [root@master ~]# xtrabackup --defaultes-file=/etc/my.cnf --user=root --password='pwd123' --popt=3306 --backup --target-dir=/opt/mysqlbackup/inc/inc_incre_$(date +%Y%m%d_%H%M%S) --incremental-basedir=/opt/mysqlbackup/full/full_incre_20171121_123051/ 

出現如下表示備份成功!

以上備份路徑爲:/opt/mysqlbackup/inc/咱們能夠查看備份的文件

接下來在xx表中再次插入數據,進行第二次增量備份

第二次增量備份以下:

 
  1. [root@master ~]# xtrabackup --defaultes-file=/etc/my.cnf --user=root --password='pwd123' --popt=3306 --backup --target-dir=/opt/mysqlbackup/inc/inc_incre_$(date +%Y%m%d_%H%M%S) --incremental-basedir=/opt/mysqlbackup/inc/inc_incre_20171121_124604/ 

出現如下提示證實備份成功

xtrabacup進行增量恢復

爲了實現效果我把xx表刪了

開始恢復徹底備份以下:

 
  1. [root@master ~]# xtrabackup --defaultes-file=/etc/my.cnf --prepare --user=root --password="pwd123" --apply-log-only --target-dir=/opt/mysqlbackup/full/full_incre_20171121_123051 

2、恢復第一次增量(tom3)

 
  1. [root@master ~]# xtrabackup --defaultes-file=/etc/my.cnf --prepare --user=root --password="pwd123" --apply-log-only --target-dir=/opt/mysqlbackup/full/full_incre_20171121_123051 --incremental-dir=/opt/mysqlbackup/inc/inc_incre_20171121_124604/ 

3、恢復第二次增量

 
  1. [root@master ~]# xtrabackup --defaultes-file=/etc/my.cnf --prepare --user=root --password="pwd123" --apply-log-only --target-dir=/opt/mysqlbackup/full/full_incre_20171121_123051 --incremental-dir=/opt/mysqlbackup/inc/inc_incre_20171121_125202 

恢復整個庫

 
  1. [root@master ~]# xtrabackup --defaultes-file=/etc/my.cnf --prepare --user=root --password="pwd123" --target-dir=/opt/mysqlbackup/full/full_incre_20171121_123051 

中止mysql數據庫-開始rsync數據文件

 
  1. [root@master ~]# systemctl stop mysqld  
  2. [root@master ~]# cd /opt/mysqlbackup/full/full_incre_20171121_123051/  
  3. [root@master full_incre_20171121_123051]# rsync -rvt --exclude 'xtrabackup_checkpoints' --exclude 'xtrabackup_logfile' ./ /usr/local/mysql/data/ 

授予mysql訪問權限

 
  1. [root@master ~]# chown -R mysql:mysql /usr/local/mysql/data/ 

啓動mysql服務查看還原是否成功

相關文章
相關標籤/搜索