當前位置:
首頁 > 知識 > 刪庫跑路?這篇文章教你如何使用xtraback備份MySQL資料庫

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

可以啦,讓我們繼續相互陪伴。

一、mysqldump備份方式是採用邏輯備份。最大的缺陷就是備份和恢復的速度都慢,對於一個50G的資料庫而言,這個速度還是可以接受的,但是如果資料庫非常大,那在使用mysqdump備份就不是太合適了。。

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

xtraback特點如下:

備份過程快速,可靠

備份過程不會打斷正在執行的事務

能夠基於壓縮等功能節約磁碟空間和流量

自動實現備份檢驗

還原速度快

二、安裝xtraback

1)下載xtraback

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

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

3)進入解壓目錄複製bin下的所有程序到/usr/bin下即可

[root@master ~]# cd percona-xtrabackup-2.4.4-Linux-x86_64/

[root@master percona-xtrabackup-2.4.4-Linux-x86_64]# cp bin/* /usr/bin/

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

4)安裝相關的插件

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並安裝

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

[root@master ~]# rpm -ivh percona-toolkit-2.2.19-1.noarch.rpm

warning: percona-toolkit-2.2.19-1.noarch.rpm: Header V4 DSA/SHA1 Signature, key ID cd2efd2a: NOKEY

Preparing... ################################# [100%]

Updating / installing...

1:percona-toolkit-2.2.19-1 ################################# [100%]

三、備份

方案一:xtrabackup完全備份+binlog增量備份 (需要開啟bin-log日誌)

創建備份目錄

[root@master ~]# mkdir -p /opt/mysqlbackup/

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

插入數據後我們進行完全備份 如下:

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

以上完全備份路徑為我們剛剛創建的mysqlbackup目錄下。

出現以下提示證明備份成功

備份後的文件如下:

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

對完全備份的後資料庫更改進行二進位日誌增量備份:

查看完全備份時binlog日誌位置(position):

以上就是我們完全備份完成後的位置,那麼如果我們現在插入數據的話,是從這個位置開始的,從這個位置開始的我們稱為增量備份,現在我們在tb1表中插入數據如下:

增量備份二進位文件:

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

備份完成後,我們模擬資料庫損壞,誤刪操作,如下

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

恢復資料庫

首先恢復我們的完全備份,也就是tom1/2/3的數據 如下:

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

出現以下提示證明還原成功

當數據恢復至DATADIR目錄以後,還需要確保所有數據文件的屬主和屬組均為正確的用戶,如mysql,否則,在啟動mysqld之前還需要事先修改數據文件的屬主和屬組。如:

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

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

以上看出完全備份已經還原成功,因為我們在完全備份的時候插入了3行數據,那麼接下來我們還原增量備份如下:

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

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

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

二、xtrabackup完全備份+xtrabacup增量備份

測試環境準備

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

以上操作解釋:

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

接下來執行完全備份如下:

[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)

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

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

備份第一次增量如下:

[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表中再次插入數據,進行第二次增量備份

第二次增量備份如下:

[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表刪了

開始恢復完全備份如下:

[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

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

[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/

三、恢復第二次增量

[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

恢復整個庫

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

停止mysql資料庫-開始rsync數據文件

[root@master ~]# systemctl stop mysqld

[root@master ~]# cd /opt/mysqlbackup/full/full_incre_20171121_123051/

[root@master full_incre_20171121_123051]# rsync -rvt --exclude "xtrabackup_checkpoints" --exclude "xtrabackup_logfile" ./ /usr/local/mysql/data/

授予mysql訪問許可權

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

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

文章整理於輕鬆學習Linux


喜歡這篇文章嗎?立刻分享出去讓更多人知道吧!

本站內容充實豐富,博大精深,小編精選每日熱門資訊,隨時更新,點擊「搶先收到最新資訊」瀏覽吧!


請您繼續閱讀更多來自 程序員之家 的精彩文章:

15張Vim速查表-幫你提高N倍效率
程序員是如何低調炫富的?

TAG:程序員之家 |