XBK学习day11

XBK(Percona-Xtrabackup)-物理备份工具

1.1下载并安装Xtrabackup工具

安装依赖包:

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 libev

下载软件并安装
yum -y install percona-xtrabackup-24-2.4.12-1.el7.x86_64.rpm

安装一个依赖包

yum install  -y perl-Digest-*

2.2 介绍

物理备份工具,类似于cp数据

2.3 备份细节

非InnoDB:例如MyISAM,自动锁表备份,会有短暂的全局锁。
InnoDB:
1.立即进行CKPT,将当前所有已提交事务的脏页,立即刷写到磁盘上。
2.拷贝所有InnoDB的数据文件
3.将备份过程中产生的redo截取并备份走。

2.4 innobackupex 备份应用

2.4.1 配置文件设置:

[client]
socket=/tmp/mysql.sock

2.4.2 全备

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

2.4.3 搞破坏 全备恢复

[root@db01 ~]# pkill mysqld
[root@db01 ~]# \rm -rf  /data/3306/data/*

2.4.4 数据恢复准备(备份处理)

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

2.4.5 恢复数据

--copy-back (依赖于my.cnf [mysqld]的配置)
[root@db01 ~]# innobackupex --copy-back   /backup/xbk/full/ 
[root@db01 /data/3306/data]# chown -R mysql.mysql /data/*

2.4.6 --apply-log 参数说明(面试重点)

模仿了InnoDB引擎的ACSR的过程
将备份集中的数据和日志的LSN号追平。
利用redo进行前滚
利用undo进行回滚

2.4.7 备份集的认识

xtrabackup_binlog_info: 存储的是binlog截取的起始点信息(position,gtid)
[root@db01 /backup/xbk/full]# cat xtrabackup_binlog_info 
mysql-bin.000002    194 63c5b880-bfc1-11e9-beaf-000c2980e248:1-6

xtrabackup_checkpoints:
backup_type = full-prepared     备份类型
from_lsn = 0                    整个备份包含的最起始的LSN号码
to_lsn = 167153081              ckpt后数据页(ibd)的LSN
last_lsn = 167153090           备份结束时,redo的LSN,(在当前5.7版本,会有9个LSN可以忽略)

3. XBK增量(incremental)备份

Xtrabackup企业级增量恢复实战
背景:
某大型网站,mysql数据库,数据量500G,每日更新量20M-30M
备份策略:
xtrabackup,每周日23:00进行全备,周一到周六23:00进行增量备份。
故障场景:
周三下午2点出现数据库意外删除表操作。
如何恢复?

3.1 清除以往备份

[root@db01 /backup/xbk]# \rm -rf /backup/xbk/*

3.2 模拟数据

oldguo[(none)]>create database xbk charset utf8mb4;
oldguo[(none)]>use xbk
oldguo[xbk]>create table t1(id int) engine=innodb charset=utf8mb4;
oldguo[xbk]>insert into t1 values(1),(2),(3);
oldguo[xbk]>commit;

3.3 模拟周日全备

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

3.4 模拟周一的数据变化

oldguo[xbk]>use xbk;
oldguo[xbk]>insert into t1 values(11),(22),(33);
oldguo[xbk]>commit;

3.5 模拟周一晚上增量备份

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

--incremental                          打开增量备份开关
--incremental-basedir=/backup/xbk/full 设定增量备份的基备份(一般是上一天)

3.6 模拟周二白天的数据变化

oldguo[xbk]>use xbk;
oldguo[xbk]>insert into t1 values(111),(222),(333);
oldguo[xbk]>commit;

3.7 模拟周二晚上增量

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

3.8 模拟周三白天数据变化

oldguo[xbk]>use xbk;
oldguo[xbk]>insert into t1 values(1111),(2222),(3333);
oldguo[xbk]>commit;

3.9 搞破坏

[root@db01 /backup/xbk]# pkill mysqld 
[root@db01 /backup/xbk]# \rm -rf /data/3306/data/*

3.10 恢复思路

(1) 测试库,维护页
(2) 处理备份
合并
准备
(3) 截取二进制日志
(4) 数据恢复

3.11 开始恢复演练

3.11.1 处理备份:

(1) 处理原始全备

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

(2) 合并周1并处理

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

(3) 合并周2并处理

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

(4)处理合并后全备数据

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

3.11.2 恢复备份启动数据库

[root@db01 /backup/xbk/full]# cp -a /backup/xbk/full/* /data/3306/data/ 
[root@db01 /backup/xbk/full]# chown -R mysql.  /data/3306/data/ 
[root@db01 /backup/xbk/full]# /etc/init.d/mysqld start

333.11.3 截取binlog并恢复

[root@db01 /backup/xbk/inc2]# cat /backup/xbk/inc2/xtrabackup_binlog_info 
 mysql-bin.000004   1339

oldguo[(none)]>show binlog events in 'mysql-bin.000004';
| mysql-bin.000004 | 1569 | Xid            |         6 |        1600 | COMMIT /* xid=68 */         

[root@db01 ~]# mysqlbinlog --skip-gtids --start-position=1339 --stop-position=1600 /data/binlog/mysql-bin.000004 >/backup/bin.sql

oldguo[(none)]>set sql_log_bin=0;
oldguo[(none)]>source /backup/bin.sql
oldguo[xbk]>select * from t1;


+------+
| id |
+------+
| 1 |
| 2 |
| 3 |
| 11 |
| 22 |
| 33 |
| 111 |
| 222 |
| 333 |
| 1111 |
| 2222 |
| 3333 |
+------+
========================================


##4. 恢复数据的效率(小扩展)
整库数据量较大 ,但是损坏的数据很少
例如 : 500G数据总量, 损坏的数据是10M
XBK: 表空间迁移
MDP: 
手工分析
1、获得表结构
# sed -e'/./{H;$!d;}' -e 'x;/CREATE TABLE `city`/!d;q'  /tmp/full.sql>createtable.sql
2、获得INSERT INTO 语句,用于数据的恢复
# grep -i 'INSERT INTO `city`'  /tmp/full.sqll >data.sql
3.获取单库的备份
# sed -n '/^-- Current Database: `world`/,/^-- Current Database: `/p' all.sql >world.sql

##5. 小扩展
数据损坏:
        物理:磁盘,raid,FS,bid
        逻辑:drop, alter,delete,update
说明:根据binlog row的记录,自动转化日志为拟操作,实现闪回的功能。
mariadb 默认支持
binlog2sql 在githup上下载。

6. 小扩展:迁移
Oracle,SQL Server------>MySQL
Oracle---OGG---->MySQL
MySQL低版本 --XBK,MDP---->高版本
上云迁移,DTS
停机时间:
15分钟

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 214,444评论 6 496
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,421评论 3 389
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 160,036评论 0 349
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,363评论 1 288
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,460评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,502评论 1 292
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,511评论 3 412
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,280评论 0 270
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,736评论 1 307
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,014评论 2 328
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,190评论 1 342
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,848评论 5 338
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,531评论 3 322
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,159评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,411评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,067评论 2 365
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,078评论 2 352