转自http://www.cnblogs.com/olinux/p/5207887.html

xtrabackup的官方下载地址为

  1. http://www.percona.com/software/percona-xtrabackup。

grant all privileges on *.* to 'dbbak'@'localhost' identified by 'bk2016' ;
innobackupex --defaults-file=/etc/my.cnf --user=dbbak --password=bk2016 /data/dbbak/
innobackupex --apply-log /data/dbbak/2017-07-26_19-46-08/ -- 该语句用来校验 将增量1应用到完全备份
--apply-log预备全备份:创建完备份之后的数据不能马上用来还原,需要使用 --apply-log 回滚未提交事务,前滚已提交是会务,让数据库文件保持一致性。内部机制:读取备份文件夹中的配置文件,然后innobackupex重做已提交事务,回滚未提交事务,之后数据就被写到了备份的数据文件(innodb文件)中,并重建日志文件。这一步隐式调用了2次xtrabackup –prepare

innobackupex --defaults-file=/etc/my.cnf --copy-back --rsync /data/dbbak/2017-07-26_19-46-08/ -- 最终用来还原文件
innobackupex --defaults-file=/etc/my.cnf --user=dbbak --password=bk2016 --incremental /data/dbbak/ --incremental-basedir=/data/dbbak/2017-07-26_19-46-08/ --parallel=2
innobackupex --defaults-file=/etc/my.cnf --user=dbbak --password=bk2016 --incremental /data/dbbak/ --incremental-basedir=/data/dbbak/2017-07-26_20-14-05/ --parallel=2

innobackupex --apply-log --redo-only /data/dbbak/2017-07-26_19-46-08/

innobackupex --apply-log --redo-only /data/dbbak/2017-07-26_19-46-08/ --incremental-dir=/data/dbbak/2017-07-26_20-14-05/
innobackupex --apply-log /data/dbbak/2017-07-26_19-46-08/ --incremental-dir=/data/dbbak/2017-07-26_20-17-53/
innobackupex --apply-log /data/dbbak/2017-07-26_19-46-08/

innobackupex --defaults-file=/etc/my.cnf --copy-back --rsync /data/dbbak/2017-07-26_19-46-08/

-- 完整实现

xtrabackup包含两个主要的工具,即xtrabackup和innobackupex,二者区别如下:

  1. 1 xtrabackup只能备份innodbxtradb两种引擎的表,而不能备份myisam引擎的表;
  2.  
  3. 2 innobackupex是一个封装了xtrabackupPerl脚本,支持同时备份innodbmyisam,但在对myisam备份时需要加一个全局的读锁。还有就是myisam不支持增量备份。

innobackupex工具的备份过程原理图

如图,备份开始的时候

  1. 1 首先会启动一个xtrabackup_log后台检测的进程,实时检测mysql redo的变化,一旦发现redo有新的日志写入,立刻将日志写入到日志文件xtrabackup_log
  2.  
  3. 2 复制innodb的数据文件和系统表空间文件idbdata1到对应的以默认时间戳为备份目录的地方
  4.  
  5. 3 复制结束后,执行flush table with read lock操作
  6.  
  7. 4 复制.frm .myd .myi文件
  8.  
  9. 5 并且在这一时刻获得binary log 的位置
  10.  
  11. 6 将表进行解锁unlock tables
  12.  
  13. 7 停止xtrabackup_log进程

全库恢复的过程

这一阶段会启动xtrabackup内嵌的innodb实例,将xtrabackup日志xtrabackup_Log进行回放,将提交的事务信息变更应用到innodb数据或表空间,同时回滚未提交的事务

增量备份

增量备份主要是通过拷贝innodb中有变更的页(指的是LSN大于xtrabackup_checkpoints中的LSN号)。增量备份是基于全备的,第一次增量备份的数据是基于上一次全备,之后的每一次增倍都是基于上一次的增倍,最终达到一致性的增倍,增倍的过程中,和全备很类似,区别在于第二步

增量备份的恢复

和全库恢复类似,也需要两步

1 数据文件的恢复 分3部分 全备 增量备份和xtrabackup_log

2 对未提交事务的回滚

=================================================================================

