mysql 备份恢复-Percona Xtrabackup(全备and增备)

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)

恢复成功!!!!





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

推荐阅读更多精彩内容