一、基本介绍
Percona-xtrabackup是 Percona公司开发的一个用于MySQL数据库物理热备的备份工具,支持MySQL、Percona server和MariaDB, 开源免费,是目前较为受欢迎的主流备份工具。xtrabackup只能备份innoDB和xtraDB两种数据引擎的表,而不能备份MyISAM数据表。
xtrabakackup有3个工具,分别是xtrabakup、innobakupex、xbstream
xtrabackup 支持InnoDB,XtraDB
innobakupex 支持Myisam,InnoDB、XtraaDB
xbstream:以专有格式压缩 xtrabackup 输出的信息
优点:
(1)备份速度快,物理备份可靠
(2)备份过程不会打断正在执行的事务(无需锁表)
(3)能够基于压缩等功能节约磁盘空间和流量
(4)自动备份校验
(5)还原速度快
(6)可以流传将备份传输到另外一台机器上
(7)在不增加服务器负载的情况备份数据
二、xtrabackup安装
1、mysql 8.0版本安装
wget https://www.percona.com/downloads/Percona-XtraBackup-LATEST/Percona-XtraBackup-8.0.30-23/binary/redhat/7/x86_64/Percona-XtraBackup-8.0.30-23-r873b467185c-el7-x86_64-bundle.tar
tar -xvf Percona-XtraBackup-8.0.30-23-r873b467185c-el7-x86_64-bundle.tar
yum install percona-xtrabackup-80-8.0.30-23.1.el7.x86_64.rpm
直接解压使用或者rpm安装都可以
2、mysql5.7版本安装
wget https://www.percona.com/downloads/Percona-XtraBackup-2.4/Percona-XtraBackup-2.4.15/binary/tarball/percona-xtrabackup-2.4.15-Linux-x86_64.libgcrypt145.tar.gz
tar -xvf percona-xtrabackup-2.4.15-Linux-x86_64.libgcrypt145.tar.gz
三、常用选项: (innobackupex)
--host 指定主机
--user 指定用户名
--password 指定密码
--port 指定端口
--databases 指定数据库
--incremental 创建增量备份
--incremental-basedir 指定包含完全备份的目录
--incremental-dir 指定包含增量备份的目录
--apply-log 对备份进行预处理操作
一般情况下,在备份完成后,数据尚且不能用于恢复操作,因为备份的数据中可能会包含尚未提交的事务或已经提交但尚未同步至数据文件中的事务。因此,此时数据文件仍处理不一致状态。
“准备”的主要作用正是通过回滚未提交的事务及同步已经提交的事务至数据文件也使得数据文件处于一致性状态。
--redo-only 该参数的意思是只应用xtrabackup日志中已提交的事务数据,不回滚还未提交的数据
--copy-back 恢复备份目录
备份后文件说明:
xtrabackup_binlog_info 记录备份时的二进制日志文件位置
xtrabackup_checkpoints :记录LSN及备份类型
xtrabackup_logfile:备份日志文件,记录备份操作过程中数据库的变更
xtrabackup_info : 记录备份版本、类型等信息
backup-my.cnf : 包含备份时与INNODB 相关的选项
五、备份恢复案例
(目前innobackupex与xtrabackup 合并使用xtrabackup)
1、创建备份用户及授权:
create user 'xtrabk'@'localhost' identified by 'xtrabk';
grant reload,lock tables,replication client,super,process on *.* to 'xtrabk'@'localhost';
xtrabackup --defaults-file=/usr/local/mysql/my.cnf --user=xtrabk --password=xtrabk --backup --target-dir=/home/mysql/backup/20200413
2、第一种场景:全库备份,全库恢复
使用innobackupex 备份全库:
innobackupex --defaults-file=/usr/local/mysql/my.cnf --user=xtrabk --password=xtrabk /home/mysql/backup/
使用全库恢复:
innobackupex --defaults-file=/usr/local/mysql/my.cnf --apply-log /home/mysql/backup/2020-04-13_15-55-36/
innobackupex --defaults-file=/usr/local/mysql/my.cnf --copy-back /home/mysql/backup/2020-04-13_15-55-36/
总结全库备份与恢复三步曲:
a. innobackupex全量备份,并指定备份目录路径;
b. 在恢复前,需要使用--apply-log参数先进行合并数据文件,确保数据的一致性要求;
c. 恢复时,直接使用--copy-back参数进行恢复,需要注意的是,在my.cnf中要指定数据文件目录的路径
3、第二种场景:增量备份,增量恢复
增量备份:(基于全量备份,没有全量备份,请先做一份全备份)
全备份:innobackupex --defaults-file=/usr/local/mysql/my.cnf --user=xtrabk --password=xtrabk /home/mysql/backup/
指明基于上一次全备份做增量备份:
innobackupex --defaults-file=/usr/local/mysql/my.cnf --user=xtrabk --password=xtrabk --incremental /home/mysql/backup/incremental --incremental-basedir=/home/mysql/backup/2020-04-13_15-55-36/
指明基于上一个增量备份路径做增量备份:增量备份之后再一次进行增量备份时,其--incremental-basedir应该指向上一次的增量备份所在的目录
innobackupex --defaults-file=/usr/local/mysql/my.cnf --user=xtrabk --password=xtrabk --incremental /home/mysql/backup/incremental --incremental-basedir=/home/mysql/backup/incremental/2020-04-13_18-05-28
4、使用全备份和增量恢复:
4.1、针对全量做准备
innobackupex --defaults-file=/usr/local/mysql/my.cnf --apply-log --redo-only /home/mysql/backup/2020-04-13_15-55-36
4.2、针对增量做准备
innobackupex --defaults-file=/usr/local/mysql/my.cnf --apply-log --redo-only /home/mysql/backup/2020-04-13_15-55-36/ --incremental-dir=/home/mysql/backup/2020-04-13_18-05-28/
innobackupex --defaults-file=/usr/local/mysql/my.cnf --apply-log --redo-only /home/mysql/backup/2020-04-13_15-55-36/ --incremental-dir=/home/mysql/backup/2020-04-15_14-30-27/
如果存在多次增量备份的话,就多次执行
对合并后的全量备份做回滚
innobackupex --defaults-file=/usr/local/mysql/my.cnf --apply-log /home/mysql/backup/2020-04-13_15-55-36
4.3、执行恢复操作
innobackupex --defaults-file=/usr/local/mysql/my.cnf --copy-back /home/mysql/backup/2020-04-13_15-55-36/
特别说明:针对增量备份已经执行了增量恢复,再次执行相关恢复命令时,会报错
方案:此错误是提示你日志已损坏,即上次的恢复命令已经对日志进行了回滚。所以每次对增量备份执行恢复时,可事先备份数据,以防万一。
打包及压缩:(支持--stream 流复制)
innobackupex --defaults-file=/usr/local/mysql/my.cnf --user=xtrabk --password=xtrabk --stream=tar /home/mysql/backup | gzip -> /home/mysql/backup/xtra_fullbackup.tar.gz