innobackupex的使用案例

  1. rpm -Uhv http://www.percona.com/downloads/percona-release/percona-release-0.0-1.x86_64.rpm
  2. yum -y install percona-xtrabackup

1 创建备份用户

  1. mysql> grant reload,lock tables,replication client on *.* to 'dbbak'@'localhost' identified by 'bk2016' ;
  2. mysql> flush privileges;

进行数据库全备

  1. mkdir -pv /data/dbbak
  2. cd /data/dbbak

使用以下参数进行全库备份

  1. [root@MASTER_03 dbbak]# innobackupex --defaults-file=/etc/my.cnf --user=dbbak --password=bk2016 --socket=/data/3306/tmp/mysql.sock /data/dbbak/

xtrabackup: Stopping log copying thread.
.160204 00:36:20 >> log scanned up to (1095197210)

160204 00:36:20 Executing UNLOCK TABLES
160204 00:36:20 All tables unlocked
160204 00:36:20 Backup created in directory '/data/dbbak//2016-02-04_00-35-36'
MySQL binlog position: filename 'mysql-bin.000011', position '1338619'
160204 00:36:20 [00] Writing backup-my.cnf
160204 00:36:20 [00] ...done
160204 00:36:20 [00] Writing xtrabackup_info
160204 00:36:20 [00] ...done
xtrabackup: Transaction log of lsn (1095197210) to (1095197210) was copied.
160204 00:36:20 completed OK!说明备份成功

  1.  

查看对应生成的文件

  1. [root@MASTER_03 dbbak]# ll 2016-02-04_00-35-36/
  2. total 1048648
  3. -rw-r-----. 1 root root 387 Feb 4 00:36 backup-my.cnf
  4. -rw-r-----. 1 root root 1073741824 Feb 4 00:35 ibdata1
  5. drwx------. 2 root root 4096 Feb 4 00:36 iot
  6. drwx------. 2 root root 12288 Feb 4 00:36 iot2
  7. drwx------. 2 root root 4096 Feb 4 00:36 iot3
  8. drwx------. 2 root root 4096 Feb 4 00:36 lsn
  9. drwx------. 2 root root 4096 Feb 4 00:36 mysql
  10. drwx------. 2 root root 4096 Feb 4 00:36 performance_schema
  11. drwx------. 2 root root 4096 Feb 4 00:36 sakila
  12. drwx------. 2 root root 4096 Feb 4 00:36 sbtest
  13. drwx------. 2 root root 4096 Feb 4 00:36 test
  14. drwx------. 2 root root 4096 Feb 4 00:36 xtrabackup0219
  15. -rw-r-----. 1 root root 25 Feb 4 00:36 xtrabackup_binlog_info
  16. -rw-r-----. 1 root root 119 Feb 4 00:36 xtrabackup_checkpoints
  17. -rw-r-----. 1 root root 539 Feb 4 00:36 xtrabackup_info
  18. -rw-r-----. 1 root root 2560 Feb 4 00:36 xtrabackup_logfile

需要注意的几个文件

  1. [root@MASTER_03 dbbak]# cat 2016-02-04_00-35-36/xtrabackup_checkpoints
  2. backup_type = full-backuped ###全备
  3. from_lsn = 0
  4. to_lsn = 1095197210
  5. last_lsn = 1095197210 #####LSN号
  6. compact = 0
  7. recover_binlog_info = 0
  8. [root@MASTER_03 dbbak]# cat 2016-02-04_00-35-36/xtrabackup_binlog_info
  9. mysql-bin.000011 1338619

删掉某个数据库,进行全库恢复

  1. mysql> drop database iot2;
  2. Query OK, 49 rows affected (7.93 sec)

关闭数据库

  1. [root@MASTER_03 dbbak]# /etc/init.d/mysqld stop
  2. Shutting down MySQL.......... SUCCESS!
  3. [root@MASTER_03 dbbak]# mv /data/3306/data /data/3306/data_bak
    [root@MASTER_03 dbbak]# mkdir /data/3306/data

