您的位置:首页 > 数据库 > MySQL

创建MySQL数据库备份的好工具:XtraBackup

2012-06-15 15:37 363 查看
  说到备份MySQL数据库,不少人可能会先想到其自带的命令行工具mysqldump,要说这个工具确实不错,操作简单调用灵活,不过mysqldump属于逻辑备份工具,类似ORACLE数据库中的export,小数据量时效率尚可,当数据量达到一定规模时,使用mysqldump执行备份的时间也许还可接受,但恢复时间基本就不能忍受了。

  这种情况下就需要一种好用又高效的工具,xtrabackup就是其中一款,号称免费版的InnoDB HotBackup。

Xtrabackup提供了两种命令行工具:

xtrabackup:专用于备份InnoDB引擎的数据;
innobackupex:这是一个perl脚本,在执行过程中会调用xtrabackup命令,这样用该命令即可以实现备份InnoDB,也可以备份MyISAM引擎的对象。
  目前xtrabackup最新版本已经升级到了1.6版本,可以到http://www.percona.com/downloads/xtrabackup/免费下载。

  Xtrabackup提供了Linux下常见的安装方式,包括RPM安装,源码编译方式,以及二进制版本安装,这里三思尝试下载了最新的1.6源码包,决定自行编译安装。

  1.6版本的源码包相较之前大了数十倍,主要是由于源码包中同时包含了mysql5.1和mysql5.5的源码包,一个2M左右的小软件,居然内置了两个各有20余M的软件安装包,这真不是一般人都想的出来的。

  由于1.6版本新推不久,官网中的文档都没有来的及更新完善,源码方式的安装文档也并不完整,三思也只能连蒙带猜,下列安装步骤有可能并非最佳安装方式,仅只是提供了一种,源码安装xtrabackup并使其可用的方式。

  由于xtrabackup依赖libinnodb链接库,因此需要先编译InnoDB,而后再编译xtrabackup。要编译安装xtrabackup最简单的方式当然是使用提供的编译脚本,首先还是解压缩文件,并进入到安装目录:

[root@rhel5u3 software]# tar xvfz xtrabackup-1.6.tar.gz

[root@rhel5u3 software]# cd xtrabackup-1.6
  ll的话会看到目录有两mysql-5.1.56.tar.gz和mysql-5.5.10.tar.gz两个mysql源码包,正是这两个源码包占用了大量的空间。除此外还有一个innobackupex的perl脚本程序,该脚本可以直接执行,不过执行备份任何时会报:

sh: xtrabackup_55: command not found

innobackupex: fatal error: no 'mysqld' group in MySQL options

innobackupex: fatal error: OR no 'datadir' option in group 'mysqld' in MySQL options
  提示xtrabackup_55命令不存在,接下来就是要编译xtrabackup。

  在解压缩目录下执行utils/build.sh,注意一定要在xtrabackup安装目录内执行,执行时要指定与之匹配的MySQL数据库版本。

[root@rhel5u3 xtrabackup-1.6]# utils/build.sh 

Build an xtrabackup binary against the specified InnoDB flavor.

Usage: build.sh CODEBASE

where CODEBASE can be one of the following values or aliases:

  innodb51_builtin | 5.1        build against built-in InnoDB in MySQL 5.1

  innodb55         | 5.5        build against InnoDB in MySQL 5.5

  xtradb51         | xtradb   build against Percona Server with XtraDB 5.1

  xtradb55         | xtradb55 build against Percona Server with XtraDB 5.5
  三思安装的是mysql5.5,因此这里指定innodb55,执行命令如下:

[root@rhel5u3 xtrabackup-1.6]# utils/build.sh innodb55 

  该脚本会根据指定的引擎版本,自动解压缩适当的MySQL源码包并进行编译,这是最简单的安装方式。

  命令执行完成之后,xtrabackup就可以用了,一般默认编译后该文件保存在xtrabackup-1.6/mysql-5.5.10/storage/innobase/xtrabackup/目录下,当然也可以通过find命令查找xtrabackup的具体路径。

  创建两个软链接,以方便调用XtraBackup命令执行备份:

[root@rhel5u3 xtrabackup-1.6]# ln -s /data/software/xtrabackup-1.6/innobackupex /usr/local/mysql55/bin/innobackupex

[root@rhel5u3 xtrabackup-1.6]# ln -s /data/software/xtrabackup-1.6/mysql-5.5.10/storage/innobase/xtrabackup/xtrabackup_innodb55 /usr/local/mysql55/bin/xtrabackup_55
  将mysql55的bin加载到path环境变量,当然这步多数情况下应该在安装mysql时做过了:

[root@rhel5u3 xtrabackup-1.6]# export PATH=$PATH:/usr/local/mysql55/bin

  至此,XtraBackup的源码安装就完成了,接下来就可以使用这些命令执行备份任务了。例如,调用xtrabackup命令执行备份,举个简单的备份示例如下:

[root@rhel5u3 ~]# xtrabackup_55 --defaults-file=/data/mysqldata/3306/my.cnf --backup --target-dir=/data/mysql_20110524

xtrabackup_55  Ver undefined Rev undefined for 5.5.10 Linux (x86_64)

xtrabackup: uses posix_fadvise().

xtrabackup: cd to /data/mysqldata/3306/data

xtrabackup: Target instance is assumed as followings.

xtrabackup:   innodb_data_home_dir = /data/mysqldata/3306/innodb_ts

xtrabackup:   innodb_data_file_path = ibdata1:10M:autoextend

xtrabackup:   innodb_log_group_home_dir = /data/mysqldata/3306/innodb_log

xtrabackup:   innodb_log_files_in_group = 2

xtrabackup:   innodb_log_file_size = 5242880

110524 17:31:16 InnoDB: Using Linux native AIO

>> log scanned up to (1598402)

[01] Copying /data/mysqldata/3306/innodb_ts/ibdata1 

     to /data/mysql_20110524/ibdata1

[01]        ...done

xtrabackup: The latest check point (for incremental): '1598402'

>> log scanned up to (1598402)

xtrabackup: Stopping log copying thread.

xtrabackup: Transaction log of lsn (1598402) to (1598402) was copied.
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息