说明

 
xtrabackup  --percona
特点:
  • 开源,在线备份innodb表
  • 支持限速备份,避免对业务造成影响
  • 支持流备
  • 支持增量备份
  • 支持备份文件压缩与加密
  • 支持并行备份与恢复,速度快
地址:https://www.percona.com/downloads/XtraBackup
 
xtrabackup备份原理
  • 基于innodb的crash-recovery功能
  • 备份期间允许用户读写,写请求产生redo日志
  • 从磁盘上拷贝数据文件
  • 从innodb redo log  file实时拷贝走备份期间产生的所有redo日志
  • 恢复的时候 数据文件+redo日志 = 一致性数据
 
实用脚本innobackupex
  • 开源Perl脚本,封装调用xtrabackup及一系列相关工具与OS操作,最终完成备份过程
  • 支持备份Innodb和其他引擎的表
  • 备份一致性保证
 
 
安装问题

 
问题一:innobackupex发现mysql模块没有安装
140312 13:30:40  innobackupex: Connecting to MySQL server with DSN 'dbi:mysql:;mysql_read_default_file=/etc/my.cnf;mysql_read_default_group=xtrabackup' as 'root'  (using password: YES).
innobackupex: Error: Failed to connect to MySQL server as DBD::mysql module is not installed at /usr/local/mysql/bin/innobackupex line 2956.
 
因为环境是使用二进制文件安装的mysql,在Ubuntu下没有安装mysql-server;
解决:安装mysql-server
aiapple@ubuntu:~$ sudo apt-get install mysql-server
 
 
innobackupex使用

  1. 全量备份
  2. 增量备份
  3. 流方式备份
  4. 并行备份
  5. 限流备份
  6. 压缩备份
  7. 常用参数介绍
1)全量备份:
aiapple@ubuntu:~$ innobackupex-1.5. --user=root --password= --defaults-file=/tmp/mysqldata/my.cnf dbbackup/

innobackupex-1.5.: Backup created in directory '/home/aiapple/dbbackup/2016-08-20_06-16-26'
innobackupex-1.5.: MySQL binlog position: filename 'mysql-bin.000001', position
:: innobackupex-1.5.: Connection to database server closed
:: innobackupex-1.5.: completed OK!
  #备份成功;
  aiapple@ubuntu:~$ ls dbbackup/
  2016-08-20_06-16-26  
2)增量备份,需指定上一次备份目录
注意:innobackupex 增量备份仅针对InnoDB这类支持事务的引擎,对于MyISAM等引擎,则仍然是全备。
增量备份:
 
aiapple@ubuntu:~$ innobackupex-1.5. --user=root --password= --defaults-file=/tmp/mysqldata/my.cnf --incremental --incremental-dir dbbackup/--20_06--/ dbbackup/

innobackupex-1.5.: Backup created in directory '/home/aiapple/dbbackup/2016-08-20_06-24-08'
innobackupex-1.5.: MySQL binlog position: filename 'mysql-bin.000001', position
:: innobackupex-1.5.: Connection to database server closed
:: innobackupex-1.5.: completed OK! #备份成功
aiapple@ubuntu:~$ ls dbbackup/
--20_06-- --20_06--
3)流式备份()
aiapple@ubuntu:~$ innobackupex-1.5. --user=root --password= --defaults-file=/tmp/mysqldata/my.cnf --stream=xbstream dbbackup/ > dbbackup/stream.bak

innobackupex-1.5.: Backup created in directory '/home/aiapple/dbbackup'
innobackupex-1.5.: MySQL binlog position: filename 'mysql-bin.000001', position
:: innobackupex-1.5.: Connection to database server closed
:: innobackupex-1.5.: completed OK! #备份成功
aiapple@ubuntu:~$ ls dbbackup/
--20_06-- --20_06-- stream.bak
4)并行备份--使用4个线程
 
aiapple@ubuntu:~$ innobackupex-1.5. --user=root --password= --defaults-file=/tmp/mysqldata/my.cnf --parallel= dbbackup/

innobackupex-1.5.: Backup created in directory '/home/aiapple/dbbackup/2016-08-20_06-36-34'
innobackupex-1.5.: MySQL binlog position: filename 'mysql-bin.000001', position
:: innobackupex-1.5.: Connection to database server closed
:: innobackupex-1.5.: completed OK! #备份成功
aiapple@ubuntu:~$ ls dbbackup/
--20_06-- --20_06-- --20_06-- stream.bak
5)限流备份--读写速度限制10M
aiapple@ubuntu:~$ innobackupex-1.5. --user=root --password= --defaults-file=/tmp/mysqldata/my.cnf --throttle= dbbackup/

