目录:


1.前言:

Xtrabackup是一个对InnoDB做数据备份的工具,支持在线热备份(备份时不影响数据读写),是商业备份工具InnoDB Hotbackup的一个很好的替代品。
XtraBackup优势 :
  • 1、无需停止数据库进行InnoDB热备
  • 2、增量备份MySQL
  • 3、流压缩到传输到其它服务器
  • 4、能比较容易地创建主从同步
  • 5、备份MySQL时不会增大服务器负载
 
Xtrabackup有两个主要的工具:xtrabackup、innobackupex
(1)xtrabackup只能备份InnoDB和XtraDB两种数据表,而不能备份MyISAM数据表
(2)innobackupex-1.5.1则封装了xtrabackup,是一个脚本封装,所以能同时备份处理innodb和myisam,但在处理myisam时需要加一个读锁

2.环境:
[root@bogon . (Final)
Kernel \r on an \m
[root@bogon . Distrib .., (x86_64) using  EditLine wrapper
[root@bogon .. .. unknown)
xtrabackup的安装包,可以从http://www.percona.com/下载
 
3.开始备份
3.1.备份工具采用innobackupex
格式:innobackupex 选项 备份文件的路径(不需要写备份的文件名)

其常用的通用选项如下:
--user=    具备完全权限的账号和密码
    --password=    
--socket=    指定mysql的socket文件,默认/var/lib/mysql/mysql.sock,一般来说都需要指定这个,因为基本遇到的数据库pid都不在这个位置.
--port=    指定mysql端口,默认3306
--defaults-file=    采用的mysql配置文件
 
如果不明确定义socket,可能在使用innobackupex进行备份的时候会报:
innobackupex: Error: Failed to connect to MySQL server: DBI connect(';mysql_read_default_group=xtrabackup','root',...) failed: Can't connect to local MySQL server through socket '/var/lib/mysql/mysql.sock' (2) at /usr/bin/innobackupex line 2945
即innobackupex默认寻找的socket是/var/lib/mysql/mysql.sock
 
3.2.一次完全备份:
额外的备份可选选项:
--database=    即将备份的数据库(默认是全部数据库)
--stream=    备份文件的存储格式,例如tar格式,# innobackupex --stream=tar  /backup | gzip > /backup/`date +%F_%H-%M-%S`.tar.gz 不过如此以来,恢复的时候就需要先解压.
    --tmpdir=    指定临时输出目录,因为--stream会使输出文件暂存到临时目录/tmp中,如果mysql并发很大,则/tmp的压力就可能很大,故而采用此选项重新指定一个临时输出目录
[root@localhost mysql]# innobackupex --user=root --password=123456 --socket=/tmp/mysql.sock /data/back_data/
[root@localhost mysql]# ls /data/back_data/2014-04-09_19-35-40/
backup-my.cnf  ib_logfile0  mysql               test               xtrabackup_checkpoints
ibdata1        ib_logfile1  performance_schema  xtrabackup_binary  xtrabackup_logfile
3.3.一次完全恢复:
完全恢复必须的恢复选项:
--apply-log    暂时通过备份文件启动mysql服务,将未提交的事务回滚,并将提交但未同步的数据进行同步,保证备份文件在备份时刻的数据一致性.
官方解析>>
 After creating a backup, the data is not ready to be restored. There might be uncommitted transactions to be undone or transactions in the logs to be replayed. Doing those pending operations will make the data files consistent and it is the purpose of the prepare stage . Once this has been done, the data is ready to be used.
--copy-back    将备份文件copy到my.cnf中指定的数据库位置
root root Apr   ibdata1
root root Apr   ib_logfile0
root root Apr   ib_logfile1
drwxr root root     Apr   mysql
drwxr root root     Apr   performance_schema
drwxr root root     Apr   test
修改数据库权限
[root@localhost mydata]# chown -R mysql.mysql /mydata
启动成功
[root@localhost mydata]# service mysqld start
Starting MySQL...... SUCCESS!
[root@localhost mysql]# mysql -uroot -p123456
Warning: Using a password on the command line interface can be insecure.
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 1
Server version: 5.6.13 MySQL Community Server (GPL)
 
Copyright (c) 2000, 2013, Oracle and/or its affiliates. All rights reserved.
 
Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.
 
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
 
mysql> 
 
3.4.增量备份
既然是增量备份,必然需要指定上一次备份的路径.且,第一次增量备份时,指定的上一次备份路径应该是完全备份.
那么增量备份需要额外添加的选项如下:
--incremental    即开启增量备份,后面跟增量备份的路径
--incremental-basedir    即上次备份的存储路径,不管是上次的完全备份,还是上次的增量备份
 
当前mysql状态
mysql rows . sec)
此时备份目录里只有一次完全备份
[root@localhost

添加一个数据库in1,便于测试第一次增量备份
mysql row affected (. sec)

mysql rows .00 sec)

开始第一次增量备份
[root@localhost ~]# innobackupex --user=root --password=123456 --socket=/tmp/mysql.sock --incremental-basedir=/data/back_data/2014-04-09_19-35-40/ --incremental /data/back_data/
此时备份目录状态
[root@localhost  

添加一个数据库in2,便于测试第二次增量备份
mysql row affected (. sec)

mysql rows . sec)

开始第二次增量备份
[root@localhost ~]# innobackupex --user=root --password=123456 --socket=/tmp/mysql.sock --incremental-basedir=/data/back_data/2014-04-10_11-25-56/ --incremental /data/back_data/
此时备份目录状态
[root@localhost    
三个目录从左至右依次为完全备份-->增量备份1-->增量备份2
 
3.5.增量备份的恢复过程
增量备份如果需要恢复的话,需要先将某个完全备份之后的所有增量备份的数据整合到此完全备份中.因此,需要新的额外整合选项
--redo-only    将增量备份的数据重放到完全备份中,但是不要作用于最后一次增量恢复,这个为什么不在最后一个上面执行,具体原因不了解.
 
官方解析>>
Note:--redo-only should be used when merging all incrementals except the last one. That’s why the previous
line doesn’t contain the --redo-only option. Even if the --redo-only was used on the last step, backup would
still be consistent but in that case server would perform the rollback phase.
    --incremental-dir=    指定本次整合中增量备份的存储路径,配合--redo-only选项使用
首先模拟故障,删除所有数据库,(我这里的数据库路径是/mydata)
[root@localhost ~]# service mysqld stop
Shutting down MySQL................ SUCCESS!
[root@localhost mydata]# rm -rf *
[root@localhost mydata]# ls
其次执行增量整合过程,将两个增量备份整合到完全备份中
三次命令依次是:
重放完全备份
整合增量备份1到完全备份
增量备份2到完全备份(不执行--redo-only)
[root@localhost ~]# innobackupex --user=root --password=123456 --apply-log --redo-only /data/back_data/2014-04-09_19-35-40/
[root@localhost ~]# innobackupex --user=root --password=123456 --apply-log --redo-only --incremental-dir=/data/back_data/2014-04-10_11-25-56/ /data/back_data/2014-04-09_19-35-40/
[root@localhost ~]# innobackupex --user=root --password=123456 --apply-log  --incremental-dir=/data/back_data/2014-04-10_11-48-44/ /data/back_data/2014-04-09_19-35-40/
最后,执行还原,即还原整合后的备份.
[root@localhost ~]# innobackupex --user=root --password=123456 --apply-log /data/back_data/2014-04-09_19-35-40/
[root@localhost ~]# innobackupex --user=root --password=123456 --copy-back /data/back_data/2014-04-09_19-35-40/
查看mydata目录
[root@localhost mydata]# ls
ibdata1  ib_logfile0  ib_logfile1  in1  in2  mysql  performance_schema  test
可以看到in1和in2两个数据库都还原成功.
修改数据库权限
[root@localhost mydata]# chown -R mysql.mysql .
启动mysql数据库,并登陆
[root@localhost
Server version.. MySQL Community Server (GPL)

Copyright (c) , , Oracle rows . sec)

 
 
 
 
 

mysql之7xtrabackup的更多相关文章

  1. Hadoop 中利用 mapreduce 读写 mysql 数据

    Hadoop 中利用 mapreduce 读写 mysql 数据   有时候我们在项目中会遇到输入结果集很大,但是输出结果很小,比如一些 pv.uv 数据,然后为了实时查询的需求,或者一些 OLAP ...

  2. mysql每秒最多能插入多少条数据 ? 死磕性能压测

    前段时间搞优化,最后瓶颈发现都在数据库单点上. 问DBA,给我的写入答案是在1W(机械硬盘)左右. 联想起前几天infoQ上一篇文章说他们最好的硬件写入速度在2W后也无法提高(SSD硬盘) 但这东西感 ...

  3. LINUX篇,设置MYSQL远程访问实用版

    每次设置root和远程访问都容易出现问题, 总结了个通用方法, 关键在于实用 step1: # mysql -u root mysql mysql> Grant all privileges o ...

  4. nodejs进阶(6)—连接MySQL数据库

    1. 建库连库 连接MySQL数据库需要安装支持 npm install mysql 我们需要提前安装按mysql sever端 建一个数据库mydb1 mysql> CREATE DATABA ...

  5. MySQL高级知识- MySQL的架构介绍

    [TOC] 1.MySQL 简介 概述 MySQL是一个关系型数据库管理系统,由瑞典MySQL AB公司开发,目前属于Oracle公司. MySQL是一种关联数据库管理系统,将数据保存在不同的表中,而 ...

  6. 闰秒导致MySQL服务器的CPU sys过高

    今天,有个哥们碰到一个问题,他有一个从库,只要是启动MySQL,CPU使用率就非常高,其中sys占比也比较高,具体可见下图. 注意:他的生产环境是物理机,单个CPU,4个Core. 于是,他抓取了CP ...

  7. 我的MYSQL学习心得(一) 简单语法

    我的MYSQL学习心得(一) 简单语法 我的MYSQL学习心得(二) 数据类型宽度 我的MYSQL学习心得(三) 查看字段长度 我的MYSQL学习心得(四) 数据类型 我的MYSQL学习心得(五) 运 ...

  8. Entity Framework Core 实现MySQL 的TimeStamp/RowVersion 并发控制

    将通用的序列号生成器库 从SQL Server迁移到Mysql 遇到的一个问题,就是TimeStamp/RowVersion并发控制类型在非Microsoft SQL Server数据库中的实现.SQ ...

  9. Docker笔记一:基于Docker容器构建并运行 nginx + php + mysql ( mariadb ) 服务环境

    首先为什么要自己编写Dockerfile来构建 nginx.php.mariadb这三个镜像呢?一是希望更深入了解Dockerfile的使用,也就能初步了解docker镜像是如何被构建的:二是希望将来 ...

随机推荐

  1. 为什么说 Git 比 SVN 更好

    为什么说 Git 比 SVN 更好 在版本控制系统的选型上,是选择Git还是SVN? 对于开源项目来说这不算问题.使用Git极大地提高了开发效率.扩大了开源项目的参与度. 增强了版本控制系统的安全性, ...

  2. CoFun 1613 单词连接

    Description Stan有N个不同的单词,这天,Stan新结交的两个朋友来他这里玩,Stan作为主人,他需要送给他们单词,但由于Stan不能偏心,所以Stan给每个单词一个权值v_i,他需要他 ...

  3. LeetCode_Subsets

    Given a set of distinct integers, S, return all possible subsets. Note: Elements in a subset must be ...

  4. [置顶] Android四大组件之BroadcastReceiver

    Android四大组件之BroadcastReceiver Broadcast Receiver 广播接收器,是一种负责接收广播消息并对消息做出响应的组件,和Service一样并不提供与用户交互的UI ...

  5. Struts2源代码解读之Action调用

    对于Struts2源代码的分析已经有些时日了,虽然网上有很多解读代码,不过自己还是写一个放上来,供大家参考一下. 解读过程: 直接在action类中打断点(包括构造函数和待执行方法)进行debug调试 ...

  6. 关于vs的lib文件和dll文件

    一.LIB文件概念 一个lib文件是obj文件的集合.当然,其中还夹杂着其他一些辅助信息,目的是为了让编译器能够准确找到对应的obj文件 二.与DLL的区别 (1)lib是编译时需要的,dll是运行时 ...

  7. 异步化DAO的设计和实践

    目前,公司技术规划要求未来所有的服务要全面实现异步化接口,使得每个服务能达到1万/秒的单机性能.我们知道,在一个服务请求中,可能会调用其他服务,还会使用memcache.kv以及mysql等.目前,大 ...

  8. [置顶] Objective-C ,ios,iphone开发基础:在UITextField输入完以后,隐藏键盘,

    在x-code Version 4.3.2 (4E2002)下编译: 在 Controller. m 文件下添加如下实例方法即可: - (void)viewDidUnload { [super vie ...

  9. poj 2229 Sumsets DP

    题意:给定一个整数N (1<= N <= 1000000),求出以 N为和 的式子有多少个,式子中的加数只能有2的幂次方组成 如5 : 1+1+1+1+1.1+1+1+2.1+2+2.1+ ...

  10. 【转】Linux下编译ffmpeg

    1.下载ffmpeg.下载网址:http://www.ffmpeg.org/download.html 2.解压缩tar -zxvf ffmpeg-2.0.1.tar.gz 3.配置,生成Makefi ...