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
- 用mysql语句写python学生管理系统(Python基于mysql实现学生管理系统)
- mysql查看死锁记录(mysql查看死锁与去除死锁示例详解)
- mysql数据表实例教程(mysql数据库入门第一步之创建表)
- mysql主键为什么用varchar(Mysql中varchar类型一些需要注意的地方)
- mysql是否支持透明数据加密(MySQL的加密解密的几种方式小结)
- php7用什么替代mysql(mysqli扩展无法在PHP7下升级问题的解决)
- mysql 高效分页(MySQL 分页查询的优化技巧)
- mysql大表查询优化方案(mysql查询优化之100万条数据的一张表优化方案)
- docker怎么创建mysql服务(Docker部署MySQL8集群一主二从的实现步骤)
- 在php中与数据库连接的技术(PHP7.0连接DB操作实例分析基于mysqli)
- mysql多表连接优化(浅谈Mysql多表连接查询的执行细节)
- mysqldecimal类型数据转换(mysql decimal数据类型转换的实现)
- phpmysql完全学习手册教程(Windows下搭建PHP开发环境Apache+PHP+MySQL)
- 查询mysql 死锁(MySQL线上死锁分析实战)
- mysql 自定义排序
- mysql建表时指定聚簇索引(一看就懂的MySQL的聚簇索引及聚簇索引是如何长高的)
- 《内在美》后,一大波新韩剧来袭,李钟硕朴信惠宋慧乔玄彬回归(一大波新韩剧来袭)
- 给孩子选购保温杯,注意这4个步骤,比颜值更重要(给孩子选购保温杯)
- 保温好 容量大 颜值高 保温杯你给娃娃买对了吗(保温好容量大颜值高)
- 《道德经》 人生避开骄狂,才能免去祸患(道德经人生避开骄狂)
- 郭麒麟(郭麒麟)
- 古人十句 戒骄 名言,醍醐灌顶,受益匪浅(古人十句戒骄名言)
热门推荐
- asp.net文件下载的方法
- css怎么设置图片横着(一行css代码解决图片统一大小后的拉伸问题object-fit)
- SQLServer中防止并发插入重复数据的方法详解(SQLServer中防止并发插入重复数据的方法详解)
- laravel验证码依赖(laravel5.2表单验证,并显示错误信息的实例)
- laravel数据库管理教程(Laravel基础_关于view共享数据的示例讲解)
- cent os7.0 安装mysql(mysql8.0.23 linuxcentos7安装完整超详细教程)
- dedecms文章怎么发(批量替换织梦DedeCMS所有文章来源和作者的方法)
- 腾讯云服务器安装需要什么(免费的云服务器怎么申请?腾讯云服务器的申请流程)
- nodejs部署上传文件(node.js使用express-fileupload中间件实现文件上传)
- mysql怎么设置某个字段默认值(MySQL表字段时间设置默认值)
排行榜
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9