xtrabackup 是MYSQL的一个备份软件

Xtrabackup是一个对InnoDB做数据备份的工具,支持在线热备份(备份时不影响数据读写),是商业备份工具InnoDB Hotbackup的一个很好的替代品。

Xtrabackup有两个主要的工具:xtrabackup、innobackupex

(1)xtrabackup只能备份InnoDB和XtraDB两种数据表,而不能备份MyISAM数据表

(2)innobackupex-1.5.1则封装了xtrabackup,是一个脚本封装,所以能同时备份处理innodb和myisam,但在处理myisam时需要加一个读锁 

 

1.首先下载 

cd /usr/local

wget  http://www.percona.com/redir/downloads/XtraBackup/XtraBackup-2.1.5/binary/Linux/x86_64/percona-xtrabackup-2.1.5-680-Linux-x86_64.tar.gz

 

2、检查服务器是否安装了Mysql版本,如果没有就要安装好mysql

    my.cnf中必须有datadir=/usr/local/mysql/data  (特别说明这个参数必须要,作者就在此问题栽跟着)

3、开始安装xtrabackup

     1)解压     

         cd /usr/local

         tar zxvf percona-xtrabackup-2.1.5-680-Linux-x86_64.tar.gz

     2)拷贝innobackupex、xtrabackup、xtrabackup_51 工具到/usr/bin

        cp /usr/local/percona-xtrabackup-2.1.5-Linux-x86_64/bin/* /usr/bin/

 

4.备份

需要说明的这个备份是针对实例,不能针对某个数据库

/innobackupex --user=root --password=123456 --defaults-file=/etc/my.cnf  --databases='test'  --slave-info /usr/local/  

 

注意此时会在"/usr/local"目录下生成一个根据当前时间产生的文件夹(比如"2016-03-21_13-17-34")存放备份数据,在第五步还原数据的时候,需要将此目录下的数据全部拷贝过去 cp 2016-03-21_13-17-34/*  /root/test_dir/2013-01-04_15-08-06/

注意点2:若命令报错"Can't locate Time/HiRes.pm in @INC",则执行命令:yum -y  install perl-Time-HiRes

 

 

5.还原

还原

(1)停止数据库服务

 

#/etc/init.d/mysqld stop

 

(2)整理(preparing)部分备份

 

#innobackupex --user=root --password=123456 --defaults-file=/etc/my.cnf --apply-log --export /root/test_dir/2013-01-04_15-08-06/

 

(3)将备份文件拷贝回数据目录

 

 #\cp -rf /root/test_dir/2013-01-04_15-08-06/* /usr/local/mysql/data/

 

(4)赋权

 

# chown -R mysql:mysql /usr/local/mysql

 

(5)启动数据库

 

# /etc/init.d/mysqld  start

 

特别说明:

如果出现如下错误,说明没有装 dbi和dbd 

innobackupex: Connecting to MySQL server with DSN 'dbi:mysql:;mysql_read_default_file=/etc/my.cnf;mysql_read_default_group=xtrabackup' as 'root'  (using password: YES).

innobackupex: Error: Failed to connect to MySQL server as DBD::mysql module is not installed at /usr/bin/innobackupex line 

 

则按如下步骤进行操作:

Percona Toolkit 的安装:

 

1:下载percona toolkit的包:(可以是源码包,或者RPM)

 

访问:http://www.percona.com/software/percona-toolkit/ 下载最新稳定的版本。也可以如下命令行的方式下载最新版本。

 

wget percona.com/get/percona-toolkit.tar.gz

 

wget percona.com/get/percona-toolkit.rpm

 

2:安装于Perl相关的模块

 

yum install perl-DBI

 

yum install perl-DBD-MySQL

 

yum install perl-Time-HiRes

 

yum install perl-IO-Socket-SSL

 

3: 安装Percona Toolkit

 

rpm -Uvh percona-toolkit-2.2.1-2.noarch.rpm 

 

OK,就这么简单,安装完毕。

 

特别说明:

 

本机为:Linux mysql.example.com 2.6.18-308.el5 #1 SMP Tue Feb 21 20:06:06 EST 2012 x86_64 x86_64 x86_64 GNU/Linux

 

安装错误:

 

在yum install perl-DBD-MySQL时,出现如下错误信息

 

 

 

---> Package perl-DBD-MySQL.x86_64 0:3.0007-2.el5 set to be updated

 

--> Processing Dependency: libmysqlclient.so.15(libmysqlclient_15)(64bit) for package: perl-DBD-MySQL

 

--> Processing Dependency: libmysqlclient.so.15()(64bit) for package: perl-DBD-MySQL

 

--> Running transaction check

 

---> Package mysql.x86_64 0:5.0.95-5.el5_9 set to be updated

 

--> Processing Conflict: mysql conflicts MySQL

 

--> Finished Dependency Resolution

 

mysql-5.0.95-5.el5_9.x86_64 from updates has depsolving problems

 

  --> mysql conflicts with MySQL-server

 

Error: mysql conflicts with MySQL-server

 

由于我安装的是5.5.xx的MySQL版本,而系统自带的是5.0xx版本的,而libmysqlclient.so.15是由5.0版本提供的,所以就出错了。如果你的系统是centos6.X系列的,MySQL自带的为5.1以上,可能不会出现这个问题了。解决方案如下:

 

rpm -Uvh MySQL-shared-compat-5.5.31-1.rhel5.x86_64.rpm

 

MySQL-shared-compat为客户端的libraries ,向下兼容。

 

在yum install perl-DBD-MySQL就没有问题了。

 

官方原理

在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)备份等,通过复制数据文件,复制日志文件和提交日志到数据文件(前滚)实现了各种复合备份方式。