我的编程空间,编程开发者的网络收藏夹
学习永远不晚

MySQL如何恢复误操作

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

MySQL如何恢复误操作

这篇文章给大家分享的是有关MySQL如何恢复误操作的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。

常用的恢复方式
2.1 利用备份恢复
  使用这种方式的前提必须有最近的备份集或者知道出现误操作起始的binlog 位点或者GTID,利用备份集恢复到中间的机器上,然后利用MySQL的slave 特性

  1. START SLAVE [SQL_THREAD] UNTIL

  2.     MASTER_LOG_FILE = 'log_name', MASTER_LOG_POS = log_pos;

  3. until_option:

  4.     UNTIL {   {SQL_BEFORE_GTIDS | SQL_AFTER_GTIDS} = gtid_set

  5.           | MASTER_LOG_FILE = 'log_name', MASTER_LOG_POS = log_pos

  6.           | RELAY_LOG_FILE = 'log_name', RELAY_LOG_POS = log_pos

  7.           | 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 
安装

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

  2. pip install -r requirments.txt

用法

  1. usage: binlog2sql.py [-h HOST] [-u USER] [-p PASSWORD] [-P PORT]

  2.                      [--start-file STARTFILE] [--start-position STARTPOS]

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

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

  5.                      [--stop-never] [--help] [-d [DATABASES [DATABASES ...]]]

  6.                      [-t [TABLES [TABLES ...]]] [-K] [-B]

例子

  1. create table flashback(

  2. id int(11) not null auto_increment  primary key ,

  3. stat int(11) not null default 1

  4. ) engine=innodb default charset=utf8;

  5. insert into flashback(stat) values (2),(3),(4),(7),(9),(22),(42),(33),(66),(88)

误操作

  1. update flashback set stat=15

恢复数据的步骤
1 获取误操作的dml所在的binlog,不过一般开发可不知道具体binlog,他们只知道什么时间误操作了,binlog2sql支持按照时间范围恢复。

  1. mysql> show master logs;

  2. +------------------+-----------+

  3. | Log_name | File_size |

  4. +------------------+-----------+

  5. | mysql-bin.000009 | 177 |

  6. | mysql-bin.000010 | 464 |

  7. | mysql-bin.000011 | 8209 |

  8. +------------------+-----------+

  9. 3 rows in set (0.00 sec)

本例子中binlog为mysql-bin.000011

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

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

MySQL如何恢复误操作
使用binlog2sql -B 参数得到恢复的sql
MySQL如何恢复误操作
将获取到的sql 执行到数据库,假如生产环境中真的发生了问题,一定要和开发沟通并且确认需要恢复的确切记录。

  1. mysql> select * from flashback;

  2. +----+------+

  3. | id | stat |

  4. +----+------+

  5. | 1 | 2 |

  6. | 2 | 3 |

  7. | 3 | 4 |

  8. | 4 | 7 |

  9. | 5 | 9 |

  10. | 6 | 22 |

  11. | 7 | 42 |

  12. | 8 | 33 |

  13. | 9 | 66 |

  14. | 10 | 88 |

  15. +----+------+

  16. 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如何恢复误操作”这篇文章就分享到这里了,希望以上内容可以对大家有一定的帮助,让大家可以学到更多知识,如果觉得文章不错,可以把它分享出去让更多的人看到吧!

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

MySQL如何恢复误操作

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

MySQL误删数据如何恢复

如果在 MySQL 中误删了数据,可以通过以下几种方式进行数据恢复:从备份中恢复数据:如果你有数据库的备份文件,可以将备份中的数据恢复到数据库中。这是一种非常简单且可靠的方法,但是需要确保备份文件是最新的并且完整的。使用恢复工具:MySQL
2023-10-27

mysql procedure误删除如何恢复

如果您在 MySQL 中错误地删除了一个存储过程,有几种方法可以尝试恢复它:使用回滚操作:如果您在删除存储过程之前启用了二进制日志 (binary logging),您可以使用回滚操作恢复到删除存储过程之前的状态。您可以使用以下命令来查看二
mysql procedure误删除如何恢复
2024-04-09

mysql如何恢复误删的数据

如果在MySQL数据库中误删了数据,可以通过以下几种方法来尝试恢复数据:1. 使用备份文件:如果你有数据库的备份文件,可以将备份文件还原到一个新的数据库中,然后从这个新的数据库中导出你需要恢复的数据,再将其导入到原来的数据库中。2. 使用二
2023-08-11

mysql数据误删除如何恢复

如果MySQL数据误删除,可以尝试以下方法恢复:1. 使用备份:如果你有定期备份数据库,可以通过将备份文件还原到误删除之前的状态来恢复数据。2. 使用二进制日志(binary log):MySQL的二进制日志记录了数据库的所有操作,包括删除
2023-10-09

SQLServer数据库误操作恢复的方法

本文主要介绍了SQLServer数据库误操作恢复的方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
2023-01-30

mysql误删数据后如何快速恢复

这篇文章主要介绍了mysql误删数据后如何快速恢复的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇mysql误删数据后如何快速恢复文章都会有所收获,下面我们一起来看看吧。第一步:保证mysql已经开启binlog
2023-03-02

编程热搜

目录