Percona XtraBackup 介绍

前言

Percona XtraBackup 是 Percona 公司开发的一个用于 MySQL 数据库物理热备的备份工具,支持 MySQl(Oracle)、Percona Server 和 MariaDB,并且全部开源,真可谓是业界良心。

项目的 blueprint 和 bug 讨论放在 Launchpad,之前代码也放在 Launchpad 用 Bazzar 管理,现在已经迁移到 Github 啦,项目更新发布非常快,感兴趣的可以关注 :-)

Percona XtraBackup

真是一脸傲骄的 Lion。。。

功能支持

Percona XtraBackup 可以说是业内最成熟流行的、开源的 MySQL 物理热备工具,提供了一套完备的备份方案。

对引擎的支持

首先明确下热备的概念,最基本的要求就是不需要 shutdown mysqld 进程,再进一步的是不能影响数据库的正常使用。

  1. InnoDB/XtraDB 引擎,完全的热备,不影响用户对引擎的使用,备份过程中可读写;
  2. 非 InnoDB 引擎,如 MyISAM、Merge、Archive 和 CSV等,不完全的热备,虽然备份不需要关闭 mysqld 进程,但是会加全局读锁,备份过程中用户连接只能读不能写;
  3. TokuDB 引擎,相对于 MyISAM 和 InnoDB,这个引擎可以说是后起之秀,数据文件高压缩,节省空间,并且支持事务,目前 XtraBackup 并不支持对 TokuDB 表的备份。在今年4月份的时候,Percona 收购了 Tokutex 公司,现在 TokuDB 已归 Percona 所有,最近 Percona 又将 TokuDB 的热备工具开源,再一次称赞下业界良心,相信下一步就是集成进 Percona-XtraBackup,大家可以期待下 :-)

备份类型的支持

XtraBackup 提供了不同的备份方式:

  1. 全备,全库全量备份,这种备份相当于对数据库做一个快照,这种方式比较常用;
  2. 增量备份,也是全库备份,但备的是增量数据。增量备份不能单独使用,要和全量结合使用,可以有多个增量。增量备份的一个明显优势是节省空间,用户可以制定适合自己的备份策略,如全增增(1天全量、1天增量和1天增量)周期;
  3. 部分备份,和全库备份对应,只备部分库或者部分表。如果觉得全库备份代价较大或者没必要,用户可以只备自己比较关心的表。

备份速度

物理备份是直接拷贝文件,相对于逻辑备份已经很快了,XtraBackup 还提供了对备份速度的控制功能。

  1. 加速,默认是单线程备份的,可以开并发来加快拷贝速度,并发数由用户指定;
  2. 限速,虽然备份不会影响 mysqld 进程,但是备份依然耗系统的资源,如果备份压力太大,会间接影响 mysqld。拷贝文件最耗的资源 IO,XtraBackup 提供了 IOPS 限制功能。

加速和限速只对 InnoDB 表的备份起作用,MyISAM 表备份都是单线程不限速的。

其它功能

还有一些其它比较好用的功能,如压缩、流式输出、加密等,关于 XtraBackup 的详细功能支持,可以参考官方介绍

工具使用

是不是迫不及待的想试试了,下面看看怎么玩。

安装

XtraBackup 目前只支持 GNU/Linux 平台,所以得先有一个 Linux 机器。

官方发行版提供了 deb 包、rpm 包和全 Linux 平台通用的二进制压缩包,可以直接从官网下载最新的进行安装。

官方还提供了 yum 源和 apt 源,Debian 系和 Red Hat 系可以配置下源,直接用包管理命令安装,参见官方指导;

因为 XtraBackup 是开源的,所以我们可以自己编译,这对于需要自己增加功能的同学来说是必须的,还是看官方指导

我后面会写一篇关于 XtraBackup 开发的文章 :-)

命令说明

安装完后一共有4个二进行文件,如下:

usr
├── bin
│   ├── innobackupex
│   ├── xbcrypt
│   ├── xbstream
│   └── xtrabackup

