版本选择

版本之间的区别:

  • 8.0 是针对 8.0 开发的,不兼容 5.X 的版本

  • 2.4 针对 5.7 开发,兼容 5.6,5.5

  • 2.3 针对 5.6 开发,兼容 5.5

  • 2.2 针对 5.5 开发

安装

下载页面:

https://www.percona.com/downloads/Percona-XtraBackup-LATEST/

这里以 CentOS 6 ,Percona MySQL Server 5.6 为例,安装的工具是 2.3.5 版本:

yum -y install  https://www.percona.com/downloads/XtraBackup/Percona-XtraBackup-2.3.5/binary/redhat/6/x86_64/percona-xtrabackup-2.3.5-1.el6.x86_64.rpm

安装 XtraBackup 后,其实会有几个工具:

  • innobackupex:这个是其实是下面三个工具的一个 perl 脚本封装,可以备份 MyISAM, InnoDB, XtraDB 表。但在处理 Myisam 时需要加一个读锁。

  • xtrabackup:一个由 C 编译而来的二进制文件,只能备份 InnoDB 和 XtraDB 数据。

  • xbcrypt:用来加密或解密备份的数据。

  • xbstream:用来解压或压缩 xbstream 格式的压缩文件。

建议使用 perl 封装的 innobackupex 来作数据库备份,因为比较容易使用。

innobackupex 命令参数

--defaults-file 数据库的配置文件路径,感觉本地备份不写也可以,远程没测试过。

--apply-log 准备在一个备份上启动mysql服务。

--copy-back 从备份目录拷贝数据,索引,日志到my.cnf文件里规定的初始位置。

--no-timestamp 创建备份时不自动生成时间目录,可以自定义备份目录名例如: /backups/mysql/base

--databases 用于指定要备份的数据库, 多个库文件使用方法: “database1 database2″

--incremental 在全备份的基础上进行增量备份,后跟增量备份存贮目录路径

--incremental-basedir=DIRECTORY 增量备份所需要的全备份路径目录或上次做增量备份的目录路径

--incremental-dir=DIRECTORY 增量备份存贮的目录路径

--redo-only 用于准备增量备份内容把数据合并到全备份目录,配合--incremental-dir 增量备份目录使用。

--force-non-empty-directories 如果是特定库备份还原,不需要删掉整个mysql目录,只是特定库的及相关文件就可以,还原时加上此参数就不会报错。

使用

备份所有数据库

mkdir -p /data/dbbackup/2019-04-28

innobackupex --defaults-file=/etc/my.cnf --user root --password password --no-timestamp  /data/dbbackup/2019-04-28/all

备份文件:

backup-my.cnf   备份命令用到的配置选项信息;

ibdata1        备份的表空间文件;

xtrabackup_binary   备份中用到的xtrabackup的可执行文件;

xtrabackup_binlog_info  mysql服务器当前正在使用的二进制日志文件及至备份这一刻为止二进制日志事件的位置;

xtrabackup_logfile  份的重做日志文件。

xtrabackup_checkpoints  备份类型(如完全或增量)、备份状态(如是否已经为prepared状态)和LSN(日志序列号)范围信息;

其他目录    对应备份数据库的目录

全量恢复

  1. 先关闭数据库

  2. 恢复文件

innobackupex --copy-back --defaults-file=/etc/my.cnf /data/dbbackup/2019-04-28/all
  1. 修改权限
chown mysql.mysql /data/mysql -R
  1. 启动数据库

备份单独几个库

innobackupex --defaults-file=/etc/my.cnf --user root --password password --databases="mysql testdb"  --no-timestamp  /data/dbbackup/2019-04-28/somedbs

单独恢复几个库:可以在复制全量备份中的几个文件,和需要恢复的目录。

备份成压缩文件

innobackupex --defaults-file=/etc/my.cnf --user root --password password  --no-timestamp --stream=tar  ./ | gzip  -  >  /data/dbbackup/2019-04-28/somedbs.tar.gz

增量备份

增量备份依赖于全量备份,因此如果没有全量备份,需要先创建一份全量备份。

innobackupex --user root --password password --no-timestamp  /data/dbbackup/2019-04-28/all

首次增量备份,incremental-basedir 指定的应该是全量备份的目录

innobackupex --defaults-file=/etc/my.cnf   --no-timestamp --incremental-basedir=/data/dbbackup/2019-04-28/all --user=root --password=password --incremental /data/dbbackup/2019-04-28/inc1

接下去的增量备份,incremental-basedir 指定的就是上一次增量备份的目录

innobackupex --defaults-file=/etc/my.cnf   --no-timestamp --incremental-basedir=/data/dbbackup/2019-04-28/inc1 --user=root --password=password --incremental /data/dbbackup/2019-04-28/inc2

增量还原

先拼凑一份完整的备份会报错到全量备份的目录中,带日期的目录。2019-04-28_19-59-23

innobackupex  --apply-log-only --redo-log /data/dbbackup/2019-04-28/all  --incremental-dir=/data/dbbackup/2019-04-28/inc3 --user root --password password