一、Percona XtraBackup介绍部分

资料来源:http://www.percona.com/software/percona-xtrabackup

Percona XtraBackup is an open source, free MySQL hot backup software that performs non-blocking backups for InnoDB and XtraDB databases. With Percona XtraBackup, you can achieve the following benefits:
Backups that complete quickly and reliably
Uninterrupted transaction processing during backups
Savings on disk space and network bandwidth
Automatic backup verification
Higher uptime due to faster restore time

如上部分是Xtrabackup官网一个介绍,翻译过来就是:

    Percona XtraBackup是一个开源、免费的MySQL热备份软件,能够为InnoDB和XtraDB数据库执行非阻塞备份。使用Percona XtraBackup,可以获得以下好处: 

    1.快速、可靠的完成备份

    2.备份期间不间断事务处理

    3.节省磁盘空间和网络带宽

    4.自动对备份文件进行验证

    5.快速恢复,保障在线运行时间持久性

另外,我在introduction文档里还看到有一下几条说明: 

-Create hot InnoDB backups without pausing your database
-Make incremental backups of MySQL
-Stream compressed MySQL backups to another server
-Move tables between MySQL servers on-line
-Create new MySQL replication slaves easily
-Backup MySQL without adding load to the server

翻译过来就是:

    1.在不停库的情况下,对InnoDB数据库进行热备

    2.增量备份MySQL数据库

    3.通过流压缩备份MySQL数据到另外一台服务器

    4.在线MySQL服务器之间进行表空间迁移

参考链接:http://www.mysqlperformanceblog.com/2009/06/08/impossible-possible-moving-innodb-tables-between-servers/

    5.很easy的创建新的MySQL从服务器

    6.备份MySQL数据库时不会带来额外的系统压力

二、对于上述的解释

解释1:什么是流备份?

    流备份是指备份的数据通过标准输出STDOUT传输给tar程序进行归档,而不是单纯的将数据文件保存到指定的备份目录中,参数--stream=tar表示开启流备份功能并打包。同时也可以利用流备份到远程服务器上。

解释2:为什么说Xtrabackup是针对InnoDB引擎的备份工具?

    对于MyISAM表只能是温备,而且也不支持增量备份

    而XtraBackup更多高级特性通常只能在innodb存储引擎上实现,而且高级特性还都依赖于mysql数据库对innodb引擎实现了单独表空间,否则没办法实现单表或单库导出,因此可以说Xtrabackup是为InnoDB而生也不为过!

三、官方原理:

    在InnoDB内部会维护一个redo日志文件,我们也可以叫做事务日志文件。事务日志会存储每一个InnoDB表数据的记录修改。当InnoDB启动时,InnoDB会检查数据文件和事务日志,并执行两个步骤:它应用(前滚)已经提交的事务日志到数据文件,并将修改过但没有提交的数据进行回滚操作。
    Xtrabackup在启动时会记住log sequence number(LSN),并且复制所有的数据文件。复制过程需要一些时间,所以这期间如果数据文件有改动,那么将会使数据库处于一个不同的时间点。这时,xtrabackup会运行一个后台进程,用于监视事务日志,并从事务日志复制最新的修改。Xtrabackup必须持续的做这个操作,是因为事务日志是会轮转重复的写入,并且事务日志可以被重用。所以xtrabackup自启动开始,就不停的将事务日志中每个数据文件的修改都记录下来。
    上面就是xtrabackup的备份过程。接下来是准备(prepare)过程。在这个过程中,xtrabackup使用之前复制的事务日志,对各个数据文件执行灾难恢复(就像mysql刚启动时要做的一样)。当这个过程结束后,数据库就可以做恢复还原了。
    以上的过程在xtrabackup的编译二进制程序中实现。程序innobackupex可以允许我们备份MyISAM表和frm文件从而增加了便捷和功能。Innobackupex会启动xtrabackup,直到xtrabackup复制数据文件后,然后执行FLUSH TABLES WITH READ LOCK来阻止新的写入进来并把MyISAM表数据刷到硬盘上,之后复制MyISAM数据文件,最后释放锁。
    备份MyISAM和InnoDB表最终会处于一致,在准备(prepare)过程结束后,InnoDB表数据已经前滚到整个备份结束的点,而不是回滚到xtrabackup刚开始时的点。这个时间点与执行FLUSH TABLES WITH READ LOCK的时间点相同,所以myisam表数据与InnoDB表数据是同步的。类似oracle的,InnoDB的prepare过程可以称为recover(恢复),myisam的数据复制过程可以称为restore(还原)。
    Xtrabackup和innobackupex这两个工具都提供了许多前文没有提到的功能特点。手册上有对各个功能都有详细的介绍。简单介绍下,这些工具提供了如流(streaming)备份,增量(incremental)备份等,通过复制数据文件,复制日志文件和提交日志到数据文件(前滚)实现了各种复合备份方式部署Xtrabackup。

