1. xtrbackup

  2. Xtrabackup安装

#下载epel源

wget -O /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-7.repo

#安装依赖

yum -y install perl perl-devel libaio libaio-devel perl-Time-HiRes perl-DBD-MySQL

#下载Xtrabackup

wget https://www.percona.com/downloads/XtraBackup/Percona-XtraBackup-2.4.4/binary/redhat/7/x86_64/percona-xtrabackup-24-2.4.4-1.el7.x86_64.rpm

  1. 物理备份(Xtrabackup)

备份方式(是物理备份可以理解为拷贝数据文件,深层理解是备份数据页)

  1. 对于非innodb表(比如myisam)是直接锁表cp数据文件,属于一种温备。
  2. 对于innodb的表(支持事务),不锁表,cp数据页最终以数据文件方式保存下来,并且把redo和undo一并备走,属于热备方式。
  3. 备份时读取配置文件/etc/my.cnf
  1. 全量备份

#全备

[root@db01 data]# innobackupex --user=root --password=123 /backup

#避免时间戳,自定义路径名

[root@db01 ~]# innobackupex --user=root --password=123 --no-timestamp /backup/full

#查看备份路径中的内容

[root@db01 backup]# ll /backup/full

#记录binlog文件名和binlog的位置点

-rw-r----- 1 root root 21 Aug 16 06:23 xtrabackup_binlog_info

#备份时刻,立即将已经commit过的内存中的数据页刷新到磁盘

#备份时刻有可能会有其他数据写入,已备走的数据文件就不会再发生变化了

#在备份过程中,备份软件会一直监控着redo和undo,一旦有变化会将日志一并备走

-rw-r----- 1 root root 117 Aug 16 06:23 xtrabackup_checkpoints

#备份汇总信息

-rw-r----- 1 root root 485 Aug 16 06:23 xtrabackup_info

#备份的redo文件

-rw-r----- 1 root root 2560 Aug 16 06:23 xtrabackup_logfile

  1. 全备恢复过程模拟

    1. 备份

innobackupex --user=root --password=123 --no-timestamp /backup/full

  1. 恢复备份

前提1:被恢复的目录是空的

前提2:被恢复的数据库的实例是关闭的

  1. 准备备份

将redo进行重做,已提交的写到数据文件,未提交的使用undo回滚,模拟CSR的过程

[root@db01 full]# innobackupex --user=root --password=123 --apply-log /backup/full

  1. 恢复备份

[root@db01 mysql]# innobackupex --copy-back /backup/full

  1. #授权

[root@db01 mysql]# chown -R mysql.mysql /application/mysql/data/

  1. #启动MySQL

[root@db01 mysql]# /etc/init.d/mysqld start

  1. 增量备份及恢复

  2. 案例模拟

    1. 周日全备

[root@db01 backup]#innobackupex --user=root --password=123 --no-timestamp /bakcup/full

所有的全备增量备份之间,都要有联系的,都能组合到一起,必须是严丝合缝的一个号不能差

[root@db01 ~]#cat /backup/full/xtrabackup_checkpoints

backup_type = full-backuped

开始

to_lsn = 649294557    #只要有数据变化这个号就会变 有了64.....个操作

last_lsn = 649294557

compact = 0

recover_binlog_info = 0

  1. 模拟数据变化

mysql> use world;

mysql> create table city1 select * from city;

  1. 开始周1的增量备份, 基于全备,(差异备份和增量备份第一次都是基于全量备份)

参数说明:

--incremental:打开增量备份开关

--incremental-basedir:基于哪次备份,进行增量备份 写上一次备份的路径就行

[root@db01 ~]#innobackupex --user=root --password=oldboy123 --no-timestamp --incremental --incremental-basedir=/backup/full /backup/inc1

[root@db01 ~]#cat /backup/full/xtrabackup_checkpoints

backup_type = full-backuped

compact = 0

recover_binlog_info = 0

[root@db01 ~]#cat /backup/inc1/xtrabackup_checkpoints

backup_type = incremental

last_lsn = 788625806

compact = 0

recover_binlog_info = 0

  1. 再次模式数据变化

mysql> use world;

mysql> create table city2 select * from city;

  1. 周2进行增量备份

[root@db01 ~]#innobackupex --user=root --password=oldboy123 --no-timestamp --incremental --incremental-basedir=/backup/inc1 /backup/inc2

[root@db01 ~]#cat /backup/full/xtrabackup_checkpoints /backup/inc1/xtrabackup_checkpoints /b

