MySQL的热备(物理备份)可以采取全备加增量备份的方式来减轻数据库I/O压力及系统资源的占用。增量备份主要是以全备或增量备份为基础,备份那些变更过的页面。其备份的原理是基于一个不断增长的LSN序列,这个LSN与Oracle的SCN类似。在恢复期间,我们需要将已提交的事务前滚,未提交的事务回滚。本文主要描述了增量备份及增量恢复。

1、增备的相关知识点

As not all information changes between each backup, the incremental backup strategy uses this to reduce the storage needs and the duration of making a backup. This can be done because each InnoDB page has a log sequence number, LSN, which acts as a version number of the entire database. Every time the database is modified, this number gets incremented. An incremental backup copies all pages since a specific LSN. Once the pages have been put together in their respective order, applying the logs will recreate the process that affected the database, yielding the data at the moment of the most recently created backup.

增备是备份上次以来发生变化的页面,通过增备可以减轻存储以及系统资源开销。增量备份主要针对于InnoDB,因为InnoDB采用了日志序列号(LSN)的方式。InnoDB的LSN是一个增长的序列,类似于Oracle的SCN,记录了InnoDB的变化情况。增量备份则是备份特定的LSN之后变化的情况。通过按序重组这些LSN即可将数据库恢复到故障点或任意时刻。

innobackupex --incremental /data/backups --incremental-lsn=1291135

innobackupex --incremental /data/backups --incremental-lsn=1358967

如上,我们可以使用--incremental-lsn选项来实施增量备份

Warning: This procedure only affects XtraDB or InnoDB-based tables. Other tables with a different storage engine, e.g. MyISAM, will be copied entirely each time an incremental backup is performed.

对于非XtraDB或者InnoDB存储引擎,热备方式依旧会全部备份所有的数据文件,索引文件,格式文件等。

Preparing an Incremental Backup with innobackupex Preparing incremental backups is a bit different than full ones. This is, perhaps, the stage where more attention is needed:

• First, only the committed transactions must be replayed on each backup. This will merge the base full backup with the incremental ones.

• Then, the uncommitted transaction must be rolled back in order to have a ready-to-use backup.

对于增量备份的Prepare阶段,有2个需要注意的地方,一个是提交的事务需要replayed,一个未提交的事务需要rollback。

If you replay the committed transactions and rollback the uncommitted ones on the base backup, you will not be able to add the incremental ones. If you do this on an incremental one, you won’t be able to add data from that moment and the remaining increments. Having this in mind, the procedure is very straight-forward using the --redo-only option, starting with the base backup:

如果在Prepare阶段replay了已提交的事务以及回滚了未提交的事务,则后续的增量备份无法添加到当前全备。因此在Prepare阶段全备应使用--redo-only选项。

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

对于存在多次增量的情形,仅仅只有最后一个增量不需要使用--redo-only 选项。如果使用了的话,rollback将由服务器启动的时候来完成。

二、 演示

1. 准备实验环境

mysql> select version();

+------------+

| version()  |

+------------+

| 5.6.25-log |

+------------+

1 row in set (0.00 sec)

mysql> create database inc_rec;

Query OK, 1 row affected (0.00 sec)

mysql> use inc_rec;

Database changed

mysql> create table andy (id int);

Query OK, 0 rows affected (0.08 sec)

mysql> insert into andy values(1),(2);

Query OK, 2 rows affected (0.00 sec)

Records: 2  Duplicates: 0  Warnings: 0

2. 全备

[root@mysql02 full]# innobackupex --defaults-file=/etc/my.cnf --user=root --password=oracle --port=3606 /xtrabackup/full/

xtrabackup: Transaction log of lsn (1648193) to (1648193) was copied.

170609 03:53:56 completed OK!

3. 查看全备生成文件

[root@mysql02 full]# ll /xtrabackup/full/

total 4

drwxr-x---. 6 root root 4096 Jun  9 03:53 2017-06-09_03-53-51

4. 模拟业务新数据

mysql> insert into andy values(3),(4);

Query OK, 2 rows affected (0.14 sec)

Records: 2  Duplicates: 0  Warnings: 0

mysql> commit;

Query OK, 0 rows affected (0.00 sec)

5. 增量备份

-- 创建存放增量备份目录并赋权

[root@mysql02 full]# mkdir -p /xtrabackup/increament/

[root@mysql02 full]# chown -R mysql:mysql /xtrabackup/increament/

[root@mysql02 full]# ll /xtrabackup/

total 8

drwxr-xr-x. 3 mysql mysql 4096 Jun  9 03:53 full

drwxr-xr-x. 2 mysql mysql 4096 Jun  9 04:00 increament

-- 正式开始增量备份

[root@mysql02 full]# innobackupex --defaults-file=/etc/my.cnf --user=root --password=oracle  --incremental  \

--incremental-basedir=/xtrabackup/full/2017-06-09_03-53-51/ /xtrabackup/increament/

########################################下面是增量备份输出

170609 04:02:21 Backup created in directory '/xtrabackup/increament/2017-06-09_04-02-16/'

