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

转载于:https://www.cnblogs.com/wajika/p/6242055.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/397001.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

简单的java方法_Java简单实用方法一

整理以前的笔记,在学习Java时候,经常会用到一些方法。虽然简单但是经常使用。因此做成笔记,方便以后查阅这篇博文先说明构造和使用这些方法。1,判断String类型数据是否为空String类型的数据为空,主要为等于null或”“那么只要判断…

Android应用程序开发

第一章 Android应用初体验 1.1应用基础 activity是Android SDK中Activity类的一个具体实例,负责管理用户与信息屏的交互。 应用的功能是通过编写一个个Activity子类来实现的。 布局定义了一系列用户界面对象以及它们显示在屏幕上的位置。组成布局的定义保存在XML文件…

phonegap

phonegap 框架详解 转自:http://www.cnblogs.com/hubcarl/p/4216844.html首先, 来看一下phonegap 初始化流程以及Native 与 JS 交互流程图。 说明:socket server模式下, phonegap.js 源码实现的采用1 毫秒执行一次XHR请求, 当Native JS 队列里面有JS语…

j2ee核心模式_Operator和Sidecar正在成为软件交付新模式

现如今的开发人员希望可以开发出具备弹性和可扩展的分布式系统。该系统受益于软件复用和开源模型创新,针对安全性问题能够轻易完成补丁更新并进行低风险的升级。该系统不可能通过带有各种嵌入式语言库的应用程序框架来实现。最近,一篇关于“多运行时微服…

微信JS-SDK选择相册或拍照并上传PHP实现

理解:微信上传接口是拍照,或者选择本地照片,上传到微信的服务器,获取到一个id,通过token与这个id获取到图片,保存到服务器即可。 效果 通过微信js接口,调用底层程序。 需要引入js文件&#xff0…

JMS-ActiveMQ学习-3 ActiveMQ与Spring集成

Spring下开发消息的发送和接收程序 点对点模式 一、创建生产者项目 1.创建maven项目 2.添加spring-jms、jms规范、activemq依赖 <dependencies> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-jms&…

看libevent所遇到的英语生词

libevent – an event notification library The libevent API &#xff08;libevent应用程序&#xff09;provides a mechanism&#xff08;机制&#xff09; to execute&#xff08;执行&#xff09; a callback function&#xff08;回调函数&#xff09; when a specific&a…

java中迭代器要导包吗_java 中迭代器的使用方法详解

java 中迭代器的使用方法详解前言&#xff1a;迭代器模式将一个集合给封装起来&#xff0c;主要是为用户提供了一种遍历其内部元素的方式。迭代器模式有两个优点&#xff1a;①提供给用户一个遍历的方式&#xff0c;而没有暴露其内部实现细节&#xff1b;②把元素之间游走的责任…

android socket 长连接_TCP/IP,http,socket,长连接,短连接

点击上方蓝色字体&#xff0c;选择“标星公众号”优质文章&#xff0c;第一时间送达上一篇&#xff1a;这300G的Java资料是我师傅当年给我的&#xff0c;免费分享给大家下一篇&#xff1a;这200G的Java实战资料是我师傅当年教我的第二招作者 | ksfzhaohui来源 | my.oschina.net…

二、Python安装扩展库

第一步:推荐easy_install工具 下载地址:https://pypi.python.org/pypi/setuptools 下载"ez_setup.py"文件; 通过运行cmd命令找到ez_setup.py文件所在目录,通过命令[python ez_setup.py]执行安装easy_install 安装成功截图 第二步:安装扩展酷 例如安装"suds"…

ORACLE 10.2.01升级10.2.05 for windows 详细文档

最近要做一个数据库的升级工作&#xff0c;提前在自己的PC机上练习了一下&#xff0c;这种文档在网上很多&#xff0c;但是大多都是使用命令编辑脚本&#xff0c;其实数据库还有一个DBUA的升级工具可以使用&#xff0c;使升级工作方便了很多。 OS环境&#xff1a;windows XP 32…

php 导出mysql 结构_导出结构和数据(如phpmyadmin)

在这里,您可以找到一个全面的解决方案来转储MySQL结构和数据,比如在PMA中(不使用exec、passthru等):它是Dszymczuk项目的一个分支,有我的增强功能。用法很简单//MySQL connection parameters$dbhost localhost;$dbuser dbuser;$dbpsw pass;$dbname dbname;//Connects to my…

tableViewCell的操作

在iOS的开发过程中&#xff0c;tableView的使用永远都是最常用的控件。今天学习了一下tableViewCell的操作。代码并不是很复杂&#xff0c;如果有OC开发经验的人&#xff0c;应该很容易看懂的。 class ViewController: UIViewController ,UITableViewDelegate, UITableViewData…

stm32正交编码器 原理图_恶劣环境下应用的电感式增量编码器和绝对编码器

编码器可分为两种基本类型 - 增量编码器和绝对编码器。增量编码器的显着特征是它报告角度的变化。换句话说&#xff0c;当增量编码器通电时&#xff0c;它不会报告其角位置&#xff0c;直到它具有测量的参考点。绝对编码器明确地在比例或范围内报告其位置。换句话说&#xff0c…

【SqlServer】Sqlserver中的DOS命令操作

输入osql ?查看是否支持当前版本&#xff0c;如果是SQL Server 2005以上用Sqlcmd , 以下用Osql连接数据库&#xff08;a&#xff09;Osql -S localhost -U username -P password(SQL Server身份验证&#xff0c;需要用户民和密码)&#xff08;b&#xff09;Osql -S localhos…

微信小程序内训笔记

2016年9月22日凌晨微信官方正式宣布“小程序”开始内测&#xff0c;有“微信之父”之称、腾讯集团高级执行副总裁张小龙在2016年末对外宣布“小程序“应用将于2017年1月9日正式推出 这一次微信还是按照惯例&#xff0c;通过机器跑出的数据&#xff0c;首先将“小程序”开放给了…

python基础代码的含义_Python基础学习篇

原标题&#xff1a;Python基础学习篇 1、编码 默认情况下&#xff0c;Python 3 源码文件以 UTF-8 编码&#xff0c;所有字符串都是unicode 字符串。 当然你也可以为源码文件指定不同的编码&#xff1a;# -*- coding: cp-1252 -*- 2、标识符 第一个字符必须是字母表中字母或下划…

java面向对象super_【JavaSE】面向对象之super、final

一、super关键字它是一个指代变量&#xff0c;用于在子类中指代父类对象。1.作用指代父类对象区分子父类同名的成员变量&#xff0c;区分父类中成员变量和子类中同名的局部变量2.使用与this相同&#xff0c;调用父类成员变量和成员方法&#xff1a;super.xx super.xxx()调用父类…

Week_1_Physical Electronics and Semiconductors

Semiconductors Fundamentals Type of solids 转载于:https://www.cnblogs.com/ronnielee/p/9579783.html

【Linux高频命令专题(23)】tar

概述 通过SSH访问服务器&#xff0c;难免会要用到压缩&#xff0c;解压缩&#xff0c;打包&#xff0c;解包等&#xff0c;这时候tar命令就是是必不可少的一个功能强大的工具。linux中最流行的tar是麻雀虽小&#xff0c;五脏俱全&#xff0c;功能强大。 tar命令可以为linux的文…