xtarbackup 简单恢复
xtrbackup
- 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
物理备份(Xtrabackup)
备份方式(是物理备份可以理解为拷贝数据文件,深层理解是备份数据页)
- 对于非innodb表(比如myisam)是直接锁表cp数据文件,属于一种温备。
- 对于innodb的表(支持事务),不锁表,cp数据页最终以数据文件方式保存下来,并且把redo和undo一并备走,属于热备方式。
- 备份时读取配置文件/etc/my.cnf
全量备份
#全备
[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
全备恢复过程模拟
备份
innobackupex --user=root --password=123 --no-timestamp /backup/full
恢复备份
前提1:被恢复的目录是空的
前提2:被恢复的数据库的实例是关闭的
准备备份
将redo进行重做,已提交的写到数据文件,未提交的使用undo回滚,模拟CSR的过程
[root@db01 full]# innobackupex --user=root --password=123 --apply-log /backup/full
恢复备份
[root@db01 mysql]# innobackupex --copy-back /backup/full
#授权
[root@db01 mysql]# chown -R mysql.mysql /application/mysql/data/
#启动MySQL
[root@db01 mysql]# /etc/init.d/mysqld start
增量备份及恢复
案例模拟
周日全备
[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
模拟数据变化
mysql> use world;
mysql> create table city1 select * from city;
开始周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
再次模式数据变化
mysql> use world;
mysql> create table city2 select * from city;
周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
故障模拟
把data目录全删除
[root@db01 ~]# rm -fr /application/mysql/data/*
[root@db01 data]#pkill mysqld
恢复数据
注意事项:
1 增量备份是不能直接恢复使用,必须要把所有增量合并到同一个全备中,最后进行一次恢复,会读ch文件自动的接到一起, 才能恢复增量(不像别的产品,恢复增量要依次恢复增量),
2 在合并过程中,顺便进行备份的准备,(apply-log),在准备过程中,只有最后一次合并增量redo和undo都应用,中间合并过程只应用redo,只进行前滚,不做回滚,防止lsn号接不上
第一步: 全备准备(只对redo进行应用,前滚)
- 为了to_lsn(数据号)追上last_lsn(redo号)变成相同的
[root@db01 ~]# innobackupex --apply-log --redo-only /backup/full/
第二步:第一次增量合并到全备
合并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
验证
查看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
第三步: 第二次增量备份合并到全备
合并inc2合并到full中,redo和undo都应用
[root@db01 ~]#innobackupex --apply-log --incremental-dir=/backup/inc2 /backup/full
验证 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
第四步:最后一次进行备份准备
整体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 简单恢复的更多相关文章
- SQL Server中的事务日志管理(4/9):简单恢复模式里的日志管理
当一切正常时,没有必要特别留意什么是事务日志,它是如何工作的.你只要确保每个数据库都有正确的备份.当出现问题时,事务日志的理解对于采取修正操作是重要的,尤其在需要紧急恢复数据库到指定点时.这系列文章会 ...
- SQL Server数据库的三种恢复模式:简单恢复模式、完整恢复模式和大容量日志恢复模式(转载)
SQL Server数据库有三种恢复模式:简单恢复模式.完整恢复模式和大容量日志恢复模式: 1.Simple 简单恢复模式, Simple模式的旧称叫”Checkpoint with truncate ...
- sql server 备份与恢复系列三 简单恢复模式下的备份与还原
一.概述 前面讲了备份的一些理论知识,这篇开始讲在简单恢复模式下的备份与还原.在简单模式下是不能做日志备份的,发生灾难后,数据库最后一次备份之后做的数据修改将是全部丢失的,所以在生产环境下,数据又很重 ...
- SQL Server数据库有三种恢复模式:简单恢复模式、完整恢复模式和大容量日志恢复模式
SQL Server数据库有三种恢复模式:简单恢复模式.完整恢复模式和大容量日志恢复模式: 1.Simple 简单恢复模式, Simple模式的旧称叫”Checkpoint with truncate ...
- 浅谈SQL Server中的事务日志(三)----在简单恢复模式下日志的角色
简介 在简单恢复模式下,日志文件的作用仅仅是保证了SQL Server事务的ACID属性.并不承担具体的恢复数据的角色.正如”简单”这个词的字面意思一样,数据的备份和恢复仅仅是依赖于手动备份和恢复.在 ...
- svn上误删除覆盖的文件简单恢复步骤
因为失误,不小心把同事提交到svn的文件给覆盖删除了.早上来和我说,吓死宝宝了... 还好,svn是个好东西,恢复到某个版本就行了.下面是简单步骤: 1.在本地的svn项目文件,右键---Toitoi ...
- UEFI引导的简单恢复方法
装系统,尤其是双系统,总是无法绕过引导的坑. linux的grub是非常复杂的引导系统,学习它非常累.而windows又不能引导linux.你可能会想,怎么就没有一种简单的引导方式,就好像引导光盘,引 ...
- 故障恢复和恢复模式(Crash Recovery & Recovery Models)
数据库的恢复模型是否影响故障恢复,在简单恢复模式里,你是否会丢失事务?在今天的文章里我想谈下这点,详细讨论下. 恢复模式(Recovery Models) 对于这个问题的最简单的答案是不会:恢复模型不 ...
- 利用bak文件恢复数据库问题小结
对备份的基础理解: --完整备份:完整备份会备份所有数据的区和少量的日志(日志文件用于恢复数据保持数据一致性).由于差异备份需要依据最后一次完整备份,因此完整备份会清楚一些分配位图数据. --差异备份 ...
随机推荐
- matlab学习笔记10_5 通用字符串操作和比较函数
一起来学matlab-matlab学习笔记10 10_5 通用字符串操作和比较函数 觉得有用的话,欢迎一起讨论相互学习~Follow Me 参考书籍 <matlab 程序设计与综合应用>张 ...
- 关于/r与/n 以及 /r/n 的区别总结
应该说还是区别的,\r就是回到行首,\n就是到下一行的,但是一般我们输出程序时,看不到明显的差别的 '\r'是回车,'\n'是换行,前者使光标到行首,后者使光标下移一格.通常用的Enter是两个加起来 ...
- git用法汇总
使用了一年多的git命令了,昨晚竟然又出现了问题.虽然解决了,不过还是被罚了... 总结下自己常用的git命令和遇到的一些坑. 1)常用的命令 1. 从git远程分支clone代码: git clon ...
- 简易商城 [ html + css ] 练习
1. 前言 通过使用 HTML + CSS 编写一个简易商城首页. 如图: 2. 布局思路 通过页面分析,大致可以决定页面的布局分为 5 大板块. 接下来,可以先定义页面的布局: <!DOCTY ...
- js scheme 打开手机app的方法
1.iframe function schemeUrl(url,callbak){ var ifr = document.createElement("iframe"); ifr. ...
- Activiti数据库表结构(23张表5.*版本)
1 Activiti数据库表结构 1.1 数据库表名说明 Activiti工作流总共包含23张数据表,所有的表名默认以“ACT_”开头. 并且表名的第二部分用两个字母表明表的用例,而这个用 ...
- SpringBoot系列教程之Redis集群环境配置
之前介绍的几篇redis的博文都是基于单机的redis基础上进行演示说明的,然而在实际的生产环境中,使用redis集群的可能性应该是大于单机版的redis的,那么集群的redis如何操作呢?它的配置和 ...
- LInux学习之路
linux 简单操作命令 cd 进入目录 ls 查看 ll详细查看 man ls -- help touch mkdir find 正则表达式 ? [] [a-z][0-9] {字符串,} {a..z ...
- python递归函数(10)
一个函数在函数体内部调用自己,这样的函数称为递归函数,递归的次数在python是有限制的,默认递归次数是997次,超过997次会报错:RecursionError. 一.递归函数案例 案例一:计算数字 ...
- Java 8 Optional 的用法
认识Optional Optionals是用于防止 NullPointerException 的漂亮工具.让我们快速了解一下Optionals的工作原理. Optional 是一个简单的容器,其值 ...