隨着MySQL 8.0的推出,Percona公司也相繼推出了percona-xtrabackup-8.0,而原來的2.4版本也將繼續支持MySQL和Percona Server 5.6和5.7數據庫。
由於MySQL 8.0在數據字典,重做日志和撤消日志中引入的更改與以前的版本不兼容,因此Percona XtraBackup 8.0 目前不支持8.0之前的版本。
本文主要記錄下xtrabackup8.0與原來舊版本的不同和使用。
Usage: [xtrabackup [--defaults-file=#] --backup | xtrabackup [--defaults-file=#] --prepare] [OPTIONS]
--target-dir destination directory 備份的目標目錄。如果目錄不存在,xtrabackup將創建它。如果目錄確實存在且為空,則xtrabackup將成功;xtrabackup不會覆蓋現有的文件;會在操作系統層面報錯,文件存在。
--backup take backup to target-dir
--prepare prepare a backup for starting mysql server on the backup 為啟動備份上的mysql服務器准備一個備份。(類似innobackupex --apply-log)
--apply-log-only 此項較為重要。主要應用與增備,在常規備份中,執行兩種操作以使數據庫保持一致:從日志文件對數據文件重播已提交的事務,回滾未提交的事務。在准備備份時,必須跳過未提交事務的回滾,因為在備份時未提交的事務可能正在進行中,它們很可能在下一次增量備份中提交。您應該使用—apply-log-only選項來防止回滾階段。
警告:如果您不使用—apply-log-only選項來防止回滾階段,那么您的增量備份將是無用的。事務回滾后,無法應用進一步的增量備份。
--compress 該選項告訴xtrabackup使用指定的壓縮算法壓縮所有輸出數據,包括事務日志文件和元數據文件。目前唯一支持的算法是quicklz。與--compress-threads配合使用。
--compact 通過跳過二級索引頁創建一個緊湊的備份。
--compress-threads 此選項指定xtrabackup用於並行數據壓縮的工作線程數量。該選項默認為1。並行壓縮(壓縮線程)可以與並行文件復制(並行)一起使用。例如,--parallel=4 --compress --compress-threads=2將創建4個I/O線程,讀取數據並將其傳輸到2個壓縮線程。
--copy-back 將先前備份目錄中的所有文件復制到其原始位置。除非指定強制非空目錄選項,否則此選項不會復制現有文件。與MariaDB的Mariabackup的一項copy-back類似,做的時候確保datadir目錄為空,你可以把原目錄改個名字,再創建一個新的目錄。
--databases 此選項指定應該備份的數據庫和表的列表,它支持database_name.table_name,比如只想備份test庫下的su表,--databases=test.su。
--databases-exclude 排除基於名稱的數據庫,基本語法與--databases相同,不想備份的數據庫或表。注意點!此選項優先級高於--databases。
--galera-info 該選項創建xtrabackup_galera_info文件,該文件包含備份時的本地節點狀態。選項應該在執行Percona XtraDB集群備份時使用。
--incremental 該選項告訴xtrabackup創建增量備份。它被傳遞給xtrabackup子進程。指定此選項后,還可以指定--incremental-lsn或--incremental-basedir。如果兩個選項都沒有提供,則默認情況下將option——incremental-basedir傳遞給xtrabackup,設置為備份基本目錄中的第一個時間戳備份目錄。與原來舊版本--incremental類似
--slave-info 此選項在備份復制從屬服務器時非常有用。它打印主服務器的二進制日志位置。它還將此信息作為更改主命令寫入xtrabackup_slave_info文件。可以通過在這個備份上啟動一個從服務器並發出一個CHANGE master命令來設置這個主服務器的新從服務器,該命令的二進制日志位置保存在xtrabackup_slave_info文件中。
全量備份:
xtrabackup --defaults-file=/etc/my.cnf --user='xx' --password='xx' -S /tmp/mysql.sock --compress --compress-threads=2 --backup --target-dir=/opt/mydump/
壓縮模式需要先安裝Percona自研的qpress壓縮工具。
yum install https://repo.percona.com/yum/percona-release-latest.noarch.rpm yum install qpress -y
可以看一下備份出來的內容,如下圖:
都是以.qp為結尾的,不可讀,也算是另一種加密了。
解壓
for bf in `find . -iname "*\.qp"`; do qpress -d $bf $(dirname $bf) && rm -f $bf; done
恢復備份期間增量數據(這一步類似innobackupex --apply-log)
xtrabackup --prepare --target-dir=/opt/mydump/
恢復
① 關閉mysqld進程
② 確保datadir目錄為空,可以把原來的數據目錄mv到其他地方
③ 恢復
# xtrabackup --defaults-file=/etc/my.cnf --copy-back --target-dir=/opt/mydump/
④ 更改目錄屬性
chown mysql:mysql -R /data/mysql
⑤ 啟動mysqld進程
增備(先建立一個全備):
xtrabackup --backup --target-dir=/opt/mydump
然后基於這個全備去做增備:
xtrabackup --backup --target-dir=/opt/incr1 --incremental-basedir=/opt/mydump
第二個增備:
xtrabackup --backup --target-dir=/opt/incr2 --incremental-basedir=/opt/incr1
應用第一個增備到全備:
xtrabackup --prepare --apply-log-only --target-dir=/opt/mydump --incremental-dir=/opt/incr1
應用第二個增備到全備(這個時候就不用加--apply-log-only了,至於理由與舊版本的增備相同):
xtrabackup --prepare --target-dir=/opt/mydump --incremental-dir=/opt/incr2
恢復過程與全備相同。
https://www.linuxidc.com/Linux/2016-08/134535.htm
https://www.percona.com/doc/percona-xtrabackup/2.4/howtos/recipes_ibkx_compressed.html