ackup/inc2//xtrabackup_checkpoints

backup_type = full-backuped

last_lsn = 788066534

compact = 0

recover_binlog_info = 0

--------------------------------------------------------------

backup_type = incremental

compact = 0

recover_binlog_info = 0

--------------------------------------------------------------

backup_type = incremental

last_lsn = 789184862

compact = 0

recover_binlog_info = 0

  1. 故障模拟

把data目录全删除

[root@db01 ~]# rm -fr /application/mysql/data/*

[root@db01 data]#pkill mysqld

  1. 恢复数据

注意事项:

1 增量备份是不能直接恢复使用,必须要把所有增量合并到同一个全备中,最后进行一次恢复,会读ch文件自动的接到一起, 才能恢复增量(不像别的产品,恢复增量要依次恢复增量),

2 在合并过程中,顺便进行备份的准备,(apply-log),在准备过程中,只有最后一次合并增量redo和undo都应用,中间合并过程只应用redo,只进行前滚,不做回滚,防止lsn号接不上

  1. 第一步: 全备准备(只对redo进行应用,前滚)

  • 为了to_lsn(数据号)追上last_lsn(redo号)变成相同的

[root@db01 ~]# innobackupex --apply-log --redo-only /backup/full/

  1. 第二步:第一次增量合并到全备

合并inc1合并到full中,并且apply-log,只应用redo,不应用undo

--incremental-dir=/backup/inc1 --incremental-dir 指定要合并的增量备份路径

[root@db01 ~]#innobackupex --user=root --password=oldboy123 --apply-log --redo-only --incremental-dir=/backup/inc1 /backup/full

  1. 验证

查看lsn full的last_lsn的值= inc1 last_lsn的值,证明 全量备份中已经包含了inc1了

[root@db01 ~]#cat /backup/full/xtrabackup_checkpoints

backup_type = log-applied

from_lsn = 0

to_lsn = 788625806

last_lsn = 788625806

compact = 0

recover_binlog_info = 0

[root@db01 ~]#cat /backup/inc1/xtrabackup_checkpoints

backup_type = incremental

from_lsn = 788066534

to_lsn = 788625806

last_lsn = 788625806

compact = 0

recover_binlog_info = 0

  1. 第三步: 第二次增量备份合并到全备

合并inc2合并到full中,redo和undo都应用

[root@db01 ~]#innobackupex --apply-log --incremental-dir=/backup/inc2 /backup/full

  1. 验证 inc2 和full

inc2 的laset_lsn号和full的号相同,证明合并成功,

[root@db01 ~]#cat /backup/inc2/xtrabackup_checkpoints /backup/full/xtrabackup_checkpoints

backup_type = incremental

from_lsn = 788625806

to_lsn = 789184862

last_lsn = 789184862

compact = 0

recover_binlog_info = 0

backup_type = full-prepared

from_lsn = 0

to_lsn = 789184862

last_lsn = 789184862

compact = 0

recover_binlog_info = 0

  1. 第四步:最后一次进行备份准备

整体full执行apply-log,redo和undo都应用

[root@db01 mysql]# innobackupex --apply-log /backup/full/

  • copy-back

[root@db01 ~]# innobackupex --copy-back /backup/full/

[root@db01 ~]# chown -R mysql.mysql /application/mysql/data/

[root@db01 ~]# /etc/init.d/mysqld start

