1.1 Percona Xtrabackup介绍

Percona XtraBackup是世界上唯一的开源并且免费的MySQL热备份软件,对于InnoDB和XtraDB存储引擎执行非阻塞备份。使用Percona XtraBackup有以下优势:

  • 备份快速可靠

  • 备份期间不间断事务处理

  • 节省磁盘空间和网络带宽

  • 提高运行时间从而加快恢复速度

  • 自动备份验证

Percona XtraBackup能够为所有版本的Percona Server,MySQL,MariaDB进行热备份。支持InnoDB,XtraDB,HailDB 引擎进行完全非阻塞备份。此外可以对MyISAM,Merge,Archive引擎,包括这些引擎的分区表,触发器,数据库选项进行备份,需要进行短暂的停止写操作。

Percona公司的商业支持也包含Percona XtraBackup服务,我们建议在生产环境使用这些支持。

1.1.1 MySQL Backup Tool特性比较

FeaturesPercona XtraBackup 
LicenseGPL
PriceFree
Streaming and encryption formatsOpen source
Supported MySQL avorsMySQL, Percona Server, MariaDB, Percona XtraDB Cluster, MariaDB 
Supported operating systemsLinux
Non-blocking InnoDB backups 非阻塞InnoDB存储引擎备份 (注释1)
Yes
Blocking MyISAM backups 阻塞MyISAM存储引擎备份Yes
Incremental backups 增量备份Yes
Full compressed backups 全量压缩备份Yes
Incremental compressed backups 增量压缩备份Yes

Fast incremental backups  快速增量备份

(注释2)

Yes

Incremental backups with archived logs feature in Percona Server

Percona Server使用归档日志特性进行增量备份

Yes

Incremental backups with REDO log only

只使用redo log 进行增量备份

mysql企业版支持
Backup locks(Percona5.6+新特性,一个轻量级的锁用来替代FTWRL,当复制非innodb表时不会锁定innodb的DML操作)(注释3)
Yes
Encrypted backups 加密备份Yes
Streaming backups 流式备份Yes
Parallel local backups 本地并行备份Yes
Parallel compression 并行压缩Yes
Parallel encryption 并行加密Yes
Parallel apply-log(全量备份完成后,redo和undo事务还未进行回放,此时不能进行恢复,需要进行apply-log后才可进行恢复)Yes
Parallel copy-back(将备份目录直接拷贝到mysql数据目录下)
Throttling (注释5)Yes
Partial backups 部分备份Yes
Partial backups of individual partitions 部分备份单独分区Yes
Throttling 节流(只对备份有效,防止过高的备份速度影响系统使用,主要指IO)Yes
Backup p_w_picpath validation
Point-in-time recovery support 基于时间点恢复Yes
Safe slave backups(保证复制状态一致性,需要先停止slave sql thread并等待Slave_open_temp_tables值为0后开始进行复制
)
Yes

Compact backups (当启用此参数时,会跳过辅助索引,当压缩备份完成后重新创建辅助索引)

(注释6)

Yes
Buffer pool state backups(保存备份时buffer pool内存的状态,例如热数据,当恢复时buffer pool 会和备份时保持一致)Yes
Individual tables export(单独表导出)Yes
Individual partitions export(单独表分区导出)Yes
Restoring tables to a different server (将表在不同的server上进行恢复)(注释8)Yes
Data & index le statistics (表和索引文件分析,此特性在read-only模式可以使用)Yes
InnoDB secondary indexes defragmentation 辅助索引整理锁片Yes
rsync support to minimize lock time (开启此参数,备份时拷贝非innodb文件会使用rsync代替cp,提高拷贝速度,从而缩短FTWRL时间)Yes
Improved FTWRL handling(改进的FTWRL处理过程,)Yes
Backup history table Yes
Backup progress table
Ofine backups 
Backup to tape media managers
Cloud backups support
External graphical user interfaces to backup/recover

注释1:当拷贝非innodb引擎数据时,innodb表会一直被锁

注释2:Fast incremental backups 支持Percona Server xtradb引擎开启页面追踪功能

注释3:Percona5.6+新特性,一个轻量级的锁用来替代FTWRL,当复制非innodb表时不会锁定innodb的DML操作

注释4:Percona XtraBackup支持所有备份方式的加密,mysql企业版只支持单独文件加密

注释5:Percona XtraBackup可根据IO瓶颈进行限制读写速度,企业版支持在操作过程中增加sleep time

注释6:当启用此参数时,会跳过辅助索引,当压缩备份完成后重新创建辅助索引。企业版会跳过索引页,在恢复时重新插入。

注释7:Percona XtraBackup可以在任何版本的全量备份中导出表

注释8:使用Percona XtraBackup导出的表能够导入Percona Server5.1,5.5,5.6+,MySQL 5.6+.企业版只能导入到Percona Server5.6+,MySQL5.6+,MariaDB10.0+

1.1.2 Percona XtraBackup有哪些特性

  • 不停机进行innodb引擎备份创建

  • 进行增量备份

  • 使用流压缩直接备份到其他server

  • 在线迁移表

  • 方便快捷的创建从库

  • 备份过程中不增加server的负载

2.1 Percona Xtrabackup安装(略)

wget https://www.percona.com/downloads/XtraBackup/Percona-XtraBackup-2.2.13/binary/tarball/percona-xtrabackup-2.2.13-Linux-x86_64.tar.gz

