Xtrabackup数据全备份与快速搭建从服务器

Percona Xtrabackup可以说是一个完美的数据备份工具。特别是当数据库的容量达到了一定数量级的时候且存在单表达到几十G的数据量, 很难容忍一些逻辑备份的漫长时间。如单个数据库约200G,单表最大为120G,mysqldump逻辑备份的时间长达20多小时。除此之外,也不好验证逻辑备份的可用性与数据的一致性。去年就层简单使用过了Xtrabackup,但是一直没有用于生成环境。最近的一个集群需要搭建一主多从,数量约130G,也不能影响主库的正常工作,Xtrabackup作为了首选的备份工具。

1、Percona Xtrabackup的优点
1)可以快速可靠的完成数据备份(复制数据文件和追踪事务日志)
2)数据备份过程中不会中断事务的处理(热备份)
3)节约磁盘空间和网络带宽
4)自动完成备份检定
5)因更快的恢复时间而提高在线时间

2、备份原理
innobackupex在后台线程不断追踪InnoDB的日志文件,然后复制InnoDB的数据文件。数据文件复制完成之后,日志的复制线程也会结束。这样就得到了不在同一时间点的数据副本和开始备份以后的事务日志。完成上面的步骤之后,就可以使用InnoDB崩溃恢复代码执行事务日志(redo log),以达到数据的一致性。
备份分为两个过程:
1)backup,备份阶段,追踪事务日志和复制数据文件(物理备份)。
2)preparing,重放事务日志,使所有的数据处于同一个时间点,达到一致性状态。

3、安装支持包

yum install cmake gcc gcc-c++ -y
yum install automake autoconf -y
yum install bzr zlib-devel libgcrypt-devel -y
yum install libaio libaio-devel   bison libtool ncurses-devel -y

4、编译innobackupex
在percona-xtrabackup-2.1.7目录下,执行./utils/build.sh

#./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         | plugin                build against InnoDB plugin in MySQL 5.1
innodb55         | 5.5                   build against InnoDB in MySQL 5.5
innodb56         | 5.6,xtradb56,         build against InnoDB in MySQL 5.6
| mariadb100,galera56
xtradb51         | xtradb,mariadb51      build against Percona Server with XtraDB 5.1
| mariadb52,mariadb53
xtradb55         | galera55,mariadb55    build against Percona Server with XtraDB 5.5

从上面可以看到不同版本mysql代码库的别名,选择上面第一列的值就可以编译生成对应版本的innobackupex备份工具。

我的使用的mysql5.5版本,那么执行./utils/build.sh innodb55。

注意编译过程中出现的错误,大多情况下出错是因为缺少支持的依赖包。编译完成之后,生成以下几个可执行文件,并复制到一个工作目录中。

cp innobackupex /usr/local/bin/
cp src/xbcrypt  /usr/local/bin/
cp src/xbstream /usr/local/bin/
cp src/xtrabackup_innodb55 /usr/local/bin/

#在使用innobackupex备份的过程提示找不到xtrabackup_55,需要把xtrabackup_innodb55重命名一下或者复制一份。(提示错误“xtrabackup_55: command not found”)
cp /usr/local/bin/xtrabackup_innodb55  /usr/local/bin/xtrabackup_55

5、innobackupex的参数选项

这里只简单一些常用的命令选项

--help     查询所有的命令选项,能够快速地了解选项的功能。
--user     数据库帐号
--password 数据库帐号密码
--host       备份数据库的IP或者主机名,TCP/IP连接

--default-files 指定配置文件(必须作为第一个参数选项)
--no-timestamp  备份文件时不会创建一个时间点名字目录,直接存放到指定的目录中,如2013-03-25_00-00-09。

--apply-log    备份后的文件不能只用用来恢复,数据并不完整,里面有未完成(提交或者回滚)的的事物。使用该选项可以撤销(undone)未提交的事务,或者重放(replay)事务日志。

--use-memory 默认值100M,通过使用更大的内存,加速preparing的过程。
--copy-back     把备份数据复制到数据目录。数据目录最好为一个空目录,且有mysql用户的读写权限。

--compact 不备份二级索引数据页。

6、备份操作过程
按照备份原理中步骤,操作分别如下。

1)backup,创建数据备份

innobackupex  --defaults-file=/etc/my_9306.cnf   --user=root  --password='extension@123'  --host=127.0.0.1  --port=9306   /opt/xtrabackup/

2)preparing,undo撤销未提交的事务,重放redo log

innobackupex  --defaults-file=/etc/my_9306.cnf   --user=root   --password='extension@123'  --host=127.0.0.1  --port=9306   --apply-log /opt/xtrabackup/2014-03-05_10-09-06

7、搭建复制从服务器
1)关闭从服务器上的mysqld进程。把上面创建的一致性备份复制到从服务器上的,并mysql的数据目录(比如data)和日志目录(默认在data目录中)备份。把这两个目录清空,mysql用户对这两个目录有写权限
2)把备份目录中的所有文件复制到数据目录中,也可以在从上安装Xtrabackup,使用–copy-back选项,把数据复制回数据目录。
3)启动mysqld,注意mysql的错误日志的输出信息。
4)现在就可以开始启动从服务器上的复制功能,主从的复制的功能就不多说了。mysql主上的备份时bin-log信息保存xtrabackup_binlog_info文件中,这个文件在备份目录下面。

cat xtrabackup_binlog_info
mysql-bin.000023    109899810

5)设置同步点

CHANGE MASTER TO MASTER_HOST='192.168.1.10',  MASTER_USER='replication', MASTER_PASSWORD='replication', MASTER_PORT=9306, MASTER_LOG_FILE='mysql-bin.000023',  MASTER_LOG_POS=109899810;

注意查看IO线程和SQL线程的状态。

总结

Xtrabackup第一次用于生产上备份,120G的数据备份时间不到两个小时。备份过程中服务器的负载没有明显的上升。备份的数据(包括索引数据)比原始的数据略大一点,当把备份数据库复制到其他的服务器上或者异地机房时,需要很长的网络传输时间或者很大的网络带宽资源。如果有专用的备份服务器,对于一些大表,可以删除索引或者备份的过程中不备份索引数据。innobackupex使用–conpact选项,就可以不备份二级索引数据。另外可以通过innodb fast index creation来快速创建二级索引。对于大数据库的备份,Percona Extrabackup是最佳的选择。高数据一致、快速备份与恢复,值得拥有。

此条目发表在mysql分类目录,贴了, , , 标签。将固定链接加入收藏夹。

Xtrabackup数据全备份与快速搭建从服务器》有 3 条评论

  1. Tony说:

    博主你好,我想问一下,比如说要备份的数据库是MySQL 5.1的,要作为slave的数据库是MySQL 5.6,用这种方式还原是否会存在什么问题?需要注意些什么?
    谢谢。

发表评论

电子邮件地址不会被公开。 必填项已用*标注

This site uses Akismet to reduce spam. Learn how your comment data is processed.