美文网首页
XBK学习day11

XBK学习day11

作者: 我要笑 | 来源:发表于2019-09-28 20:19 被阅读0次

    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分钟
    
    

    相关文章

      网友评论

          本文标题:XBK学习day11

          本文链接:https://www.haomeiwen.com/subject/mbwructx.html