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、安装支持包

  1. yum install cmake gcc gcc-c++ -y
  2. yum install automake autoconf -y
  3. yum install bzr zlib-devel libgcrypt-devel -y
  4. yum install libaio libaio-devel   bison libtool ncurses-devel -y

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

  1. #./utils/build.sh
  2. Build an xtrabackup binary against the specified InnoDB flavor.
  3.  
  4. Usage: build.sh CODEBASE
  5. where CODEBASE can be one of the following values or aliases:
  6. innodb51         | plugin                build against InnoDB plugin in MySQL 5.1
  7. innodb55         | 5.5                   build against InnoDB in MySQL 5.5
  8. innodb56         | 5.6,xtradb56,         build against InnoDB in MySQL 5.6
  9. | mariadb100,galera56
  10. xtradb51         | xtradb,mariadb51      build against Percona Server with XtraDB 5.1
  11. | mariadb52,mariadb53
  12. xtradb55         | galera55,mariadb55    build against Percona Server with XtraDB 5.5

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

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

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

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

5、innobackupex的参数选项

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

  1. --help     查询所有的命令选项,能够快速地了解选项的功能。
  2. --user     数据库帐号
  3. --password 数据库帐号密码
  4. --host       备份数据库的IP或者主机名,TCP/IP连接
  5.  
  6. --default-files 指定配置文件(必须作为第一个参数选项)
  7. --no-timestamp  备份文件时不会创建一个时间点名字目录,直接存放到指定的目录中,如2013-03-25_00-00-09
  8.  
  9. --apply-log    备份后的文件不能只用用来恢复,数据并不完整,里面有未完成(提交或者回滚)的的事物。使用该选项可以撤销(undone)未提交的事务,或者重放(replay)事务日志。
  10.  
  11. --use-memory 默认值100M,通过使用更大的内存,加速preparing的过程。
  12. --copy-back     把备份数据复制到数据目录。数据目录最好为一个空目录,且有mysql用户的读写权限。
  13.  
  14. --compact 不备份二级索引数据页。

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

1)backup,创建数据备份

  1. 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

  1. 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文件中,这个文件在备份目录下面。

  1. cat xtrabackup_binlog_info
  2. mysql-bin.000023    109899810

5)设置同步点

  1. 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. 【Java每日一题】20161117

    package Nov2016; public class Ques1117 { public static void main(String[] args) { Sub sub = new Sub( ...

  2. PHPUnit单元测试中类protected/private方法测试

    这里首先有一个问题要考虑的是,这类方法是否要被测试? 理论上,这类方法都会被其它public类型的方法调用,只要对那些public的方法做充分的测试,就可以保证这些方法的可靠性,就没有必要再测了.好像 ...

  3. springmvc(2)Controller源码简单解析

    前面简单的分析了一下DispatcherServlet,接下来分析一下Controller,在web的MVC中,Controller就是其中的C,启动的一些页面逻辑处理,页面映射的功能: 首先看看超类 ...

  4. Greenplum(GP)常见问题,注意事项

    1.在安装过程中,出现的 source /usr/local/greenplum-db/greenplum_path.sh 不要写到profile或者./bashrc文件中 因为该句会导致python ...

  5. MySQL max_allowed_packet设置及问题

    MySQL根据配置文件会限制server接受的数据包大小. 有时候大的插入和更新会被max_allowed_packet 参数限制掉,导致失败. 查看目前配置 show VARIABLES like ...

  6. android 6.0添加权限

        @Override    public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissio ...

  7. Play!中使用HTTP异步编程

    本章译者:@Sam Liu (译者未留下自己的主页,请Sam Liu见此文,加入群168013302联系‘大黄蜂@翻译play’) 这一章主要讲解如何运用异步模式实现典型的长连接(long-polli ...

  8. Code First :使用Entity. Framework编程(4) ----转发 收藏

    第4章 对关系使用默认规则与配置 在第3章,你已经掌握了默认规则与配置对属性以及其在数据库映射的字段的影响.在本章,我们把焦点放在类之间的关系上面.这包括类在内存如何关联,还有数据库中的外键维持等.你 ...

  9. CSS3与页面布局学习笔记(二)——盒子模型(Box Model)、边距折叠、内联与块标签、CSSReset

    一.盒子模型(Box Model) 盒子模型也有人称为框模型,HTML中的多数元素都会在浏览器中生成一个矩形的区域,每个区域包含四个组成部分,从外向内依次是:外边距(Margin).边框(Border ...

  10. WPF如何实现一个漂亮的页签导航UI

    最近看到一个比较漂亮的UI主界面,该UI是用左边的页签进行导航,比较有特色,就想着尝试用WPF来实现一下.经过一番尝试,基本上将UI设计图的效果用WPF程序进行了实现.下面介绍一下主要的思路: 1 U ...