美文网首页
mysql 备份恢复-Percona Xtrabackup(全备

mysql 备份恢复-Percona Xtrabackup(全备

作者: later02 | 来源:发表于2020-03-30 16:17 被阅读0次

    Percona 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

    下载软件并安装

    centos7:

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

    centos7:

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

    yum-y install percona-xtrabackup-24-2.4.4-1.el7.x86_64.rpm

    介绍:支持全量备份和增量备份

    物理备份工具,拷贝数据文件。200M/s 

    InnoDB表:

    热备份:业务正常发生的时候,可以进行备份,影响较小的备份。

    1.checkpoint,将已提交的数据页刷新到磁盘。记录一个LSN页。

    3.infomation_schema.xxx

    4.拷贝InnoDB表相关的文件(ibdata1,frm,ibd...)

    5.BInlog只读,FTWRL(gobal read lock)

    6.备份期间产生新的数据变化的redo也会被备份走

    非InnoDB表:

    温备份:锁表备份

    1.FTWRL,触发全局锁

    2.拷贝非InnoDB的数据

    3.解锁

    再次统计LSN

    记录二进制日志位置记录下来。

    将所有的备份文件统一存放在一个目录下。

    XBK应用

    innobackupex ------>xtrabackup  软链接  

    前提:

    1)数据库启动

    2)能连上数据库

    用户授权:

    [client]

    socket=/tmp/mysql.sock 

    3)默认会读取[mysqld]   --->datadir=xxxx

    4)服务器端工具

    全备

    命令:innobackupex --user=root --password=luobiao123  --no-timestamp  /data/xbk/full_`date +%F`

    --user 用户名

    --password  密码

    --no-timestamp 不自动产生文件名,自己指定

    备份目录:

    xtrabackup_binlog_info    记录备份后binlog的position号,GTID号,做恢复使用

     xtrabackup_checkpoints  记录过程中的LSN号等,增量备份使用

    xtrabackup_info  前面所有的信息

    xtrabackup_logfile redo日志

    全备的恢复演练 

    pkill mysqld  杀服务端进程 

    rm -rf /data/3306/*  把数据文件删除完

    备份处理:prepare

    redo前滚,undo回滚,模仿csr过程.

    innobackupex --apply-log /data/xbk/full_2020-03-29/

    进行恢复:

    1)进行拷贝:[root@later03 ~]# cp -a  /data/xbk/full_2020-03-29/*    /data/3306/

    2)将用户以及用户组改为mysql :[root@later03 3306]# chown -R mysql.mysql  /data/*

    3)  启动mysql:[root@later03 3306]# /etc/init.d/mysqld  start 

    Starting MySQL. SUCCESS! 

    xbk的增量备份恢复

    说明:

    备份时:

    1.前提:增量必须依赖与全备。

    每次增量都是参照上次备份的LSN号码

    (xtrabackup_checkpoints), 在此基础变化的数据页,

    备份走,会讲备份过程中产生的新的变化redo一并备份走。

    恢复时:

    需要将所有需要的inc备份,按顺序合并到全备中。

    进行prepare.

    进行恢复操作。

    增量备份实践:

    1)基础环境模拟

    2)模拟周日全备

    命令:innobackupex --user=root --password=luobiao123  --no-timestamp  /data/xbk/full_`date +%F`

    3)模拟周一数据变化

    4)模拟周一晚上增量备份inc1 

    [root@later03 xbk]# innobackupex    --user=root --password=luobiao123 --no-timestamp --incremental --incremental-basedir=/data/xbk/full_2020-03-30    /data/xbk/inc1_`date +%F`

    说明:

    --incremental  增量备份的开关

    --incremental-basedir=/data/xbk/full_2020-03-30  增量备份的基目录 

    5)模拟周二数据变化

    6)模拟周二晚上的增量备份

     innobackupex    --user=root --password=luobiao123 --no-timestamp --incremental --incremental-basedir=/data/xbk/inc1_2020-03-30/    /data/xbk/inc2_`date +%F`

    7)模拟周三的数据变化

    8)周三晚上10点发生故障:

    pkill mysqld  

    rm -rf /data/3306/* 

    9)确认备份完整性 

    1.查看日志是否comple 

    2.检查具体的数据目录文件

    to_lsn = 609053615

    last_lsn = 609053624 

    to 和 last差9个lsn说明备份期间没有数据变化.

    5.7中不论备份期间数据是否发生变化,当前备份的from_lsn号

    和上一次备份的last_lsn号总是相差9个,如果不是,那么备份就会

    出现问题。

    实战演练 :

    xbk 全备 + inc 增倍 + binlog  备份

    1)恢复思路

    1.合并,prepare,所有的inc到全备

    2.恢复数据启动数据库。

    3.截取二进制日志,binlog

    4.恢复日志

    2)恢复

    #1.合并,prepare,所有的inc到全备

    #基础全备整理

    1.进行第一次增量的合并

    这里我出了点问题,把命令写错了。所以发现增量日志的第一个被损坏了,不能操作了,

    所以这里提示,操作的时候,应该给所有的日志在此备份,防止在操作的

    过程中,发生损坏,那就gg了。

    这里我先进行全备恢复,然后在模拟操作,在进行.

    这里有犯了一个错误 rm -rf /data/3306/ 直接把3306也删除了,卧槽,所以我们需要

    这样写rm -rf /data/3306/ *  或者把稳的时候,进行  cd /data/3306/  rm -rf  * ,最好备份

    1)进行周一的备份和全备合并以及prepare

    innobackupex --apply-log --redo-only --incremental-dir=/data/xbk/inc1_2020-03-30 /data/xbk/full_2020-03-30

    --redo-only  只进行redo前滚,不进行回滚。

    2) 进行周二的备份和合并后的全备进行合并以及prepare

    说明:这里周二的是最后一次增倍,所以不需要加redo-only 

    innobackupex --apply-log   --incremental-dir=/data/xbk/inc2_2020-03-30 /data/xbk/full_2020-03-30

    3)  查看合并后的文件的check_point和最后一个checkpoint 

    4)在次进行增倍后的全备份文件的prepare

    innobackupex --apply-log   /data/xbk/full_2020-03-30

    5)进行恢复

    1)如果数据量较大,不想拷贝,可以直接将备份目录作为数据的datadir 

    vi  /etc/my.cnf   

    datadir=/data/xbk/full_2020-03-30

    chown -R mysql.mysql /data/xbk/full_2020-03-30 

    2)进行拷贝  这里我还是进行拷贝

    cp -a /data/xbk/full_2020-03-30/*  /data/3306 

    chown -R mysql.mysql /data/* 

    3)启动

    /etc/init.d/mysqld start 

    6)进行gtid日志恢复

      1)起点

       寻找起点:

    [root@later03 inc2_2020-03-30]# cat /data/xbk/inc2_2020-03-30/xtrabackup_binlog_info 

    mysql-bin.000020 1078 03901c2b-723d-11ea-b0de-00163e0477d5:1-4,

    7acb1b1a-6660-11ea-b89b-00163e0477d5:1-19,

    b02ac1f3-7228-11ea-9b66-00163e0477d5:1-11

    position 号为1078 ,通过查看,只有mysql-bin.000020 这一个文件需要截取.

      2)终点 :终点为文件末尾,可以省略。

    截取binlog文件:

    [root@later03 inc2_2020-03-30]# mysqlbinlog --skip-gtids --start-position=1078 /data/binlog/mysql-bin.000020> /tmp/bin20.sql 

    进行恢复:

    mysql> set sql_log_bin  = 0;

    Query OK, 0 rows affected (0.00 sec)

    mysql> source /tmp/bin21.sql 

    Query OK, 0 rows affected (0.00 sec)

    Query OK, 0 rows affected (0.00 sec)

    Query OK, 0 rows affected (0.00 sec)

    Query OK, 0 rows affected (0.00 sec)

    Query OK, 0 rows affected (0.00 sec)

    Query OK, 0 rows affected (0.00 sec)

    Query OK, 0 rows affected (0.00 sec)

    mysql> set sql_log_bin=1;

    Query OK, 0 rows affected (0.01 sec)

    查看数据恢复情况:

    mysql> show tables;

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

    | Tables_in_xbk |

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

    | t1            |

    | t2            |

    | t3            |

    | t4            |

    | t5            |

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

    5 rows in set (0.00 sec)

    mysql> select * from t5;

    +------+

    | id  |

    +------+

    |    1 |

    |    2 |

    |    3 |

    +------+

    3 rows in set (0.00 sec)

    mysql> select * from t4;

    +------+

    | id  |

    +------+

    |    1 |

    |    2 |

    |    3 |

    +------+

    3 rows in set (0.00 sec)

    mysql> select * from t3;

    +------+

    | id  |

    +------+

    |    1 |

    |    2 |

    |    3 |

    +------+

    3 rows in set (0.00 sec)

    mysql> select * from t2;

    +------+

    | id  |

    +------+

    |    1 |

    |    2 |

    |    3 |

    +------+

    3 rows in set (0.00 sec)

    mysql> select * from t1;

    +------+

    | id  |

    +------+

    |    1 |

    |    2 |

    |    3 |

    +------+

    3 rows in set (0.00 sec)

    恢复成功!!!!


    相关文章

      网友评论

          本文标题:mysql 备份恢复-Percona Xtrabackup(全备

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