innobackupex-1.5.: Backup created in directory '/home/aiapple/dbbackup/2016-08-20_06-38-26'
innobackupex-1.5.: MySQL binlog position: filename 'mysql-bin.000001', position
:: innobackupex-1.5.: Connection to database server closed
:: innobackupex-1.5.: completed OK! #备份成功
aiapple@ubuntu:~$ ls dbbackup/
--20_06-- --20_06-- stream.bak
--20_06-- --20_06--
6)压缩备份--可以指定压缩备份线程
 
aiapple@ubuntu:~$ innobackupex-1.5. --user=root --password= --defaults-file=/tmp/mysqldata/my.cnf --compress --compress-thread  dbbackup/

innobackupex-1.5.: Backup created in directory '/home/aiapple/dbbackup/2016-08-20_06-40-26'
innobackupex-1.5.: MySQL binlog position: filename 'mysql-bin.000001', position
:: innobackupex-1.5.: Connection to database server closed
:: innobackupex-1.5.: completed OK! #备份成功
aiapple@ubuntu:~$ ls dbbackup/
--20_06-- --20_06-- --20_06--
--20_06-- --20_06-- stream.bak
7)常用参数
innobackupex --help | less
 
 
恢复

 
1.全量备份与恢复:
1)全量备份
mysql> show tables;
+--------------+
| Tables_in_tt |
+--------------+
| course |
| t1 |
+--------------+
rows in set (0.00 sec) aiapple@ubuntu:~$ innobackupex --user=root --password= --defaults-file=/tmp/mysqldata/my.cnf dbbackup/ #备份成功;
aiapple@ubuntu:~$ ls dbbackup/
--20_06--
2)删除表
mysql> drop table t1;
Query OK, rows affected (0.02 sec) mysql> show tables;
+--------------+
| Tables_in_tt |
+--------------+
| course |
+--------------+
row in set (0.00 sec)
 
3)通过全量备份恢复
#只需通过apply-log指定备份文件
aiapple@ubuntu:~$ innobackupex --apply-log dbbackup/--20_06--

InnoDB: Starting shutdown...
InnoDB: Shutdown completed; log sequence number
:: innobackupex: completed OK!
 
#回滚redo log文件;
aiapple@ubuntu:~/dbbackup/--20_06--$ ls
backup-my.cnf mysql xtrabackup_binlog_info
ibdata1 performance_schema xtrabackup_checkpoints
ib_logfile0 tt xtrabackup_logfile
ib_logfile1 xtrabackup_binary
4)复制恢复文件到数据目录
#注意:数据目录要求是空,最好先备份,再清空;
aiapple@ubuntu:~/dbbackup$ innobackupex  --defaults-file=/tmp/mysqldata/my.cnf --user=root --password= --copy-back --20_06--/

innobackupex-1.5.: Copying '/home/aiapple/dbbackup/2016-08-20_06-16-26/ib_logfile1' to '/tmp/mysqldata/node1/ib_logfile1'
innobackupex-1.5.: Finished copying back files.
:: innobackupex-1.5.: completed OK!
 
5)查看
mysql> show tables;
+--------------+
| Tables_in_tt |
+--------------+
| course |
| t1 |
+--------------+
rows in set (0.00 sec)
2.增量备份与恢复
#需指定上次备份目录
1)增加表zengliang;
mysql> show tables;
+--------------+
| Tables_in_tt |
+--------------+
| course |
| t1 |
+--------------+
rows in set (0.00 sec) mysql> create table zengliang(a int ,b int);
Query OK, rows affected (0.06 sec)
2)增量备份
#注意--incremental-dir后面跟基础备份目录,之后再跟增量备份目录,
#与应用增量备份日志相反
aiapple@ubuntu:~$ innobackupex --user=root --password= --defaults-file=/tmp/mysqldata/my.cnf --incremental --incremental-dir dbbackup/--20_06--/ dbbackup/

innobackupex-1.5.: MySQL binlog position: filename 'mysql-bin.000001', position
:: innobackupex-1.5.: Connection to database server closed
:: innobackupex-1.5.: completed OK!
 
