1. 程式人生 > 其它 >Mysql之xtrabackup工具的使用

Mysql之xtrabackup工具的使用

xtrabackup介紹

MySQL冷備、mysqldump、MySQL熱拷貝都無法實現對資料庫進行增量備份。在實際生產環境中增量備份是非常實用的,如果資料大於50G或100G,儲存空間足夠的情況下,可以每天進行完整備份,如果每天產生的資料量較大,需要定製資料備份策略。例如每週實用完整備份,週一到週六實用增量備份。而Percona-Xtrabackup就是為了實現增量備份而出現的一款主流備份工具

注:xtrabackup只能備份innoDB和xtraDB兩種資料引擎的表,而不能備份MyISAM資料表。

xtrabackup優缺點

XtraBackup的優點:

(1)備份速度快,物理備份可靠
(2)備份過程不會打斷正在執行的事務(無需鎖表)
(3)能夠基於壓縮等功能節約磁碟空間和流量
(4)自動備份校驗
(5)還原速度快
(6)可以流傳將備份傳輸到另外一臺機器上
(7)在不增加伺服器負載的情況備份資料

XtraBackup的缺點:
(1)檔案大
(2)不總是可以跨平臺、作業系統和MySQL版本

xtrabackup的使用

XtraBackup 8.0支援mysql 8.0

XtraBackup 2.4支援mysql 5.1、5.5、5.6、5.7

XtraBackup 8.0下載地址:https://www.percona.com/downloads/Percona-XtraBackup-LATEST/

XtraBackup 2.4下載地址:https://www.percona.com/downloads/Percona-XtraBackup-2.4/LATEST/ 

解壓安裝包

rpm -ivh percona-xtrabackup-24-2.4.21-1.el6.x86_64.rpm

warning: percona-xtrabackup-24-2.4.21-1.el6.x86_64.rpm: Header V4 RSA/SHA256 Signature, key ID 8507efa5: NOKEY
error: Failed dependencies:
	libev.so.4()(64bit) is needed by percona-xtrabackup-24-2.4.21-1.el6.x86_64
	perl(DBD::mysql) is needed by percona-xtrabackup-24-2.4.21-1.el6.x86_64
	perl(Digest::MD5) is needed by percona-xtrabackup-24-2.4.21-1.el6.x86_64

可能會出現以上錯誤,是因為缺少依賴包導致的

wget ftp://rpmfind.net/linux/atrpms/el6-x86_64/atrpms/stable/libev-4.04-2.el6.x86_64.rpm

rpm -ivh libev-4.04-2.el6.x86_64.rpm

yum -y install perl-DBD*

yum -y install perl-Digest*

依賴包安裝完成後重新解壓即可 

echo "export PATH=\$PATH:/usr/local/xtrabackup/bin" >> /etc/profile

登入資料庫建立備份使用者

mysql -uroot -p

create user 'backup'@'%' identified by 'yayun';
grant all privileges on *.* to 'backup'@'%' identified by 'yayun';
flush privileges;

建立目錄存放mysql備份檔案

mkdir -p /data/backup/

mkdir -p /data/backup/inc1

mkdir -p /data/backup/inc2

全量備份

#mysql.sock填入自己實際路徑即可

innobackupex --defaults-file=/etc/my.cnf --user=backup --password=yayun --socket=/tmp/mysql.sock /data/backup

第一次增量備份

#incremental-basedir指定全量備份生成的檔案

innobackupex --defaults-file=/etc/my.cnf --user=backup --password=yayun --socket=/tmp/mysql.sock --incremental /data/backup/inc1 --incremental-basedir=/data/backup/2022-04-18_19-54-40

第二次增量備份

#incremental-basedir指定第一次增量備份生成的檔案

innobackupex --defaults-file=/etc/my.cnf --user=backup --password=yayun --socket=/tmp/mysql.sock --incremental /data/backup/inc2 --incremental-basedir=/data/backup/inc1/2022-04-18_19-56-38

備份恢復

#先停止mysql資料庫

systemctl stop mysqld

#恢復需要將資料庫data目錄中的資料刪除,可以先進行備份,data目錄根據自己實際情況而定

mv /usr/local/mysql/data /usr/local/mysql/data_backup20220419

mkdir /usr/local/mysql/data

#全量備份回滾,這裡指定到全量備份生成的檔案

innobackupex --apply-log --redo-only /data/backup/2022-04-18_19-54-40

#第一次增量備份回滾,這裡指定到第一次增量備份生成的檔案

innobackupex --apply-log --redo-only /data/backup/2022-04-18_19-54-40  --incremental-dir /data/backup/inc1/2022-04-18_19-56-38

#第二次增量備份回滾,,這裡指定到第二次增量備份生成的檔案

innobackupex --apply-log /data/backup/2022-04-18_19-54-40  --incremental-dir /data/backup/inc2/2022-04-18_19-58-24

#資料copy到資料庫目錄,這裡指定到全量備份生成的檔案

innobackupex --copy-back /data/backup/2022-04-18_19-54-40

授權data目錄

chown -R mysql.mysql /usr/local/mysql/data

重啟mysql即可

systemctl restart mysqld