恢复

  1. [root@MASTER_03 dbbak]# innobackupex --apply-log /data/dbbak/2016-02-04_00-35-36/
  2. 160204 00:56:47 innobackupex: Starting the apply-log operation
  3.  
  4. IMPORTANT: Please check that the apply-log run completes successfully.
  5. At the end of a successful apply-log run innobackupex
  6. prints "completed OK!".
  7.  
  8. innobackupex version 2.3.3 based on MySQL server 5.6.24 Linux (x86_64) (revision id: 525ca7d)
  9. xtrabackup: cd to /data/dbbak/2016-02-04_00-35-36/
  10. xtrabackup: This target seems to be not prepared yet.
  11. xtrabackup: xtrabackup_logfile detected: size=2097152, start_lsn=(1095197210)
  12. xtrabackup: using the following InnoDB configuration for recovery:
  13. xtrabackup: innodb_data_home_dir = ./
  14. xtrabackup: innodb_data_file_path = ibdata1:1G:autoextend
  15. xtrabackup: innodb_log_group_home_dir = ./
  16. xtrabackup: innodb_log_files_in_group = 1
  17. xtrabackup: innodb_log_file_size = 2097152
  18. xtrabackup: using the following InnoDB configuration for recovery:
  19. xtrabackup: innodb_data_home_dir = ./
  20. xtrabackup: innodb_data_file_path = ibdata1:1G:autoextend
  21. xtrabackup: innodb_log_group_home_dir = ./
  22. xtrabackup: innodb_log_files_in_group = 1
  23. xtrabackup: innodb_log_file_size = 2097152
  24. xtrabackup: Starting InnoDB instance for recovery.
  25. xtrabackup: Using 104857600 bytes for buffer pool (set by --use-memory parameter)
  26. InnoDB: Using atomics to ref count buffer pool pages
  27. InnoDB: The InnoDB memory heap is disabled
  28. InnoDB: Mutexes and rw_locks use GCC atomic builtins
  29. InnoDB: Memory barrier is not used
  30. InnoDB: Compressed tables use zlib 1.2.3
  31. InnoDB: Using CPU crc32 instructions
  32. InnoDB: Initializing buffer pool, size = 100.0M
  33. InnoDB: Completed initialization of buffer pool
  34. InnoDB: Highest supported file format is Barracuda.
  35. InnoDB: The log sequence numbers 532847032 and 532847032 in ibdata files do not match the log sequence number 1095197210 in the ib_logfiles!
  36. InnoDB: Database was not shutdown normally!
  37. InnoDB: Starting crash recovery.
  38. InnoDB: Reading tablespace information from the .ibd files...
  39. InnoDB: Restoring possible half-written data pages
  40. InnoDB: from the doublewrite buffer...
  41. InnoDB: 128 rollback segment(s) are active.
  42. InnoDB: Waiting for purge to start
  43. InnoDB: 5.6.24 started; log sequence number 1095197210
  44. xtrabackup: Last MySQL binlog file position 1337268, file name mysql-bin.000011
  45.  
  46. xtrabackup: starting shutdown with innodb_fast_shutdown = 1
  47. InnoDB: FTS optimize thread exiting.
  48. InnoDB: Starting shutdown...
  49. InnoDB: Shutdown completed; log sequence number 1095198530
  50. xtrabackup: using the following InnoDB configuration for recovery:
  51. xtrabackup: innodb_data_home_dir = ./
  52. xtrabackup: innodb_data_file_path = ibdata1:1G:autoextend
  53. xtrabackup: innodb_log_group_home_dir = ./
  54. xtrabackup: innodb_log_files_in_group = 3
  55. xtrabackup: innodb_log_file_size = 1073741824
  56. InnoDB: Using atomics to ref count buffer pool pages
  57. InnoDB: The InnoDB memory heap is disabled
  58. InnoDB: Mutexes and rw_locks use GCC atomic builtins
  59. InnoDB: Memory barrier is not used
  60. InnoDB: Compressed tables use zlib 1.2.3
  61. InnoDB: Using CPU crc32 instructions
  62. InnoDB: Initializing buffer pool, size = 100.0M
  63. InnoDB: Completed initialization of buffer pool
  64. InnoDB: Setting log file ./ib_logfile101 size to 1024 MB
  65. InnoDB: Progress in MB: 100 200 300 400 500 600 700 800 900 1000
  66. InnoDB: Setting log file ./ib_logfile1 size to 1024 MB
  67. InnoDB: Progress in MB: 100 200 300 400 500 600 700 800 900 1000
  68. InnoDB: Setting log file ./ib_logfile2 size to 1024 MB
  69. InnoDB: Progress in MB: 100 200 300 400 500 600 700 800 900 1000
  70. InnoDB: Renaming log file ./ib_logfile101 to ./ib_logfile0
  71. InnoDB: New log files created, LSN=1095198530
  72. InnoDB: Highest supported file format is Barracuda.
  73. InnoDB: 128 rollback segment(s) are active.
  74. InnoDB: Waiting for purge to start
  75. InnoDB: 5.6.24 started; log sequence number 1095198732
  76. xtrabackup: starting shutdown with innodb_fast_shutdown = 1
  77. InnoDB: FTS optimize thread exiting.
  78. InnoDB: Starting shutdown...
  79. InnoDB: Shutdown completed; log sequence number 1095202631
  80. 160204 00:57:31 completed OK!