最主要的是 innobackupex 和 xtrabackup,前者是一个 perl 脚本,后者是 C 编译出的二进制。

xtrabackup 是用来备份 InnoDB 表的,不能备份非 InnoDB 表,和 mysqld server 没有交互;innobackupex 脚本用来备份非 InnoDB 表,同时会调用 xtrabackup 命令来备份 InnoDB 表,还会和 mysqld server 发送命令进行交互,如加读锁(FTWRL)、获取位点(SHOW SLAVE STATUS)等。

一般来说,我们是希望能备份 MyISAM 表的,虽然我们可能自己不用 MyISAM 表,但是 mysql 库下的系统表是 MyISAM 的,因此备份基本都通过 innobackupex 命令进行;另外一个原因是我们可能需要保存位点信息。

另外2个命令相对小众些,xbcrypt 是加解密用的;xbstream 类似于tar,是 Percona 自己实现的一种支持并发写的流文件格式。两都在备份和解压时都会用到(如果备份用了加密和并发)。

常用命令姿势

XtraBackup 的使用,简单来说就是三板斧——备份、还原、恢复,简单好用。

在使用前要注意下权限问题,这里有2个权限,一个是操作系统用户的权限,能写文件就行了;另一个是 mysql 用户的权限,具体需要哪些权限参考官网

  1. 备份 默认情况下备份是在指定的 backup-dir 目录下创建一个时间戳目录,然后备份集写入到时间目录下:

     innobackupex --host=127.0.0.1 --port=3306 --user=root --password=123456 --defaults-file=/etc/my.cnf backup-dir
    

    也可以通过流方式输出到标准输出,然后就可以在 Linux 下通过管道任意发挥了,如:

     innobackupex --host=127.0.0.1 --port=3306 --user=root --password=123456 --defaults-file=/etc/my.cnf --stream=tar backup-dir | gzip > backup.tar.gz
    

    上面的命令备出来是一个 tar.gz 压缩包,解压时要用 tar izxvf 参数(千万不能少了i)。 也可以管道到 nc 命令,将备份通过网络传走。 Imagination is the only boundary!

  2. 还原 备份集是不能直接用的,要先用工具还原才能使用。如果备份到压缩包的话,要先解压到目录,才能还原。 恢复是用 --apply-log 参数,另外恢复时强烈推荐加 --use-memory ,因为恢复会启动一个 innodb 引擎,这个参数指定的就是 innodb_buffer_pool_size 的大小, 默认是100M,如果备份集中 redo log 比较大的话,设置较大的 use-memory 可以显著提高恢复速度。

     innobackupex --defaults-file=/etc/my.cnf --use-memory=4G --apply-log backup-dir
    
  3. 恢复 恢复就是把还原好的备份集拷贝到对应 mysqld 的数据目录,首先要用一个空的 mysqld 目标目录,并且提供相应的 my.cnf。innobackupex 提供了2个好用的参数,可以根据 my.cnf 中的目录配置,把备份集目录里的数据拷贝/移动到对应目标目录。

     innobackupex --defaults-file=/etc/my.cnf --copy-back backup-dir
    

    或者

     innobackupex --defaults-file=/etc/my.cnf --move-back backup-dir
    

延伸阅读

想要用好 XtraBackup,官方文档是一定要看的,看完后基本可以解决 90% 以上备份遇到的问题。

  1. How-tos and Recipes,各种使用姿势指导;
  2. innobackupex 参数xtrabackup 参数,工具的详细参数列表,翻翻看,可能会发现意想不到的功能哦;如果安装工具的话,可以直接 innobackupex --help 或者 xtrabackup --help 查看;
  3. User Manual,每个命令详细介绍。
  4. 备份生成的辅助文件,为了保证备份集的正确使用,XtraBackup 会生成一些额外的文件,如记录备份集对应的 binlog 位点。
fungo /
Published under (CC) BY-NC-SA in categories technology  MySQL  tagged with 备份  神兵利器  Percona  xtrabackup