Percona XtraBackup 支持的mysql版本信息:
Percona XtraBackup下包含兩個工具,Innobackup和xtrabackup栏豺。
下面介紹下各個版本這兩個工具的差異彬碱。
2.2 版本支持 InnoDB, XtraDB, and MyISAM tables on MySQL 5.1, 5.5 and 5.6 servers, as well as Percona Serverwith XtraDB.
innobackupex a wrapper script that provides functionality to backup a wholeMySQL database instance with MyISAM, InnoDB, and XtraDBtables. ###2.2版本時期都用此工具備份,因為可備份包含Innodb和Myisam引擎的表奥洼;
xtrabackup a compiled C binary, which copies only InnoDB and XtraDB data ###不支持備份Myisam表堡妒。
2.3 版本支持 InnoDB, XtraDB, and MyISAM tables on MySQL 5.1, 5.5 and 5.6 servers, as well as Percona Serverwith XtraDB. ###該版本中xtrabackup支持了Innodb和Myisam引擎的表備份,innobackupex工具只是xtrabackup的一個軟鏈接溉卓,而且在后續(xù)版本中會被去掉皮迟。
innobackupex innobackupex is the symlink for xtrabackup. innobackupexstill supports all features and syntax as 2.2 version did, but is now deprecated and will be removed in next major release.
xtrabackup a compiled C binary that provides functionality to backup a whole MySQL database instance with MyISAM, InnoDB, and XtraDB tables.
2.4 版本支持 InnoDB, XtraDB, and MyISAM tables on MySQL 5.1, 5.5, 5.6 and 5.7 servers, as well as Percona Server with XtraDB. ###該版本中xtrabackup支持了mysql5.7,其他特性和2.3版本一致桑寨。
innobackupex innobackupex is the symlink for xtrabackup. innobackupexstill supports all features and syntax as 2.2 version did, but is now deprecated and will be removed in next major release.
xtrabackup a compiled C binary that provides functionality to backup a whole MySQL database instance with MyISAM, InnoDB, and XtraDBtables.
8.0 版本支持 InnoDB, XtraDB, and MyISAM tables on MySQL 8.0 servers as well as Percona Server with XtraDB, Percona Server 8.0, and Percona XtraDB Cluster 8.0伏尼。 ###此版本單獨(dú)為mysql8.0開發(fā),不支持8.0之前的db版本尉尾。
xtrabackup a compiled C binary that provides functionality to backup a whole MySQL database instance with MyISAM, InnoDB, and XtraDB tables.
innobackupex ###此工具已經(jīng)被移除
目前使用版本大多以2.4為主爆阶,故不區(qū)分 xtrabackup 和 innobackupex,Myisam和Innodb 都支持沙咏。
所以以 xtrabackup 為例測試備份恢復(fù):
全備和恢復(fù)
全量備份:
xtrabackup -uroot -proot123 --backup --target-dir=/data/backup/20190103/
全量恢復(fù):
xtrabackup --prepare --target-dir=/data/backup/20190103/
xtrabackup --move-back|--copy-back --target-dir=/data/backup/20190103/ --datadir=/data/mysql/mysql3306/data
--move-back 不保留備份辨图,相當(dāng)于 mv
--copy-back 保留備份,相當(dāng)于cp
chown -R mysql:mysql /data/mysql/mysql3306/data
啟動:
service mysql start
增量備份和恢復(fù)
先做全量備份:
xtrabackup -uroot -proot123 --parallel=4 --backup --target-dir=/data/backup/20190103/
[root@localhost 20190103]# cat xtrabackup_checkpoints
backup_type = full-backuped
from_lsn = 0
to_lsn = 2558962
last_lsn = 2558971
compact = 0
recover_binlog_info = 0
增量備份1:
xtrabackup -uroot -proot123 --backup --parallel=4 --target-dir=/data/backup/inc1 --incremental-basedir=/data/backup/20190103/
[root@localhost inc1]# cat xtrabackup_checkpoints
backup_type = incremental
from_lsn = 2558962
to_lsn = 2559915
last_lsn = 2559924
compact = 0
recover_binlog_info = 0
增量備份2:
xtrabackup -uroot -proot123 --backup --target-dir=/data/backup/inc2 --incremental-basedir=/data/backup/inc1
[root@localhost inc2]# cat xtrabackup_checkpoints
backup_type = incremental
from_lsn = 2559915
to_lsn = 2560568
last_lsn = 2560577
compact = 0
recover_binlog_info = 0
In this case you can see that there is a difference between the to_lsn (last checkpoint LSN) and last_lsn (last copied LSN), this means that there was some traffic on the server during the backup process.
to_lsn和last_lsn之間存在差異肢藐,表示備份期間服務(wù)器有some traffic
增量備份時有兩種增量備份策略:
1.讀取所有的頁的LSN故河,找到LSN大于之前的全備或者增量備的頁,然后copy pages吆豹;
2.適用于percona server鱼的,開啟 [changed page tracking]參數(shù)理盆,可以將變化的頁記錄到一個位圖文件中,增量備份時只需要讀取該文件即可凑阶,大大減少讀取數(shù)據(jù)頁的請求 猿规。即使位圖文件可用,你也可以強(qiáng)制讀取所有頁宙橱, [xtrabackup --incremental-force-scan] 姨俩。
實(shí)際上,你也可以指定LSN來執(zhí)行增量備份 [xtrabackup --incremental-lsn]师郑,而不需要之前的全備文件哼勇, 不過恢復(fù)時仍然需要全備,否則這個增量備份將毫無用處呕乎。
備份完成后再執(zhí)行幾條sql語句积担,模擬實(shí)際場景:
insert into tt values(400);
insert into tt values(401);
insert into tt values(402);
然后模擬數(shù)據(jù)庫宕機(jī),恢復(fù)數(shù)據(jù): kill -9 xxxx
刪除數(shù)據(jù)文件目錄: mv /data/mysql/mysql3306/data /data/mysql/mysql3306/data.bak
刪除日志文件目錄: mv /data/mysql/mysql3306/logs /data/mysql/mysql3306/logs.bak
創(chuàng)建需要目錄: mkdir /data/mysql/mysql3306/{data,logs}
完整及增量恢復(fù)
prepare:
xtrabackup --prepare --apply-log-only --target-dir=/data/backup/20190103
xtrabackup --prepare --apply-log-only --target-dir=/data/backup/20190103 --incremental-dir=/data/backup/inc1
xtrabackup --prepare --target-dir=/data/backup/20190103 --incremental-dir=/data/backup/inc2 ##最后一個去掉 --apply-log-only參數(shù)
restore:
xtrabackup --parallel=4 --copy-back --target-dir=/data/backup/20190103 --datadir=/data/mysql/mysql3306/data
啟動:
service mysqld start
由于備份完成后仍有數(shù)據(jù)變動猬仁,查看恢復(fù)完成的最后binlog位置:
下面兩種方式均可以:
一是查看增量備份文件的記錄
二是查看全部restore完成后的文件記錄帝璧,二者一致
[root@localhost data]# cat /data/backup/inc2/xtrabackup_binlog_info
mysql-bin.000001 2576
[root@localhost data]# cat /data/mysql/mysql3306/data/xtrabackup_binlog_pos_innodb
mysql-bin.000001 2576
如果主機(jī)上還保存有最近的binlog文件,則恢復(fù)即可:
mysqlbinlog --start-position=2576 mysql-bin.000001 |mysql -uroot -proot123
壓縮備份與恢復(fù):
多線程壓縮全備:
xtrabackup -uroot -proot123 --backup --compress --compress-threads=4 --target-dir=/data/backup/compressed/ ## 1.4G可以壓縮到16M
全備解壓縮:
yum install -y qpress
xtrabackup --parallel=4 --decompress --target-dir=/data/backup/compressed/ --remove-original
全備恢復(fù):
xtrabackup --prepare --target-dir=/data/backup/compressed/
xtrabackup --move-back|--copy-back --target-dir=/data/backup/20190103/ --datadir=/data/mysql/mysql3306/data
chown -R mysql:mysql /var/lib/mysql
啟動:
service mysql start
加密備份與恢復(fù):
加密備份:
生成密鑰
[root@localhost backup]# openssl rand -base64 24
5QsS+fykEURHFmuLcFS81aIkCLaVJIyv
xtrabackup -uroot -proot123 --backup --target-dir=/data/backup/encrypt --encrypt=AES256 --encrypt-threads=4 --encrypt-chunk-size=64K --encrypt-key="5QsS+fykEURHFmuLcFS81aIkCLaVJIyv"
或者
echo -n "5QsS+fykEURHFmuLcFS81aIkCLaVJIyv" > /data/backup/keyfile
xtrabackup -uroot -proot123 --backup --target-dir=/data/backup/encrypt --encrypt=AES256 --encrypt-threads=4 --encrypt-chunk-size=64K --encrypt-key-file=/data/backup/keyfile
解密:
xtrabackup --decrypt=AES256 --parallel=4 --encrypt-key="5QsS+fykEURHFmuLcFS81aIkCLaVJIyv" --target-dir=/data/backup/encrypt --remove-original
恢復(fù):
xtrabackup --prepare --target-dir=/data/backup/encrypt/
xtrabackup --move-back|--copy-back --target-dir=/data/backup/encrypt/ --datadir=/data/mysql/mysql3306/data