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特性比较
Features | Percona XtraBackup |
License | GPL |
Price | Free |
Streaming and encryption formats | Open source |
Supported MySQL avors | MySQL, Percona Server, MariaDB, Percona XtraDB Cluster, MariaDB |
Supported operating systems | Linux |
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 image 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,那么默认会使用当前的操作系统用户
有关连接其他的选项:
Option | Desc |
--port | mysql端口,通过tcp连接使用 |
--socket | mysql sock文件,本地连接使用 |
--host | mysql 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 恢复完全备份
innobackupex --copy-back /app/soft/backup/2016-01-06_16-35-38/ --defaults-file=/app/data/mysql/3337/etc/my.cnf
chown -R mysql:mysql /app/data/mysql/3337
/usr/local/mysql/bin/mysqld_safe --defaults-file=/app/data/mysql/3337/etc/my.cnf &