刪庫跑路?使用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)安裝相關的外掛
yuminstallperl-DBIperl-DBD-MySQLperl-Time-HiResperl-IO-Socket-SSLperl-TermReadKey.x86_64perl-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/{full,inc}
首先我們創一個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服務檢視還原是否成功
總結
以上所述是小編給大家介紹的刪庫跑路?使用xtraback備份MySQL資料庫的方法,希望對大家有所幫助,如果大家有任何疑問請給我留言,小編會及時回覆大家的。在此也非常感謝大家對我們網站的支援!