mysql第五章事务_mysql 第五章 备份恢复

mysql 第五章 备份恢复

一.备份策略*****

1.每周一次全备,每天一次增量备

2.每天检查备份是否成功

3.每季度进行备份恢复演练

4.设置 -master-data=2 (记录备份的GTID号范围) --single-transaction(备份快照,实现伪热备)

5. 备份区别 :热备: 对于业务影响最小(仅限InnoDB) ; MyISAM:温备 (长时间锁表备份)

二. 恢复策略

1.停业务,挂维护页,避免数据的二次伤害

2.找一个临时库(和主库相同版本)

3.导入最近的全备和导入最近的增量备

4.从binlog中剔除错数操,binblog恢复

从最近的全量/增量备份中获取,二进制起点GTID号,从主库获取目前GTID号.

@@GLOBAL.GTID_PURGED='b337c:1-21'; 22就是将要回放二进制的起点号.

5.测试数据

5.业务恢复: 方法一:直接使用临时库顶替原生产库,前端应用割接到新库

方法二:将误删除的表导出,导入到原生产库

三. 项目案例:备份恢复

1. 备份恢复项目案例

背景环境:正在运行的网站系统,mysql-5.7.20 数据库,数据量50G,日业务增量1-5M。

备份策略:每天23:00点,计划任务调用mysqldump执行全备脚本

故障时间点:年底故障演练:模拟周三上午10点误删除数据库.

思路:

(1) 停业务,挂维护页,避免数据的二次伤害

(2) 找一个临时库,恢复周二23:00全备

(3) 截取周二23:00 --- 周三10点误删除之间的binlog,恢复到临时库

(4) 测试可用性和完整性:

方法一:直接使用临时库顶替原生产库,前端应用割接到新库

方法二:将误删除的表导出,导入到原生产库

(5) 开启业务:经过20分钟的处理,最终业务恢复正常

1.1备份恢复

1.1.1从全备截取周二23:00 --- 周三10点误删除之间的binlog: 如下1-22是23点前,22就是23点后的起点GTID

SET @@GLOBAL.GTID_PURGED='b332efca-5b8e-11ea-aef2-000c29db3d7c:1-21';

1.1.2 依据GIID号导出周二23点到周三10点的二进制日志

查看

mysqlbinlog --base64-output=decode-rows -vvv --include-gtids='b332efca-5b8e-11ea-aef2-000c29db3d7c:22-35' \

--exclude-gtids='b332efca-5b8e-11ea-aef2-000c29db3d7c:34' /data/3306/binlog/mysql_3306_bin.00000{1..9} |grep GTID

1.1.3 导出

mysqlbinlog --include-gtids='b332efca-5b8e-11ea-aef2-000c29db3d7c:22-35' --exclude-gtids='b332efca-5b8e-11ea-aef2-000c29db3d7c:34' \

/data/3306/binlog/mysql_3306_bin.00000{1..9} --skip-gtids >/backup/bin. sql

1.1.4 恢复备份到临时库3307

mysql -S /data/3307/mysql.sock

set sql_log_bin=0;

source /back/full_2019-07-15.sql

source /backup/bin.sql

set sql_log_bin=1;

1.1.5 将故障表导出并恢复到生产

mysqldump -S /data/3307/mysql.sock -B backup --master-data=2 --single-transaction -E -R --triggers >/backup/bak.sql

mysql -uroot -p123

set sql_log_bin=0

source /backup/bak.sql;

set sql_log_bin=1;

2. 延时从库处理逻辑故障恢复项目案例 *****

2.1 延时从恢复流程

2.2停从库SQL线程,记录已经回放的位置点(截取日志起点)

2.3 截取故障点之前的relaylog

2.4 模拟SQL线程回放日志

3.5从库 source

2.6 恢复业务

情况一: 就一个库的话

从库替代主库工作

情况二: 从库导出故障库,还原到主库中.

2.7 重新从头开始做主从

3. 故障演练

3.1主库 :

create database delay charset utf8mb4;

use delay;

create table t1 (id int);

insert into t1 values(1),(2),(3);

commit;

drop database delay;

3.2 从库:

停止 从库SQL 线程,获取relay的位置点

mysql> stop slave sql_thread;

mysql> show slave status \G

Relay_Log_File: db01-relay-bin.000002

Relay_Log_Pos: 626

3.3 找到relay的截取终点

mysql> show relaylog events in 'db01-relay-bin.000002';

| db01-relay-bin.000002 | 1299 | Query | 7 | 1228 | drop database delay

3.4. 截取relay

[root@db01 data]# cd /data/3308/data/

[root@db01 data]# mysqlbinlog --start-position=325 --stop-position=773 /data/3308/data/oldboy-relay-bin.000002 >/tmp/relay.sql

3.5 恢复relay到从库

[root@db01 data]# mysql -uroot -p -S /data/3308/mysql.sock

mysql> set sql_log_bin=0;

mysql> source /tmp/relay.sql

mysql> set sql_log_bin=1;

四. 备份恢复命令集

1. 从mysqldump 全备中获取库和表的备份获得表结构

# sed -e'/./{H;$!d;}' -e 'x;/CREATE TABLE `city`/!d;q' full.sql>createtable.sql

2. mysqldump获得INSERT INTO 语句,用于数据的恢复

# grep -i 'INSERT INTO `city`' full.sqll >data.sql &

3. 从mysqldump获取单库的备份

sed -n '/^-- Current Database: `world`/,/^-- Current Database: `/p' full.sql >world.sql

4. mysqldump

4.1全库全量备份

mysqldump -uroot -p123 -A --max_alliwed_packet=128M --master-data=2 --single-transaction -E -R --triggers >/backup/mysql.sql >/backup/full.sql

4.2 指定表 mysqldump -uroot -p123 test t1 tt2

-A 所有库 -B指定库 -R 存储过程和函数 -E 事件 --triggers 触发器 -d 指定库

--master-data=2 备份时记录binlog中的GTID号的范围 加了--single-transaction,对于InnoDB表不锁 表备份(快照备份),不加则温备

--max_allowed_packet=128M指定数据包大小

5. mysqlbinlog

1)查看二进制

mysqlbinlog --base64-output=decode-rows -vvv --include-gtids='b332efca-5b8e-11ea-aef2-000c29db3d7c:22-35' /data/3306/binlog/mysql_3306_bin.00000{1..9}

3) 截取

mysqlbinlog --skip-gtids --include-gtids='d60b549f-9e10-11e9-ab04-000c294a1b3b:1-3' \ mysql-bin.00000{1..9} ----exclude-gtids='d60b549f-9e10-11e9-ab04:1' >/tmp/gtid.sql

--skip-gtids 作用:在导出时,忽略原有的gtid信息,恢复时生成最新的gtid信息

--include-gtids 获取

--exclude-gtids 排除

-d指定库(不可以指定表)

6. 二进制查看命令

show variables like '%log_bin%'; 查看二进制日志是否开始

show binary logs; 查看所有已存在的二进制日志

flush logs; 刷星二进制日志

show master status ; 查看正在使用的二进制日志

show binlog events in 'mysql-bin.000004'; 查看二进制日志事件

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值