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是最佳的选择。高数据一致、快速备份与恢复,值得拥有。

Xtrabackup数据全备份与快速搭建从服务器的更多相关文章

  1. [Windows Azure] 使用 Windows Azure 快速搭建 Redis 服务器

    [Windows Azure] 使用 Windows Azure 快速搭建 Redis 服务器   Redis相信玩开源,大数据的朋友们并不陌生,大家最熟悉的使用者就是新浪微博,微博的整体数据缓存都是 ...

  2. koa2+koa-generator+mysql快速搭建nodejs服务器

    koa2+koa-generator+mysql快速搭建nodejs服务器 用koa的脚手架koa-generator可以快速生成项目骨架,可以用于发开或者测试接口 https://github.co ...

  3. CentOS 6.5下快速搭建ftp服务器[转]

    CentOS 6.5下快速搭建ftp服务器 1.用root 进入系统 2.使用命令 rpm -qa|grep vsftpd 查看系统是否安装了ftp,若安装了vsftp,使用这个命令会在屏幕上显示vs ...

  4. CentOS 6.5下快速搭建ftp服务器

    来源:Linux社区 作者:Linux CentOS 6.5下快速搭建ftp服务器 1.用root 进入系统 2.使用命令 rpm -qa|grep vsftpd 查看系统是否安装了ftp,若安装了v ...

  5. Ubuntu 14.04快速搭建SVN服务器及日常使用【转】

    转自:http://www.linuxidc.com/Linux/2015-05/117735.htm 1.介绍  Subversion是一个自由,开源的版本控制系统,这个版本库就像一个普通的文件服务 ...

  6. Ubuntu 14.04快速搭建SVN服务器及日常使用

    1.介绍  Subversion是一个自由,开源的版本控制系统,这个版本库就像一个普通的文件服务器,不同的是,它可以记录每一次文件和目录的修改情况.这样就可以很方面恢复到以前的版本,并可以查看数据更改 ...

  7. 快速搭建windows服务器的可视化运维环境

    开发好的程序部署在服务器上,如何对服务器的基本指标进行监控呢?最近对一套工具进行了研究,可以快速搭建服务器监管环境,很是强大,最重要的是它还很酷炫. 原理:数据采集+时序数据库+可视化,下面记录一下搭 ...

  8. 快速搭建Web服务器软件PHP+Apache+MySQL

    搭建网站或者博客,需要一个合适的 Web 服务器.除了如下能在购买的虚拟空间上进行操作外,我们也可以在自己的电脑上搞定,因为可以用来方便快捷地测试网站或者博客主题,无论是 Wordpress.Joom ...

  9. 快速搭建vsftp 服务器并配置指定目录

    1  搭建vsftp 服务器 前期准备: 1.用root 进入系统 2.使用命令 rpm  -qa|grep vsftpd 查看系统是否安装了ftp,若安装了vsftp,使用这个命令会在屏幕上显示vs ...

随机推荐

  1. ARP (地址解析协议)

    地址解析协议,即ARP(Address Resolution Protocol),是根据IP地址获取物理地址的一个TCP/IP协议.主机发送信息时将包含目标IP地址的ARP请求广播到网络上的所有主机, ...

  2. mysql乱码解决

    在 /etc/my.cnf加上下面二句: skip-character-set-client-handshakecharacter-set-server = utf8

  3. PHP 批量生成静态文件目录代码

    <?php /** * @author:jiangzaixing 20160314 * 获取静态文件方法 */ class StaticFile { const MAP_FILE_NAME = ...

  4. 微信公众平台关于fakeid和openid的解析

    今天在开发项目的时候遇到了个问题: 搞不清楚微信官方接口的fromusername(openid)和公众平台内每个粉丝所拥有的fakeid,于是在测试号中开始了对以上两项的研究,结果如下:   1.对 ...

  5. Oracle的AWR报告分析

    * 定义:awr报告是oracle 10g下提供的一种性能收集和分析工具,它能提供一个时间段内整个系统资源使用情况的报告,通过这个报告,我们就可以了解一个系统的整个运行情况,这就像一个人全面的体检报告 ...

  6. ASP.NET MVC Model绑定的简单应用

    Model绑定是 MVC 框架根据 HTTP 请求数据创建 .NET 对象的一个过程. 一.简单类型 1.单一值

  7. ActiveMQ 简介与安装

    一. 概述与介绍 ActiveMQ 是Apache出品,最流行的.功能强大的即时通讯和集成模式的开源服务器.ActiveMQ 是一个完全支持JMS1.1和J2EE 1.4规范的 JMS Provide ...

  8. 【javascript实例】 具有立体效果的图片浏览器

    此实例,直接粘贴代码即可运行,当然图片的路径不要忘记改了. 此实例是我一遍学习一边写出来的,希望能够帮到大家,一起学习.效果如图所示: html代码如下所示: <html xmlns=" ...

  9. Eclipse 寻找迷失的ID

    这一篇会介绍用一种蠢的办法找拓展点常量ID. 1.打开IDE,之后什么都不干,直接关闭IDE,将当前工作区间(workspace)上的文件.metadata\.plugins\org.eclipse. ...

  10. 从零开始,做一个NodeJS博客(二):实现首页-加载文章列表和详情

    标签: NodeJS 0 这个伪系列的第二篇,不过和之前的几篇是同一天写的.三分钟热度貌似还没过. 1 静态资源代理 上一篇,我们是通过判断请求的路径来直接返回结果的.简单粗暴,缺点明显:如果url后 ...