四、实现细节:

    XtraBackup以read-write模式打开innodb的数据文件,然后对其进行复制。其实它不会修改此文件。也就是说,运行 XtraBackup的用户,必须对innodb的数据文件具有读写权限。之所以采用read-write模式是因为XtraBackup采用了其内置的 innodb库来打开文件,而innodb库打开文件的时候就是rw的。
    XtraBackup要从文件系统中复制大量的数据,所以它尽可能地使用posix_fadvise(),来告诉OS不要缓存读取到的数据,从 而提升性能。因为这些数据不会重用到了,OS却没有这么聪明。如果要缓存一下的话,几个G的数据,会对OS的虚拟内存造成很大的压力,其它进程,比如 mysqld很有可能被swap出去,这样系统就会受到很大影响了。
    在备份innodb page的过程中,XtraBackup每次读写1MB的数据,1MB/16KB=64个page。这个不可配置。读1MB数据之 后,XtraBackup一页一页地遍历这1MB数据,使用innodb的buf_page_is_corrupted()函数检查此页的数据是否正常,如果数据不正常,就重新读取这一页,最多重新读取10次,如果还是失败,备份就失败了,退出。在复制transactions log的时候,每次读写512KB的数据。同样不可以配置。

五、Xtrabackup有两个主要的工具:xtrabackup、innobackupex
1、xtrabackup只能备份InnoDB和XtraDB两种数据表,而不能备份MyISAM数据表
2、innobackupex是参考了InnoDB Hotbackup的innoback脚本修改而来的.innobackupex是一个perl脚本封装,封装了xtrabackup。主要是为了方便的 同时备份InnoDB和MyISAM引擎的表,但在处理myisam时需要加一个读锁。并且加入了一些使用的选项。如slave-info可以记录备份恢 复后,作为slave需要的一些信息,根据这些信息,可以很方便的利用备份来重做slave。


六、部署安装⊙.⊙开始咯

环境说明:

系统:centos 6.4

步骤一:安装基本环境

yum install cmake gcc gcc-c++ libaio libaio-devel automake autoconf bzr \
  bison libtool ncurses-devel zlib-devel libgcrypt-devel patch perl-Time-HiRes \
   perl-DBD-MySQL

步骤二:获取源码包并安装

cd /mnt/tools
wget http://www.percona.com/redir/downloads/XtraBackup/LATEST/source/percona-xtrabackup-2.1.9.tar.gz
tar zxf percona-xtrabackup-2.1.9.tar.gz
cd percona-xtrabackup-2.1.9/
utils/build.sh innodb55  #如果是MySQL 5.1版本,那么执行utils/build.sh innodb51
#懒人做法就是执行: AUTO_DOWNLOAD="yes" ./utils/build.sh xtradb
#然后拷贝可执行文件到当前PATH环境中.
#如果是懒人做法:/bin/cp innobackupex src/xtrabackup src/xbstream src/xbcrypt /application/mysql/bin/
/bin/cp innobackupex src/xtrabackup_innodb55 /application/mysql/bin/
ln -s /application/mysql/bin/xtrabackup_innodb55 /application/mysql/bin/xtrabackup_55
ln -s /application/mysql/bin/xtrabackup_innodb55 /application/mysql/bin/xtrabackup

至此。xtrabackup 实际上已经安装完成了。接下来就是使用了。    

想看怎么使用的童鞋,参照下篇后续文档。