#备份成功
aiapple@ubuntu:~$ ls dbbackup/
--20_06-- --20_06--
3)应用日志恢复数据
--apply-log    回滚日志
--redo-only    回滚合并(多个增量的时候,增量也需要用到,直到最后一个增量不用)
     a)恢复完全备份数据
 aiapple@ubuntu:~/dbbackup$ innobackupex --apply-log --redo-only --20_06--
     b)应用增量备份日志
     #注意此时--incremental-dir后面跟的是增量备份的目录,之后再跟基础备份的目录;
     #与增量备份相反
     #注意:由于权限问题,使用innobackupex,应该使用root账户,不然这条不会通过;

  aiapple@ubuntu:~/dbbackup$ innobackupex --apply-log --incremental-dir=(增量备份目录) (基础备份目录)
#不知何原因总是不太容易成功;
 
4)复制恢复文件到数据目录
#注意:数据目录要求是空,最好先备份,再清空;
aiapple@ubuntu:~/dbbackup$ innobackupex  --defaults-file=/tmp/mysqldata/my.cnf --user=root --password= --copy-back --20_06--/

innobackupex-1.5.: Copying '/home/aiapple/dbbackup/2016-08-20_06-16-26/ib_logfile1' to '/tmp/mysqldata/node1/ib_logfile1'
innobackupex-1.5.: Finished copying back files. :: innobackupex-1.5.: completed OK!
3.还原压缩
 
解压--innobackupex --decompress /dbbackup/(备份目录)
应用日志--innobackupex --apply-log /dbbackup/(压缩后目录)
 
 
4)还原流备
 
mkdir stream
xbstream -C stream -x < stream.bak
并行恢复--innobackupex --parallel=4 --apply-log --use-memory=200MB /dbbackup/stream
 
--use-memory:加快恢复速度;
 
binlog恢复

 
在备份恢复之后,使用binlog恢复没有备份的数据;
 
1)查看备份时binlog点;
aiapple@ubuntu:~/dbbackup/mysql3309$ cat xtrabackup_binlog_info
mysql-bin.
 
2)使用mysqlbinlog分析二进制日志
aiapple@ubuntu:/tmp/mysqldata/node1$ mysqlbinlog -vv mysql-bin. | less
# at
# :: server id end_log_pos CRC32 0x683bcdc6 Query thread_id= exec_time= error_code=
SET TIMESTAMP=/*!*/;
insert into t6 values(,),(,),(,)
/*!*/;
# at
# :: server id end_log_pos CRC32 0xf264071a Xid =
COMMIT/*!*/;
# at
# :: server id end_log_pos CRC32 0x3f63ae99 Query thread_id= exec_time= error_code=
SET TIMESTAMP=/*!*/;
BEGIN
/*!*/;
# at
# :: server id end_log_pos CRC32 0x5c3b7667 Query thread_id= exec_time= error_code=
SET TIMESTAMP=/*!*/;
insert into t6 values(,),(,),(,)
/*!*/;
# at
# :: server id end_log_pos CRC32 0x4ea5c481 Xid =
COMMIT/*!*/;
可以看到结束节点在2298
 
3)使用mysqlbinlog+管道+mysql sock登陆
aiapple@ubuntu:/tmp/mysqldata/node1$ mysqlbinlog -vv --start-position=   --stop-position= mysql-bin. | mysql -uroot -p --socket=/home/aiapple/dbbackup/mysql3309/mysql.sock
也可以按照时间恢复:
aiapple@ubuntu:/tmp/mysqldata/node1$ mysqlbinlog -vv --start-datetime='2016-08-20 9:03:58'   --stop-datetime='2016-08-20 9:11:51' mysql-bin. | cat
 