以上对应的目录就是innobackupex全备份自己创建的目录

  1. [root@MASTER_03 dbbak]# innobackupex --defaults-file=/etc/my.cnf --copy-back --rsync /data/dbbak/2016-02-04_00-35-36/

160204 01:08:39 [01] ...done
160204 01:08:39 [01] Copying ./iot2/t_hash1#P#p3.ibd to /data/3306/data/iot2/t_hash1#P#p3.ibd
160204 01:08:39 [01] ...done
160204 01:08:39 [01] Copying ./iot2/db.opt to /data/3306/data/iot2/db.opt
160204 01:08:39 [01] ...done
160204 01:08:39 [01] Copying ./xtrabackup0219/db.opt to /data/3306/data/xtrabackup0219/db.opt
160204 01:08:39 [01] ...done
160204 01:08:39 completed OK!

更改权限

[root@MASTER_03 tmp]# chown -R mysql.mysql /data/3306/data/

启动mysqld

[root@MASTER_03 tmp]# /etc/init.d/mysqld start

  1. [root@MASTER_03 tmp]# mysql -uroot -p
  2. Enter password:
  3. Welcome to the MySQL monitor. Commands end with ; or \g.
  4. Your MySQL connection id is 1
  5. Server version: 5.6.28-log MySQL Community Server (GPL)
  6.  
  7. Copyright (c) 2000, 2015, Oracle and/or its affiliates. All rights reserved.
  8.  
  9. Oracle is a registered trademark of Oracle Corporation and/or its
  10. affiliates. Other names may be trademarks of their respective
  11. owners.
  12.  
  13. Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
  14.  
  15. mysql> show databases;
  16. +--------------------+
  17. | Database |
  18. +--------------------+
  19. | information_schema |
  20. | iot |
  21. | iot2 | ###被删除的库
  22. | iot3 |
  23. | lsn |
  24. | mysql |
  25. | performance_schema |
  26. | sakila |
  27. | sbtest |
  28. | test |
  29. | xtrabackup0219 |
  30. +--------------------+
  31. 11 rows in set (0.00 sec)

发现数据是已经成功恢复

先全备

  1. mysql> use xtrabackup0219;
  2. mysql> create table t1(id int(5) primary key auto_increment,name varchar(20));
  1. innobackupex --defaults-file=/etc/my.cnf --user=dbbak --password=bk2016 --socket=/data/3306/tmp/mysql.sock /data/dbbak/

增量备份

  1. #####往表里插入数据

mysql> insert into t1 select 1,'love sql';
Query OK, 1 row affected (0.01 sec)
Records: 1 Duplicates: 0 Warnings: 0

mysql> insert into t1 select 2,'love sql';
Query OK, 1 row affected (0.00 sec)
Records: 1 Duplicates: 0 Warnings: 0

mysql> insert into t1 select 3,'love sql';
Query OK, 1 row affected (0.01 sec)
Records: 1 Duplicates: 0 Warnings: 0

mysql> select * from t1;
+----+----------+
| id | name |
+----+----------+
| 1 | love sql |
| 2 | love sql |
| 3 | love sql |
+----+----------+
3 rows in set (0.00 sec)