tar -zxf percona-xtrabackup-2.2.13-Linux-x86_64.tar.gz

可执行文件在percona-xtrabackup-2.2.13-Linux-x86_64/bin/下

3.1 Percona Xtrabackup使用手册

3.1.1 innobackupex脚本

innobackupex是对 xtrabackup使用perl脚本进行的封装。整合了xtrabackup、文件拷贝、流以及其他的一些有用的内容。能够进行各种存储引擎的基于时间点的恢复。

使用innobackupex需要的条件

连接权限需求:

当创建备份或者恢复时,Percona XtraBackup需要去连接数据库并在数据库上做一些操作以及对数据库目录做一些操作,此时必须先给相应的用户赋给数据库的执行权限和操作系统相应的读写执行权限和起停服务权限。

连接数据库示例:

$ innobackupex --user=DBUSER --password=SECRET /path/to/backup/dir/ 

$ innobackupex --user=LUKE --password=US3TH3F0RC3 --stream=tar ./ | bzip2 

$ xtrabackup --user=DVADER --password=14MY0URF4TH3R --backup --target-dir=/data/bkps/

如果不适用--user,那么默认会使用当前的操作系统用户

有关连接其他的选项:

OptionDesc
--portmysql端口,通过tcp连接使用
--socketmysql sock文件,本地连接使用
--hostmysql ip地址,通过tcp连接使用

Permissions and Privileges Needed

建立连接后,执行备份需要DATADIR文件系统级别的READ,WRITE,EXECUTE权限。

数据库用户需要以下权限来执行表或者数据库级别的备份:

  • RELOAD and LOCK TABLES(加--no-lock不需要LOCK权限):拷贝文件(FLUSH TABLES WITH READ LOCKandFLUSH ENGINE LOGS),Backup Locks(LOCK TABLES FOR BACKUP and LOCK BINLOG FOR BACKU)特性使用时。 

  • REPLICATION CLIENT :获取binlog位置时

  • CREATE TABLESPACE:导入数据时

  • PROCESS:查看MySQL上运行的线程时

  • SUPER:停止复制环境SLAVE线程时或者XtraDB Changed Page Tracking 开启,或者启用 Improved FLUSH TABLES WITH READ LOCK handling

  • CREATE:创建PERCONA_SCHEMA.xtrabackup_history数据库和表时,即加参数--history

  • INSERT: 增加历史记录到PERCONA_SCHEMA.xtrabackup_history

  • SELECT:使用innobackupex --incremental-history-name 或者 innobackupex --incremental-history-uuid时从PERCONA_SCHEMA.xtrabackup_history表查找innodb_to_lsn values

创建一个全备所需要的最小权限:

mysql> CREATE USER 'bkpuser'@'localhost' IDENTIFIED BY 's3cret'; 

mysql> GRANT RELOAD, LOCK TABLES, REPLICATION CLIENT ON *.* TO 'bkpuser'@'localhost'; mysql> FLUSH PRIVILEGES;


备份周期-全备

使用innobackupex创建一个备份

$ innobackupex --user=DBUSER --password=DBUSERPASS /path/to/BACKUP-DIR/

--user=DBUSER:指定数据库用户

--password=DBUSERPASS:指定数据库密码

/path/to/BACKUP-DIR/:指定备份路径

以下是备份输出,其中备份会存放在/path/to/BACKUP-DIR/2013-03-25_00-00-09下

innobackupex: Backup created in directory '/path/to/BACKUP-DIR/2013-03-25_00-00-09' innobackupex: MySQL binlog position: filename 'mysql-bin.000003', position 1946 111225 00:00:53 innobackupex: completed OK!

其他建议的选项:

--no-timestamp:不会创建基于时间点的目录,备份到指定目录下,指定的目录必须不存在

--defaults-file:指定MySQL默认读取的配置文件,如果不指定会默认从/etc/my.cnf读取

./innobackupex --user=bkpuser --password=bkppassword /app/soft/backup/ --no-timestamp --socket=/tmp/mysql3336.sock --defaults-file=/app/data/mysql/3336/etc/my.cnf


准备一个全量备份:

当创建好一个备份时,此时备份还不能用于恢复,redo logs里的未提交的事务以及提交的事务还未进行重放,prepare此步骤就是将redo logs里的事务持久化,可使用参数--apply-log:

innobackupex --apply-log /app/soft/backup/2016-01-06_16-35-38/

输出尾行为completed OK该备份可正常进行使用:

。。。。。。

InnoDB: Shutdown completed; log sequence number 1682454

160106 16:39:58  innobackupex: completed OK!

--apply-log主要目的是将已提交事务重做持久化,未提交事务回滚。

prepare 其他参数:

--use-memory 指定内存,内存越大prepare速度越快,取决于操作系统内存大小

innobackupex --apply-log /app/soft/backup/2016-01-06_16-35-38/ --use-memory=2G


使用innobackupex 恢复完全备份

  1. innobackupex --copy-back /app/soft/backup/2016-01-06_16-35-38/ --defaults-file=/app/data/mysql/3337/etc/my.cnf 

  2. chown -R mysql:mysql /app/data/mysql/3337

  3. /usr/local/mysql/bin/mysqld_safe --defaults-file=/app/data/mysql/3337/etc/my.cnf &