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'; 查看二进制日志事件

mysql第五章事务_mysql 第五章 备份恢复相关推荐

  1. mysql的存储过程与事务_mysql的存储过程与事务入门

    存储过程是: 通过一系列的SQL语句, 根据传入的参数(也可以没有), 通过简单的调用, 完成比单个SQL语句更复杂的功能, 存储在数据库服务器端,只需要编译过一次之后再次使用都不需要再进行编译.主要 ...

  2. mysql异机还原_MySQL innobackupex全量备份恢复

    转自 http://blog.itpub.net/27099995/viewspace-1295099/ 先简单介绍一下这个工具:innobackupex innobackupex比xtarbacku ...

  3. mysql 外键和事务_Mysql (五)事务和外键

    一. 什么是事务:简单说,所谓事务就是一组操作,这组操作要么都成功执行,要么都不执行. 二. 事务的使用流程 1. 第一步:开启事务,start transaction: 2. 第二步:正常操作SQL ...

  4. mysql不同连接的事务_mysql中不同事务隔离级别下数据的显示效果--转载

    事务是一组原子性的SQL查询语句,也可以被看做一个工作单元.如果数据库引擎能够成功地对数据库应用所有的查询语句,它就会执行所有查询,如果任何一条查询语句因为崩溃或其他原因而无法执行,那么所有的语句就都 ...

  5. mysql高并发不用事务_Mysql高并发加锁事务处理

    # Mysql高并发加锁事务处理 MySQL 使用 SELECT - FOR UPDATE 做事务写入前的确认 以MySQL 的InnoDB 为例,预设的 Tansaction isolation l ...

  6. mysql乐观锁与事务_Mysql中的读锁,写锁,乐观锁及事务隔离级别和并发问题

    mysql读锁,写锁,乐观锁 读锁,也叫共享锁(shared lock) SELECT * FROM table_name  WHERE ...  LOCK IN SHARE MODE 写锁,也叫排他 ...

  7. mysql读写分离实现事务_Mysql读写分离后的事务ce

    1 .概述 很多人会有这样的疑问,mysql读写分离后,我的事务怎么处理呢. 不是说mysql不支持跨库事务吗? 那我引入mycat这个中间件后事务是否是安全的呢,它是怎么运作的呢. 今天我们就来实验 ...

  8. mysql 一条sql 事务_MySQL的事务

    MySQL中事务是一个最小的不可分割的工作单元,事务能保证一个业务的完整性 一个业务中有多条sql语句,这些sql语句必须同时成功或同时失败,这时需要要事务来保证这个要求. 例如:a从自己的银行卡上转 ...

  9. mysql第一章试题_MySQL基础-第一章

    1.MySQL服务器逻辑架构图 主要关注第二层架构.大多数MySQL的核心服务功能都在这一层,包括查询解析,分析,优化,缓存以及所有内置函数,以及所以跨存储引擎(通用)功能也都在这一层实现,例如:存储 ...

最新文章

  1. 2017-09-29 前端日报
  2. pandas.Series.multiply()含义解释
  3. 系统间通信3:RPC的基本概念
  4. 数据采集工具flume
  5. 香港中文大计算机科学系电话,港大和港中文计算机科学系2021年提前批招生开启!...
  6. idea docker 一键部署实战
  7. 在tunnelbroker为服务器IP建立IPV6 Tunnel
  8. C语言入门学习(入门级C语言)
  9. 爬取12306验证码图片
  10. unicloud进阶uni-id入门(一)---uni-id能做什么?
  11. CSS 圆形图片,类似头像形状。
  12. 对农行金e顺k令的一些猜测
  13. [TJOI2013]松鼠聚会
  14. r语言 C4.5 剪枝是用什么算法_推荐收藏 | 决策树,逻辑回归,PCA算法面经
  15. SSH: Bad owner or permissions on .ssh/config的解决
  16. 《计算机世界》:应用软件商店呐喊、彷徨(上)
  17. Promise基本使用 ,promise 与 Ajax封装
  18. 计算机桌面图标管理,让桌面干干净净!桌面图标管理不用愁
  19. Windows虚拟机遗忘密码解决办法
  20. EPIC平台 国家/地区申述修改经验总结

热门文章

  1. 【PC工具】如何简单粗暴无脑的解方程
  2. 【Android工具】免费二次元追番神器,各种字幕组新番旧番良心资源,重要的事说三遍:没有广告!没有广告!没有广告...
  3. Python 学习笔记(3)对txt文件的读与写操作(下)
  4. 【system generator】基于system generator的根号运算系统实现
  5. C++强制类型转换:static_cast、dynamic_cast、const_cast、reinterpret_cast
  6. 考前自学系列·计算机组成原理·存储器画图
  7. C语言从0到1·变量
  8. VS和Eclipse自动注释比较
  9. 如果看了这篇文章你还不懂傅里叶变换,那就过来掐死我吧(一)
  10. 配置Apache时出错及解决方法