MySQL binlog position: filename 'binlog.000003', position '894'

。。。省略

xtrabackup: Transaction log of lsn (1652210) to (1652210) was copied.

170609 04:02:22 completed OK!

补充:

[root@mysql02 2017-06-09_04-02-16]# pwd

/xtrabackup/increament/2017-06-09_04-02-16

-- 查看增备产生的相关文件

[root@mysql02 2017-06-09_04-02-16]# ll

total 8580

-rw-r-----. 1 root root     418 Jun  9 04:02 backup-my.cnf

-rw-r-----. 1 root root  360448 Jun  9 04:02 ibdata1.delta

-rw-r-----. 1 root root      44 Jun  9 04:02 ibdata1.meta

drwxr-x---. 2 root root    4096 Jun  9 04:02 inc_rec

drwxr-x---. 2 root root    4096 Jun  9 04:02 mysql

drwxr-x---. 2 root root    4096 Jun  9 04:02 performance_schema

drwxr-x---. 2 root root    4096 Jun  9 04:02 test

-rw-r-----. 1 root root      18 Jun  9 04:02 xtrabackup_binlog_info

-rw-r-----. 1 root root     117 Jun  9 04:02 xtrabackup_checkpoints

-rw-r-----. 1 root root     584 Jun  9 04:02 xtrabackup_info

-rw-r-----. 1 root root 8388608 Jun  9 04:24 xtrabackup_logfile

-- 文件 xtrabackup_info 含有备份类型

[root@mysql02 2017-06-09_04-02-16]# more xtrabackup_info|grep ^incremental

incremental = Y

-- 文件xtrabackup_checkpoints包含了备份的相关检查点信息

[root@mysql02 2017-06-09_04-02-16]# more xtrabackup_checkpoints

backup_type = incremental

from_lsn = 1648193

to_lsn = 1652210

last_lsn = 1652210

compact = 0

recover_binlog_info = 0

-- 文件xtrabackup_binlog_info包含了binlog的位置

[root@mysql02 2017-06-09_04-02-16]# more xtrabackup_binlog_info

binlog.000003 894

6. 误操作,truncate表

mysql> truncate table andy;

Query OK, 0 rows affected (0.22 sec)

mysql> select * from andy;

Empty set (0.01 sec)

7. 停止mysql数据库

[root@mysql02 ~]# service mysql stop

[root@mysql02 ~]# ps -ef|grep mysql

8.恢复数据库  (先恢复全备,再按增量备份时间先后顺序,依次恢复增量备份)

8.1 先恢复完整的备份集:

[root@mysql02 full]#  innobackupex --defaults-file=/etc/my.cnf --user=root --apply-log --redo-only /xtrabackup/full/2017-06-09_03-53-51/

170609 04:19:30 completed OK!

8.2 在恢复增量备份集:   (如果有多份增量备份,最好最后一份增量不用 --redo-only , 其他的都用 --redo-only)

[root@mysql02 full]# innobackupex --defaults-file=/etc/my.cnf --user=root --apply-log  /xtrabackup/full/2017-06-09_03-53-51  --incremental-dir=/xtrabackup/increament/2017-06-09_04-02-16/

170609 04:24:45 completed OK!  #结果出现completed OK表示完全成功

说明: /xtrabackup/full/2017-06-09_03-53-51 为全备基目录 , incremental-dir 为增量备份目录

9.将原有文件夹重命名到新位置,并创建原文件夹

[root@mysql02 full]# mv /data/mysql /data/mysqlbak

[root@mysql02 full]# mkdir -p /data/mysql

10.执行拷贝恢复的文件到原来的数据位置

[root@mysql02 full]# innobackupex --defaults-file=/etc/my.cnf --user=root --copy-back  /xtrabackup/full/2017-06-09_03-53-51/

170609 04:33:06 completed OK! #结果出现completed OK表示完全成功

说明: /xtrabackup/full/2017-06-09_03-53-51/ 为全备基目录

11. 权限修改

[root@mysql02 ~]# mkdir -p /data/mysql/binarylog (说明:这里我binlog在datadir在路径下,所以要单独为binlog创建目录)

chown -R mysql:mysql /data/mysql

12. 启动被恢复的实例

[root@mysql02 mysql]# mysqld_safe --defaults-file=/etc/my.cnf &

[root@mysql02 ~]# mysql -uroot -poracle

mysql> use inc_rec;

mysql> select * from andy;

+------+

| id   |

+------+

|    1 |

|    2 |

|    3 |     > 恢复成功!

|    4 |

+------+

总结:

a、增量备份是基于增量或全备的基础之上完成的。

b、增量备份的基础是InnoDB引擎使用了LSN机制,非InnoDB引擎不存在增量备份的说法,每次都是全备。

c、对于增量备份的恢复期间需要对已提交的事务前滚,未提交的事务回滚。

d、增量备份的恢复应按照备份的顺利逐个逐个replay,需要使用--apply-log --redo-only选项。

