mysql恢复数据库(MySQL 两种恢复数据的方法)
mysql恢复数据库
MySQL 两种恢复数据的方法一 前言
前一段时间接二连三的出现开发人员在测试环境和生产误操作导致数据库误删除/更新,对DBA而言,回滚数据着实是一件头疼的事情,凡涉及到恢复线上数据必然对应用带来一定的影响。大多数情况是开发误操作delete数据,update多数行,根据之前的操作经验,本文介绍常用的恢复方法。
二 常用的恢复方式
2.1 利用备份恢复
使用这种方式的前提必须有最近的备份集或者知道出现误操作起始的binlog 位点或者GTID,利用备份集恢复到中间的机器上,然后利用MySQL的slave 特性
START SLAVE [SQL_THREAD] UNTIL MASTER_LOG_FILE = 'log_name', MASTER_LOG_POS = log_pos;
until_option:
UNTIL { {SQL_BEFORE_GTIDS | SQL_AFTER_GTIDS} = gtid_set | MASTER_LOG_FILE = 'log_name', MASTER_LOG_POS = log_pos | RELAY_LOG_FILE = 'log_name', RELAY_LOG_POS = log_pos | SQL_AFTER_MTS_GAPS }
恢复出到一个临时的实例,将误删除,更新的数据 dump 出来并恢复到老的实例里面。恢复数据期间的受影响的表最好不可写,否则将难以达到最想要的结果。例如 a=2 ,被误更新为 a=4,恢复的期间有被更新为a=7 ,结果恢复后又恢复为a=2 。 此种恢复方式 不适合恢复大量数据库,且需要临时实例。
2.2 利用开源工具binlog2sql 恢复
binlog2sql 是大众点评公司的DBA 开发的一款基于通过解析binlog将delete 恢复为insert,update 的值 set 字段和where条件做对调的原理来恢复数据的。 使用限制 MySQL的binlog format 必须是row 安装
|
git clone https: //github .com /danfengcao/binlog2sql .git && cd binlog2sql pip install -r requirements.txt |
用法
|
usage: binlog2sql.py [-h HOST] [-u USER] [-p PASSWORD] [-P PORT] [--start- file STARTFILE] [--start-position STARTPOS] [--stop- file ENDFILE] [--stop-position ENDPOS] [--start-datetime STARTTIME] [--stop-datetime STOPTIME] [--stop-never] [-d [DATABASES [DATABASES ...]]] [-t [TABLES [TABLES ...]]] [-K] [-B] [--help] |
例子
|
create table flashback( id int (11) not null auto_increment primary key , stat int (11) not null default 1 ) engine=innodb default charset=utf8; insert into flashback(stat) values (2),(3),(4),(7),(9),(22),(42),(33),(66),(88) |
误操作
update flashback set stat=15
恢复数据的步骤
1.获取误操作的dml所在的binlog,不过一般开发可不知道具体binlog,他们只知道什么时间误操作了,binlog2sql支持按照时间范围恢复。
|
mysql> show master logs; + ------------------+-----------+ | Log_name | File_size | + ------------------+-----------+ | mysql-bin.000009 | 177 | | mysql-bin.000010 | 464 | | mysql-bin.000011 | 8209 | + ------------------+-----------+ 3 rows in set (0.00 sec) |
本例子中binlog为mysql-bin.000011
2.利用binlog2sql 恢复数据,先解析binlog获取 update 语句的起始位点,本例中 start 5087 end 5428,执行命令
python binlog2sql.py -h127.0.0.1 -P3307 -udba -p'dbadmin' -dyang -tflashback --start-file='mysql-bin.000011'
使用binlog2sql -B 参数得到恢复的sql
将获取到的sql 执行到数据库,假如生产环境中真的发生了问题,一定要和开发沟通并且确认需要恢复的确切记录。
|
mysql> select * from flashback; + ----+------+ | id | stat | + ----+------+ | 1 | 2 | | 2 | 3 | | 3 | 4 | | 4 | 7 | | 5 | 9 | | 6 | 22 | | 7 | 42 | | 8 | 33 | | 9 | 66 | | 10 | 88 | + ----+------+ 10 rows in set (0.00 sec) |
binlog2sql的特点:
mysql server必须开启,离线模式下不能解析 优点(对比mysqlbinlog) 。
纯Python开发,安装与使用都很简单。
自带flashback、no-primary-key解析模式,无需再装补丁。
flashback模式下,更适合闪回实战。
解析为标准SQL,方便理解、调试。
代码容易改造,可以支持更多个性化解析.
其实MySQL 还提供了一个参数 sql_safe_updates,该参数将禁止 不带where 条件的delete和update语句。具体用法和介绍还请参考MySQL官方介绍。
三 总结
本文简单介绍了两种恢复误操作数据的方法,其实还有其他的方式 比如 使用 mysqlbinlog 编写脚本来恢复数据 ,利用闪回的patch 或者去哪儿的inception 等等 ,大家可以继续去研究。保护数据安全乃DBA的基本职责,每年都有各种 因为数据被误删除导致的惨案。希望每个DBA 都能守护好自己的生命线。
以上就是MySQL 两种恢复数据的方法的详细内容,更多关于MySQL 恢复数据的资料请关注开心学习网其它相关文章!
原文链接:https://cloud.tencent.com/developer/article/1181418
- oracle和mysql查询所有表(Oracle、MySQL和SqlServe三种数据库分页查询语句的区别介绍)
- mysql自增锁(深入剖析 MySQL 自增锁)
- mysql查看执行计划
- mysql时间戳和datetime对比(mysql中 datatime与timestamp的区别说明)
- mysql发生系统错误(MySQL too many connections错误的原因及解决)
- mysql8.0.19.0正确安装图解(MySQL 8.0.23 主要更新一览新特征解读)
- mysql配置多实例
- mysql数据库简单操作(一篇文章教会你进行MySQL数据库和数据表的基本操作)
- mysql批量生成uuid(一种简单的ID生成策略: Mysql表生成全局唯一ID的实现)
- python在mysql创建数据库(python3对接mysql数据库实例详解)
- mysql索引优化有哪些(MySQL如何基于Explain关键字优化索引功能)
- mysql乐观锁一定比悲观锁性能高(mysql居然还能实现分布式锁的方法)
- mysql数据表的创建与管理(MySQL数据操作-DML语句的使用)
- mysql定期备份(Mysql5.7定时备份的实现)
- mysql自定义安装教程5.7(MySQL系列-源码编译安装v5.7.34)
- mysql主从复制如何解决延迟(MySQL 8.0.23中复制架构从节点自动故障转移的问题)
- 记忆中的台词(记忆中的台词)
- 袁冰妍轧戏 拍《琉璃》的同时还在拍《将夜》,难怪被骂演技差(拍琉璃的同时还在拍将夜)
- 刚红就耍大牌,《琉璃》角色滤镜碎一地,心疼工作人员(琉璃角色滤镜碎一地)
- 袁冰妍郑业成这对可以处,有脸红情话他们是真的敢说(袁冰妍郑业成这对可以处)
- 《祝卿好》台词又土又甜,就喜欢这么直接的恋爱(祝卿好台词又土又甜)
- 大女主 汤唯垂青电视圈,搭档朱亚文出演《大明皇妃孙若微传》(汤唯垂青电视圈)
热门推荐
- truncate与delete优缺点(秒懂drop、truncate和delete的区别)
- 阿里云安全组端口访问网站(阿里云添加的安全组端口以及添加后无法访问问题排查)
- js的showModalDialog的用法
- python 并发传输文件(python单线程文件传输的实例C/S)
- sqlserver分表后如何查询(SQL Server中row_number分页查询的用法详解)
- html5音频处理(recorder.js 基于Html5录音功能的实现)
- Dictionary转换为list
- nodejs爬虫(node.js做一个简单的爬虫案例教程)
- python规定输入值的最大值(实例讲解Python中整数的最大值输出)
- apache服务器设置301(Apache Rewrite实现URL的301跳转和域名跳转)
排行榜
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9