xtrabackup 安装、备份、还原及错误处理 教程

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-680-Linux-x86_64/bin/innobackupex /usr/bin/innobackupex
        cp /usr/local/percona-xtrabackup-2.1.5-680-Linux-x86_64/bin/xtrabackup  /usr/bin/xtrabackup
        cp /usr/local/percona-xtrabackup-2.1.5-680-Linux-x86_64/bin/xtrabackup_55  /usr/bin/xtrabackup_55

4.备份
需要说明的这个备份是针对实例,不能针对某个数据库
/innobackupex --user=root --password=123456 --defaults-file=/etc/my.cnf  --databases='test'  --slave-info /usr/local/  

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


你可能感兴趣的:(mysql)