[root@MASTER_03 dbbak]# innobackupex --defaults-file=/etc/my.cnf --user=dbbak --password=bk2016 --socket=/data/3306/tmp/mysql.sock --incremental /data/dbbak/ --incremental-basedir=/data/dbbak/2016-02-04_01-44-24/ --parallel=2

[root@MASTER_03 dbbak]# du -sh *
1.5G 2016-02-04_01-44-24
6.0M 2016-02-04_01-46-48

[root@MASTER_03 dbbak]# cat 2016-02-04_01-46-48/xtrabackup_checkpoints 
backup_type = incremental   ###说明是增量的
from_lsn = 1095215215
to_lsn = 1095217565
last_lsn = 1095217565
compact = 0
recover_binlog_info = 0

此时再插入数据

mysql> insert into t1 select 4,'mysql dba';
Query OK, 1 row affected (0.01 sec)
Records: 1 Duplicates: 0 Warnings: 0

增量备份2

[root@MASTER_03 dbbak]# innobackupex --defaults-file=/etc/my.cnf --user=dbbak --password=bk2016 --socket=/data/3306/tmp/mysql.sock --incremental /data/dbbak/ --incremental-basedir=/data/dbbak/2016-02-04_01-46-48/ --parallel=2

[root@MASTER_03 dbbak]# du -sh *
1.5G 2016-02-04_01-44-24
6.0M 2016-02-04_01-46-48
5.9M 2016-02-04_01-49-21

增量备份的恢复

增量备份的恢复需要有3个步骤

1 恢复完全备份

2 恢复增量备份到完全备份(开始恢复的增量备份要添加--redo-only参数,到最后一次增量备份要去掉--redo-only)

3 对整体的完全备份进行恢复,回滚未提交的数据

  1. [root@MASTER_03 dbbak]# innobackupex --apply-log --redo-only /data/dbbak/2016-02-04_01-44-24/

xtrabackup: starting shutdown with innodb_fast_shutdown = 1
InnoDB: Starting shutdown...
InnoDB: Shutdown completed; log sequence number 1095209828
160204 01:27:09 completed OK!

将增量1应用到完全备份

[root@MASTER_03 dbbak]# innobackupex --apply-log --redo-only /data/dbbak/2016-02-04_01-44-24/ --incremental-dir=/data/dbbak/2016-02-04_01-46-48/

[root@MASTER_03 dbbak]# innobackupex --apply-log /data/dbbak/2016-02-04_01-44-24/ --incremental-dir=/data/dbbak/2016-02-04_01-49-21/

把所有合在一起的完全备份整体进行一次apply操作,回滚未提交的数据

[root@MASTER_03 dbbak]# innobackupex --apply-log /data/dbbak/2016-02-04_01-44-24/

模拟测试

  1. mysql> drop table t1;
  2. Query OK, 0 rows affected (0.05 sec)
  3.  
  4. [root@MASTER_03 dbbak]# rm -rf /data/3306/data/
    [root@MASTER_03 dbbak]# mkdir /data/3306/data
    [root@MASTER_03 dbbak]# innobackupex --defaults-file=/etc/my.cnf --copy-back --rsync /data/dbbak/2016-02-04_01-44-24/
    [root@MASTER_03 dbbak]# chown -R mysql.mysql /data/3306/data/
    登录查看

mysql> select * from t1;
+----+-----------+
| id | name |
+----+-----------+
| 1 | love sql |
| 2 | love sql |
| 3 | love sql |
| 4 | mysql dba |
+----+-----------+
4 rows in set (0.05 sec)

发现数据是已经正确