e、仅仅最后一个增量备份不需要使用--redo-only选项。

f、如果要做完全恢复或时点恢复,需要结合binlog来实现。

参考:http://blog.csdn.net/leshami/article/details/42141627    感谢大师

mysql multi innobackupex,mysql之 Innobackupex(全备+增量)备份恢复相关推荐

  1. 实验——MySQL数据库增量备份恢复

    目录 一.MySQL数据库增量备份恢复 1.1 物理冷备份,开启服务 1.2 开启二进制日志文件 1.3 创建库和表,进行完全备份和增量备份 1.4 进行正常操作和误操作,进行增量备份 1.5 查看增 ...

  2. MySQL-日志、完全备份恢复和增量备份恢复

    MySQL-日志.完全备份恢复和增量备份恢复 一.MySQL日志管理 1.MySQL日志文件 错误日志 二进制日志 中继日志 慢查询日志 二.查看日志状态命令 三.备份的重要性 1.造成数据丢失的原因 ...

  3. Linux系统快照一键备份恢复、不同机器恢复、增量备份恢复

    Linux系统快照一键备份恢复.不同机器恢复.增量备份恢复 前言 由于前段时间在做一个自动化部署开发环境的项目需要重复安装多种服务以及中间件,但是生产环境的服务器不像自己的虚拟机可以使用快照,如果直接 ...

  4. 【备份恢复】noarchive模式下使用增量备份恢复数据库

    使用增量备份恢复处于NOARCHIVELOG 模式的数据库 增量备份前提是有0即全库备份,另外默认的增量备份是指增量差异备份(backup as backupset incremental level ...

  5. RMAN增量备份恢复

    通过rman的增量备份恢复dataguard中standby端的数据: 1.停止备库上的MRP进程: SQL> ALTER DATABASE RECOVER MANAGED STANDBY DA ...

  6. xtrabackup全量、增量备份恢复mysql数据库

    一. 全量备份恢复: 查看原表内容: MariaDB [(none)]> select * from testdb.students; +----+------------+------+--- ...

  7. 【转】mysql增量备份恢复实战企业案例

    来源地址:http://seanlook.com/2014/12/05/mysql_incremental_backup_example/ 小量的数据库可以每天进行完整备份,因为这也用不了多少时间,但 ...

  8. MySQL 备份与恢复(完全备份恢复--增量备份恢复+案例演示)

    文章目录 一.MySQL 完全备份 1.1.数据库备份方式精讲 1.1.1.数据库备份的重要性 1.1.2.数据库备份的分类 1.1.3.MySQL 完全备份概念解读 1.2.物理冷备份与恢复 1.3 ...

  9. Mysqlbackup 8全备增量备份还原案例

    Mysqlbackup 8增量备份还原图解 声明 本文的数据来自网络,部分代码也有所参照,这里做了注释和延伸,旨在技术交流,如有冒犯之处请联系博主及时处理. 注:1 当前验证环境CentOS 8 X8 ...

  10. Oracle全备增量备份脚本,oracle数据全备份与增量备份脚本

    1.脚本名称是rman_bk_0.sh 此脚本是数据库全备脚本 设定一周执行一次 set ORACLE_BASE=/oracle (设定 oracle的 安装基目录) set ORACLE_HOME= ...

最新文章

  1. Linux中源码包的管理
  2. centos搭建kvm
  3. 举例浅介grep、sed、awk
  4. 020.2.2 runtime类
  5. mac系统快捷键大全详细介绍
  6. 如何将iPhone或iPad更新到iOS 11
  7. 莫比乌斯反演 做题记录
  8. html前进2格2em,HTML2
  9. python计算机入门_Python零基础入门(1)-------计算机基础
  10. 读写文本文件时汉字乱码
  11. 全网独家:LINUX登录桌面后,如何自动运行自己的应用程序
  12. PHP连接mysql数据库报错:Call to undefined function mysql_connect()
  13. matlab图形用户界面设计实验报告,实验六 MATLAB图形用户界面设计
  14. C语言中EOF什么意思
  15. matlab fft 作图,Matlab绘图示例
  16. Excel - 自动填充
  17. 强烈建议你把这5个跨境神器都收藏了
  18. Java中日志的使用
  19. 勒索病毒的介绍及防范
  20. Java的一些基本概念和它们之间的关系

热门文章

  1. python设置横坐标间隔_如何在matplotlib中更改刻度之间的间距?
  2. Maven中几张重要的总结图
  3. 世界范围内糖化血红蛋白报告的3种建议形式
  4. android优雅的一个侧滑
  5. 请求到后台百分号被删除原因_接口测试平台代码实现85: 全局请求头1
  6. tar在linux编译为exe,将Linux代码移植到Windows的简单方法 1
  7. oracle不连续得时间如何分组,Oracle按不同时间分组统计的sql
  8. echart关系树状图_Echarts关系图-力引导布局
  9. 安全漏洞——如何查找和修复它们
  10. odoo10参考系列--ORM API 一(记录集、环境、通用方法和创建模型)