记一次MySQL数据库备份恢复演练实验

概述

今天主要模拟一下数据库故障,并恢复到故障前一秒。

1、需求

模拟生产数据库故障,恢复到故障前一秒

2、场景

有一份初始备份和后面的binlog,早上9点故障,然后直接拿所有的备份和binlog到另外一台服务器做恢复,按备份文件和备份文件记录的位置+最后8.59分的时间之间的binlog恢复。

一、环境准备

1、备份数据库

mysqldump -u root -p test --single_transaction  --flush-logs --master-data=2 > /backup/test-`date  +"%Y%m%d-%H%M%S"`.sql;

在这里插入图片描述

说明:
当master_data和 single_transaction 同时使用时,数据库会先加全局读锁,然后设置事务一致性和使用一致性快照开始事务,然后马上就取消锁,然后执行导出。过程如下

FLUSH TABLES WITH READ LOCK
SET SESSION TRANSACTION ISOLATION LEVEL REPEATABLE READ
START TRANSACTION /*!40100 WITH CONSISTENT SNAPSHOT */
SHOW MASTER STATUS  -- 这一步就是取出 binlog index and position
UNLOCK TABLES
...dump...

如果需要binlog信息则使用 master_data;
如果不想阻塞同时表是innodb引擎可使用 single_transaction 取得一致性快照(取出的数据是导出开始时刻事务点的状态)
如果表不支持多版本特性,则只能使用 lock-all-tables 阻塞方式来保证一致性的导出数据。

2、向表中插入数据

show master status\G;
use test;
create table tb1(id int);
insert into tb1 values (10),(20),(30);
select * from tb1;

在这里插入图片描述

二、模拟故障

1、继续插入数据,在有备份的情况下删除数据库,模拟误操作

use test;
insert into tb1 values (40),(50);
drop database test;
show databases;

在这里插入图片描述
此时查看数据库发现test就没有了

三、恢复前准备

1、查看binlog

获取备份文件和故障前最新的binlog

mysqlbinlog --base64-output=decode-rows -v --start-datetime="2019-09-11 15:00:00" --stop-datetime="2019-09-11 16:00:00" mysql-bin.000005

说明:配置文件使用了binlog_format= row,查看数据库binlog内容时候就看不到增删改查的具体语句,都是经过64位编码转换后的内容,所以需要加参数–base64-output=decode-rows转换。
在这里插入图片描述
在这里插入图片描述

2、导出故障前的binlog日志并输出为sql文件

mysqlbinlog --start-position=154  --stop-position=10189  -d test mysql-bin.000005 > /backup/binlog-`date  +"%Y%m%d-%H%M%S"`.sql

在这里插入图片描述

也可以用初始位置+最后时间来恢复:

mysqlbinlog --start-position=154   --stop-datetime="2019-09-11 16:00:00"   -d test mysql-bin.000005 > /backup/binlog-`date +"%Y%m%d-%H%M%S"`.sql

四、开始恢复

导入之前的所有备份文件及binlog文件

mysql -uroot -p test < /backup/test-20190911-153754.sql 
mysql -uroot -p test < /backup/binlog-20190911-171045.sql

在这里插入图片描述

五、验证

select * from tb1;

在这里插入图片描述

到此数据成功全部恢复!

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
MySQL数据库项目化教程第二版的思维导图主要包括以下几个方面: 1. 概述:介绍MySQL数据库的基本概念,包括数据库管理系统(DBMS)、数据库、表、字段、记录等。并简要介绍本教程的目的和内容。 2. 安装与配置:详细讲解如何安装MySQL数据库,包括下载安装包、设置安装路径和配置文件,并提供一些常见的配置建议。 3. 数据库设计:讲解如何进行数据库设计,包括创建数据库、选择适当的数据类型、设计表和定义字段,以及建立关系等。 4. SQL语句:介绍MySQL中常用的SQL语句,包括数据的插入、查询、更新和删除等操作。并讲解一些常见的查询技巧和优化方法。 5. 数据库备份恢复:介绍如何进行数据库的备份恢复,包括使用命令行工具和图形化工具进行备份,以及使用备份文件进行恢复。 6. 数据库连接与应用开发:讲解如何使用各种编程语言(如Java、Python等)与MySQL数据库进行连接,并进行应用开发。包括使用JDBC、Python的MySQL驱动等。 7. 性能优化:介绍如何进行MySQL数据库的性能优化,包括优化SQL语句、索引的创建和使用、事务的管理等。 8. 高级技巧:介绍一些高级的技巧,如存储过程、触发器、视图、游标等,以及如何进行数据的导入和导出。 9. 实例与案例:给出一些实例和案例,通过实际的项目演练,展示如何应用MySQL数据库进行数据管理和应用开发。 10. 常见问题与解决方法:列出一些常见的问题和解决方法,帮助读者更好地理解和使用MySQL数据库。 通过这些思维导图,读者可以清晰地了解MySQL数据库项目化教程第二版的内容和结构,有助于他们更好地学习和应用MySQL数据库。同时,思维导图也可以帮助读者对不同主题之间的关系和逻辑有一个整体的认识,提高学习效果。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

淡定波007

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值