0726xtrbackup实例详解的更多相关文章

  1. linux基础-磁盘阵列(RAID)实例详解

    磁盘阵列(RAID)实例详解 raid技术分类 软raid技术 硬raid技术 Raid和lvm的区别 为什么选择用raid RAID详解 RAID-0 RAID-1 RAID-5 Raid-10 R ...

  2. Cocos2d-x 3.X手游开发实例详解

    Cocos2d-x 3.X手游开发实例详解(最新最简Cocos2d-x手机游戏开发学习方法,以热门游戏2048.卡牌为例,完整再现手游的开发过程,实例丰富,代码完备,Cocos2d-x作者之一林顺和泰 ...

  3. JavaScript学习笔记-实例详解-类(二)

    实例详解-类(二)   //===给Object.prototype添加只读\不可枚举\不可配置的属性objectId(function(){ Object.defineProperty(Object ...

  4. JavaScript学习笔记-实例详解-类(一)

    实例详解-类(一): //每个javascript函数(除了bind())都自动拥有一个prototype对象// 在未添加属性或重写prototype对象之前,它只包含唯一一个不可枚举属性const ...

  5. Entity Framework实例详解

    Entity Framework Code First的默认行为是使用一系列约定将POCO类映射到表.然而,有时候,不能也不想遵循这些约定,那就需要重写它们.重写默认约定有两种方式:Data Anno ...

  6. 免费的HTML5连载来了《HTML5网页开发实例详解》连载(二)

    最近新浪.百度.腾讯.京东.大众点评.淘宝等流行的网站都加大了招聘HTML5的力度,HTML5开发人员成了抢手货,本次连载的是由大众点评前端工程师和一淘网前端工程师基情奉献的<HTML5网页开发 ...

  7. Linux下rz命令使用的实例详解

    Linux中rz命令和sz命令都可用于文件传输,而rz命令主要用于文件的上传,下面将通过几个实例来给大家详细介绍下Linux下rz命令的用法,一起来学习下吧. rz命令可以批量上传文件,当然也可上传单 ...

  8. 实例详解 DB2 排序监控和调优

    实例详解 DB2 排序监控和调优http://automationqa.com/forum.php?mod=viewthread&tid=2882&fromuid=2

  9. 转:【工欲善其事必先利其器】—Entity Framework实例详解

    开始本篇文章之前,先说一下Entity Framework 6 Alpha1在NuGet中已可用,原文链接http://blogs.msdn.com/b/adonet/archive/2012/10/ ...

随机推荐

  1. 使用ALSA编写自己的音频程序【转】

    本文转载自:http://blog.csdn.net/beyondioi/article/details/6994548 Alsa是Linux高级音频接口.面对众多的音频设备,Alsa为Linux音频 ...

  2. Java之POI读取Excel的Package should contain a content type part [M1.13]] with root cause异常问题解决

    Java之POI读取Excel的Package should contain a content type part [M1.13]] with root cause异常问题解决 引言: 在Java中 ...

  3. ledisDB底层实现——本质上就是用leveldb这样的底层存储,和ssdb一样,meta里存的是hash、list等的元数据

    Hash hash可以算是一种两级kv,首先通过key找到一个hash对象,然后再通过field找到或者设置相应的值. 在ledisdb里面,我们需要将key跟field关联成一个key,用来存放或者 ...

  4. Codeforces--630N--Forecast(方程求解)

    N - Forecast Crawling in process... Crawling failed Time Limit:500MS     Memory Limit:65536KB     64 ...

  5. Java-java-com-util-common-service:TreeService.java

    ylbtech-Java-java-com-util-common-service:TreeService.java 1.返回顶部 1. package com.shineyoo.manager.ut ...

  6. Candies(差分约束系统)

    http://poj.org/problem?id=3159 思路:用O(V+ElogV)的Dijkstra算法求1到n的最短路.即用优先队列优化Dijkstra算法. #include <st ...

  7. xml之基本操作

    XML:Extensible Markup Language(可扩展标记语言)的缩写,是用来定义其它语言的一种元语言,其前身是SGML(Standard Generalized Markup Lang ...

  8. PHP序列化 反序列化

    序列化是将变量转换为可保存或传输的字符串的过程:反序列化就是在适当的时候把这个字符串再转化成原来的变量使用.这两个过程结合起来,可以轻松地存储和传输数据,使程序更具维护性. 1. serialize和 ...

  9. .net中实现aspnetpager分页

    第一步首先导入aspnetpager控件,然后再把他从工具箱中拖出,代码如下:  <webdiyer:AspNetPager ID="aspnetpager1" runat= ...

  10. layui 时间前后节点验证

    var start = { istime: true, format: 'YYYY-MM-DD hh:mm:ss', max: '2099-06-16', istoday: true, choose: ...