MySQL误操作如何恢复

分类:编程技术 时间:2024-02-20 15:48 浏览:0 评论:0
0
本文与大家分享如何从MySQL误操作中恢复。小编觉得还是比较实用的,所以分享给大家,作为参考。下面就跟随小编来看看吧。

常用恢复方法
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

                                                                                      | /p>

恢复到临时实例,转储意外删除和更新的数据并将其恢复到旧实例。数据恢复期间最好使受影响的表不可写y,否则很难达到最理想的效果。例如,
a=2 被错误地更新为 a=4。恢复期间更新为a=7。结果恢复后又回到a=2。
这种恢复方法不适合恢复大量数据库,并且需要临时实例。
2.2 使用开源工具binlog2sql进行恢复。
Binlog2sql是大众点评DBA开发的一款数据恢复工具,其原理是解析binlog,通过交换来恢复delete到insert、update、set字段、where条件的值。
使用限制 MySQL的binlog格式必须是row
安装

git clone https://github.com/danfengcao/binlog2sql.git && cd binlog2sql

pip install -r requirements.txt

用法

用法:binlog2sql.py [-h HOST] [-u USER] [ - p 密码] [-P 端口]

stop-file ENDFILE] [--stop-position ENDPOS]

                        [--start-datetime STARTTIME] [--stop-datetime STOPTIME]

  --stop-never] [--帮助] [-d [数据库 [数据库 ...]]]

[-t [表 [表 ...]]]] ]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]] ]]]]。 ] [-K] [-B]

示例

创建表闪回(

id int(11) not null auto_increment主键,

stat int(11) not null default 1

)engine=innodb default charset=utf8;

插入闪回(stat)值(2),(3),(4),(7),(9),(22),(42),(33),(66), (88)

误操作

update flashback set stat=15

恢复数据的步骤
1 获取dml的位置那是无意中操作的Binlog,但是一般开发者并不知道具体的Binlog。他们只知道操作何时被错误执行。 Binlog2sql支持根据到时间范围。

mysql> 显示主日志;

+--------------------------------+-- ---------+

|日志名称 |文件大小 |

+------------ ------+-----------+
< /p>

| mysql-bin.000009 | 177 |

| mysql-bin.000010 | 464 |

| mysql-bin.000011 | 8209 |

+------------ ------+------------+
< /p>

3 rows in set (0.00 sec)

本例中binlog为mysql-bin.000011

2 使用binlog2sql恢复数据。首先解析binlog,获取update语句的起点。本例中,start 5087 end 5428

< p>python binlog2sql.py -h227.0.0.1 -P3307 -udba -p'dbadmin' -dyang -tflashback --start-file='mysql -bin.000011'


使用binlog2sql -B参数恢复sql

将获取到的sql执行到数据库。如果生产环境确实出现问题,一定要和开发沟通,确认需要 恢复的准确记录。

mysql> select * from flashback;

+----+------+

|编号 |统计 |

+----+-----+

| 1 | 2 |

| 2 | 3 |

| 3 | 4 |

| 4 | 7 |

| 5 | 9 |

| 6 | 22 |

| 7 | 42 |

| 8 | 33 |

| 9 | 66 |

| 10 | 10 88 |

+----+------+

一组 10 行(0.00 秒)

< p>binlog2sql的局限性
Mysql服务器必须开启且无法离线模式解析
优点(相对于mysqlbinlog)
纯Python开发,安装使用方便
来具有闪回和无主键解析模式,无需安装补丁
闪回模式更适合闪回实战
解析为标准SQL,易于理解和调试
代码为方便修改,可以支持更个性化的解析
其实MySQL还提供了一个参数sql_safe_updates,这个参数会禁止没有where条件的删除和更新声明。

感谢您的阅读!这篇关于《MySQL误操作如何恢复》的文章就分享到这里。希望以上内容能够给大家带来一些帮助,让大家能够学到更多的知识。如果您觉得文章不错,可以分享出去,让更多的人知道。人们看到了!

1. 本站所有资源来源于用户上传或网络,仅作为参考研究使用,如有侵权请邮件联系站长!
2. 本站积分货币获取途径以及用途的解读,想在本站混的好,请务必认真阅读!
3. 本站强烈打击盗版/破解等有损他人权益和违法作为,请各位会员支持正版!
4. 编程技术 > MySQL误操作如何恢复

用户评论