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

时间:2023-12-28 14:17:50

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