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