前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >数据库误操作数据恢复

数据库误操作数据恢复

作者头像
DH镔
发布2023-10-21 11:49:54
2400
发布2023-10-21 11:49:54
举报
文章被收录于专栏:编程从踩坑到跳坑

# 数据库误操作数据恢复

# 前提

mysql必须有以下配置

代码语言:javascript
复制
binlog_format = row
binlog_row_image = full # 默认是full

# 实战

假设有一张用户表,结构如下

代码语言:javascript
复制
create table tb_user
(
    id       bigint primary key not null auto_increment,
    username varchar(100)       not null,
    pwd      varchar(100)       not null,
    sex      varchar(10)        not null
);

数据sql如下:

代码语言:javascript
复制
insert into tb_user (username, pwd, sex)
values ('张三', '123456', '男'),
       ('李四', '111111', '女'),
       ('kk', '1111', '鸡');

小明一天不小心执行了delete全表的操作

代码语言:javascript
复制
delete from tb_user where id != 0;

把数据全部删除了

# 生成回滚sql

小明都想好跑路的国家了,小董出手相助,祭出今天要介绍的工具ra,github地址:https://github.com/DHBin/raopen in new window

代码语言:javascript
复制
数据库工具
支持binlog数据闪回、binlog转sql等等

支持mysql数据库版本:
5.5.x
5.6.x
5.7.x
8.0.x

Usage:
  ra [command]

Available Commands:
  flashback   数据闪回
  help        Help about any command
  tosql       通过binlog日志生成sql

Flags:
  -h, --help      help for ra
  -v, --version   version for ra

Use "ra [command] --help" for more information about a command.

步骤一:查看当前的binlog文件名

代码语言:javascript
复制
show binary logs;
代码语言:javascript
复制
+----------------+---------+---------+
|Log_name        |File_size|Encrypted|
+----------------+---------+---------+
|mysql-bin.000010|7627     |No       |
|mysql-bin.000011|6699     |No       |
+----------------+---------+---------+

删除的binlog一般在最后的binlog文件中,mysql-bin.000011。根据小明的描述,当时操作的时间大概是2023-04-26 08:41

步骤二:使用ra生成回滚sql

根据描述得到两个关键的信息

  • binlog文件名
  • 操作时间

把时间范围圈在41分

代码语言:javascript
复制
ra flashback --host 127.0.0.1 -u root -p 123456  --start-datetime "2023-04-26 08:41:00" --stop-datetime "2023-04-26 08:42:00"

执行后生成回滚sql

代码语言:javascript
复制
insert into `test`.`tb_user` (id, username, pwd, sex) values(1, '张三', '123456', '男'); # pos 5726 timestamp 1682469713
insert into `test`.`tb_user` (id, username, pwd, sex) values(2, '李四', '111111', '女'); # pos 5726 timestamp 1682469713
insert into `test`.`tb_user` (id, username, pwd, sex) values(3, 'kk', '1111', '鸡'); # pos 5726 timestamp 1682469713

事情就是这样,小明不用跑路了,请小董喝了一瓶冰红茶。

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • # 数据库误操作数据恢复
    • # 前提
      • # 实战
        • # 生成回滚sql
        相关产品与服务
        数据库
        云数据库为企业提供了完善的关系型数据库、非关系型数据库、分析型数据库和数据库生态工具。您可以通过产品选择和组合搭建,轻松实现高可靠、高可用性、高性能等数据库需求。云数据库服务也可大幅减少您的运维工作量,更专注于业务发展,让企业一站式享受数据上云及分布式架构的技术红利!
        领券
        问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档