xtrabackup备份与恢复实践的更多相关文章

  1. RMAN备份与恢复实践(转)

    1   RMAN备份与恢复实践 1.1  备份 1.1.1 对数据库进行全备 使用backup database命令执行备份 RMAN> BACKUP DATABASE; 执行上述命令后将对目标 ...

  2. MySQL入门篇(七)之Xtrabackup备份与恢复

    一.Xtrabackup介绍 MySQL冷备.mysqldump.MySQL热拷贝都无法实现对数据库进行增量备份.在实际生产环境中增量备份是非常实用的,如果数据大于50G或100G,存储空间足够的情况 ...

  3. Xtrabackup备份与恢复MySQL

    1.innobackupex备份原理 .innobackupex启动并fork一个进程启动xtrabackup,然后等待xtrabackup备份InnoDB文件; .xtrabackup备份时存在两个 ...

  4. Xtrabackup备份与恢复

    一.Xtrabackup介绍 MySQL冷备.mysqldump.MySQL热拷贝都无法实现对数据库进行增量备份.在实际生产环境中增量备份是非常实用的,如果数据大于50G或100G,存储空间足够的情况 ...

  5. 16、Xtrabackup备份与恢复

    XTRABACKUP xtrabackup是percona公司开发的第三方备份软件,只备份innodb引擎表的ibd文件(frm不备份),不备份myisam引擎表.备份性能很高,备份期间没有任和锁,d ...

  6. XtraBackup 备份与恢复实例讲解

    前一篇文章我们讲到了PXB的原理以及安装方法,接下来将详细介绍 XtraBackup 备份和恢复的具体过程. xtrabackup 选项 xtrabackup 工具有许多参数,具体可去官网查询(xtr ...

  7. KubeSphere 日志备份与恢复实践

    为什么需要日志备份 KubeSphere 日志系统使用 Fluent Bit + ElasticSearch 的日志采集存储方案,并通过 Curator 实现对 Index 的生命周期管理,定期清理久 ...

  8. xtrabackup 备份与恢复

    书上摘抄 ---深入浅出mysql 448页  grant reload on *.* to 'backup'@'localhost' identified by '123456'; grant re ...

  9. mysql 开发进阶篇系列 46 物理备份与恢复( xtrabackup的 选项说明,增加备份用户,完全备份案例)

    一. xtrabackup 选项说明 在操作xtrabackup备份与恢复之前,先看下该工具的选项,下面记录了xtrabackup二进制文件的部分命令行选项,后期把常用的选项在补上.点击查看xtrab ...

随机推荐

  1. 搜索栏会消失 uisearchbar 狂点消失的问题解决

    经过反复试验和错误很多,我发现当searchdisplaycontroller结束搜索,搜索栏会消失,所以我重新插入到搜索栏表头和它为我工作. - (void)searchDisplayControl ...

  2. JSP EL表达式 与输入有关的内置对象

    与输入有关的隐含对象有两个param和paramValues,用来取得用户的请求参数.在使用EL之前可以使用如下代码取得用户的请求参数: request.getParameter(String nam ...

  3. POJ 1837 DP

    一开始看到这个题 第一反应:暴搜! 看看数据范围 ...放弃了 然后就在各种憋状态转移方程. 各种不会 还是看了Discuss里面说的才有点儿思路 直接放状态转移方程: f[i][ j+ w[i]*c ...

  4. word转pdf字体格式变乱的问题

    完成word转pdf的功能之后,本地测试没问题,然后发布到服务器上,就遇到了字体变乱的问题,如下: 由于我本地发布后导出没有出现同样情况,而服务器和本地的最大区别在于字体库,于是,把服务器上关于需要用 ...

  5. [NOIP2011] 计算系数(二项式定理)

    题目描述 给定一个多项式(by+ax)^k,请求出多项式展开后x^n*y^m 项的系数. 输入输出格式 输入格式: 输入文件名为factor.in. 共一行,包含5 个整数,分别为 a ,b ,k , ...

  6. CentOS 7 安装 Oracle 11g

    新到的云主机环境,系统是CentOS 7 x86_64,需要安装上安装Oracle11.2g.摸索很长时间,终于折腾搞定了. 下载 Oracle 下载地址:Oracle 11.2.0.2 (因为不是已 ...

  7. Android学习四:数据库操作

    1前言 android中使用SQLite作为数据库,在进行相关的开发的时候不需要导入包.SQLite起符合SQL标准,也有自己的一些特性,是一个轻量级的数据库. 2代码 简单的数据库类封装 packa ...

  8. vb6 关闭显示器

    Option Explicit Private Const WM_SYSCOMMAND As Long = &H112 Private Const SC_MONITORPOWER As Lon ...

  9. testNG中同一个test节点上class的执行顺序

    如果每个class中都有setUp(),那么先执行所有class的setUp方法,之后再执行具体的测试方法.这样就导致只有最后一个测试能通过,其他测试都失败了. 具体设置如下图:

  10. 【java】spring-data-jpa 集成hibernate实现多条件分页查询

    初次接触spring-data-jpa,实现多条件分页查询. 基础环境 Spring Boot+spring-data-jpa+hibernate+mysql 1.接口 要继承这个接口,这个接口提供了 ...