xtarbackup 简单恢复的更多相关文章

  1. SQL Server中的事务日志管理(4/9):简单恢复模式里的日志管理

    当一切正常时,没有必要特别留意什么是事务日志,它是如何工作的.你只要确保每个数据库都有正确的备份.当出现问题时,事务日志的理解对于采取修正操作是重要的,尤其在需要紧急恢复数据库到指定点时.这系列文章会 ...

  2. SQL Server数据库的三种恢复模式:简单恢复模式、完整恢复模式和大容量日志恢复模式(转载)

    SQL Server数据库有三种恢复模式:简单恢复模式.完整恢复模式和大容量日志恢复模式: 1.Simple 简单恢复模式, Simple模式的旧称叫”Checkpoint with truncate ...

  3. sql server 备份与恢复系列三 简单恢复模式下的备份与还原

    一.概述 前面讲了备份的一些理论知识,这篇开始讲在简单恢复模式下的备份与还原.在简单模式下是不能做日志备份的,发生灾难后,数据库最后一次备份之后做的数据修改将是全部丢失的,所以在生产环境下,数据又很重 ...

  4. SQL Server数据库有三种恢复模式:简单恢复模式、完整恢复模式和大容量日志恢复模式

    SQL Server数据库有三种恢复模式:简单恢复模式.完整恢复模式和大容量日志恢复模式: 1.Simple 简单恢复模式, Simple模式的旧称叫”Checkpoint with truncate ...

  5. 浅谈SQL Server中的事务日志(三)----在简单恢复模式下日志的角色

    简介 在简单恢复模式下,日志文件的作用仅仅是保证了SQL Server事务的ACID属性.并不承担具体的恢复数据的角色.正如”简单”这个词的字面意思一样,数据的备份和恢复仅仅是依赖于手动备份和恢复.在 ...

  6. svn上误删除覆盖的文件简单恢复步骤

    因为失误,不小心把同事提交到svn的文件给覆盖删除了.早上来和我说,吓死宝宝了... 还好,svn是个好东西,恢复到某个版本就行了.下面是简单步骤: 1.在本地的svn项目文件,右键---Toitoi ...

  7. UEFI引导的简单恢复方法

    装系统,尤其是双系统,总是无法绕过引导的坑. linux的grub是非常复杂的引导系统,学习它非常累.而windows又不能引导linux.你可能会想,怎么就没有一种简单的引导方式,就好像引导光盘,引 ...

  8. 故障恢复和恢复模式(Crash Recovery & Recovery Models)

    数据库的恢复模型是否影响故障恢复,在简单恢复模式里,你是否会丢失事务?在今天的文章里我想谈下这点,详细讨论下. 恢复模式(Recovery Models) 对于这个问题的最简单的答案是不会:恢复模型不 ...

  9. 利用bak文件恢复数据库问题小结

    对备份的基础理解: --完整备份:完整备份会备份所有数据的区和少量的日志(日志文件用于恢复数据保持数据一致性).由于差异备份需要依据最后一次完整备份,因此完整备份会清楚一些分配位图数据. --差异备份 ...

随机推荐

  1. python脚本容器化

    https://blog.csdn.net/zstack_org/article/details/53099919 如何选择 base image: https://blog.csdn.net/nkl ...

  2. [LeetCode] 636. Exclusive Time of Functions 函数的独家时间

    Given the running logs of n functions that are executed in a nonpreemptive single threaded CPU, find ...

  3. C/c++语言开源项目总结

    值得学习的C语言开源项目 -1. Webbench Webbench是一个在linux下使用的非常简单的网站压测工具.它使用fork()模拟多个客户端同时访问我们设定的URL,测试网站在压力下工作的性 ...

  4. 使用clion+cmake+vcpkg的开发现代的c++跨平台程序

    使用clion+cmake+vcpkg的开发现代的c++跨平台程序 使用c++开发跨平台的程序 背景 在开发过程中,使用c++作为开发语言,通常被认为是痛苦的,啰嗦的,超长开发时间的.最近几年有各种各 ...

  5. MAVEN安装代码到本地库,安装jar, source, javadoc的方式

    cd /d %~dp0 mvn -Dpackaging=jar mvn -Dpackaging=jar -Dclassifier=sources mvn -Dpackaging=jar -Dclass ...

  6. 【C++面试】关于虚函数的常见问题

    1.虚函数的代价 1)带有虚函数的每个类会产生一个虚函数表,用来存储虚成员函数的指针 2)带有虚函数的每个类都会有一个指向虚函数表的指针 3)不再是内敛函数,因为内敛函数可以在编译阶段进行替代,而虚函 ...

  7. 05 Mybatis的CRUD操作和Mybatis连接池

    1.CRUD的含义 CRUD是指在做计算处理时的增加(Create).读取(Retrieve)(重新得到数据).更新(Update)和删除(Delete)几个单词的首字母简写.主要被用在描述软件系统中 ...

  8. 18 Ajax、Json以及jackson框架解析json的基本应用

    1. Ajax (1)概念:ASynchronous JavaScript And XML 异步的JavaScript 和 XML 异步和同步:客户端和服务器端相互通信的基础上 * 客户端必须等待服务 ...

  9. git学习笔记 ---管理修改

    现在,假定你已经完全掌握了暂存区的概念.下面,我们要讨论的就是,为什么Git比其他版本控制系统设计得优秀,因为Git跟踪并管理的是修改,而非文件. 你会问,什么是修改?比如你新增了一行,这就是一个修改 ...

  10. Helm命令日常使用

    更换仓库 默认的stable仓库地址是:https://kubernetes-charts.storage.googleapis.com 若遇到Unable to get an update from ...