windows下误删数据库恢复(MySQL8.0)

一、Mysql日志

mysql 有两个重要的日志模块 redo log (重做日志) 和 binlog (归档日志),
当有一条数据需要更新时,InnoDB引擎会在系统空闲的时候,将记录更新到磁盘中。会先将记录存放到 redo log 里,在更新内存,这个时候更新就完成了,InnoDB引擎会在系统空闲的时候,将记录更新到磁盘中,redo log是物理日志,记录在某个数据做了什么修改, redo log 是InnoDB引擎中特有的日志,换句话说 redo log 是InnoDB引擎为了提高系统效率,用来做日志缓冲的。
binlog 是记录所有数据库表结构变更以及表数据修改的二进制日志(不会记录 SELECT和SHOW 这类操作),binlog 是逻辑日志,记录语句的原始逻辑。
数据恢复: 可以通过 mysqlbinlog工具进行数据恢复。

二、数据恢复

1、查看是否开启binlog日志备份

mysql> show variables like 'log_bin%';
+---------------------------------+----------------------------------------------------------------------+
| Variable_name                   | Value                                                                |
+---------------------------------+----------------------------------------------------------------------+
| log_bin                         | ON                                                                   |
| log_bin_basename                | C:\ProgramData\MySQL\MySQL Server 8.0\Data\DESKTOP-RGVMCFU-bin       |
| log_bin_index                   | C:\ProgramData\MySQL\MySQL Server 8.0\Data\DESKTOP-RGVMCFU-bin.index |
| log_bin_trust_function_creators | OFF                                                                  |
| log_bin_use_v1_row_events       | OFF                                                                  |
+---------------------------------+----------------------------------------------------------------------+

如果log_bin状态是off,可以退出了,此方法无法恢复。。。。。。。

2、查看binlog日志文件

找到当前 MySQL 记录的 binlog 文件,在 C:\ProgramData\MySQL\MySQL Server 8.0\Data 目录,这里看到当前的日志是*****.000001 这个文件,后缀是0000001或者000002的。

3、定位需要恢复的数据区间

查看 binlog,定位误操作的pos或者时间段,我这里是在 binlog.000001 阶段删除的,注意下面的
Pos: 开始节点
Event_type: 类型
End_log_pos: 结束节点
Info: 描述

mysql> show binlog events in 'binlog.000001';
+---------------+------+----------------+-----------+-------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| Log_name      | Pos  | Event_type     | Server_id | End_log_pos | Info                                                                                                                                                                                                                                             |
+---------------+------+----------------+-----------+-------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| binlog.000001 |    4 | Format_desc    |         1 |         124 | Server ver: 8.0.19, Binlog ver: 4                                                                                                                                                                                                                |
| binlog.000001 |  124 | Previous_gtids |         1 |         155 |                                                                                                                                                                                                                                                  |
| binlog.000001 |  155 | Anonymous_Gtid |         1 |         232 | SET @@SESSION.GTID_NEXT= 'ANONYMOUS'                                                                                                                                                                                                             |
| binlog.000001 |  232 | Query          |         1 |         351 | CREATE DATABASE `mp_test` /* xid=288 */                                                                                                                                                                                                          |
| binlog.000001 |  351 | Anonymous_Gtid |         1 |         430 | SET @@SESSION.GTID_NEXT= 'ANONYMOUS'                                                                                                                                                                                                             |
| binlog.000001 |  430 | Query          |         1 |         735 | use `mp_test`; CREATE TABLE `mp_test`.`user`  (
  `id` bigint NOT NULL AUTO_INCREMENT COMMENT 'id',
  `name` varchar(255) NULL COMMENT '名字',
  `create_time` datetime NULL COMMENT '创建时间',
  PRIMARY KEY (`id`)
) /* xid=320 */       |
| binlog.000001 |  735 | Anonymous_Gtid |         1 |         814 | SET @@SESSION.GTID_NEXT= 'ANONYMOUS'                                                                                                                                                                                                             |
| binlog.000001 |  814 | Query          |         1 |         900 | BEGIN                                                                                                                                                                                                                                            |
| binlog.000001 |  900 | Table_map      |         1 |         963 | table_id: 208 (mp_test.user)                                                                                                                                                                                                                     |
| binlog.000001 |  963 | Write_rows     |         1 |        1023 | table_id: 208 flags: STMT_END_F                                                                                                                                                                                                                  |
| binlog.000001 | 1023 | Xid            |         1 |        1054 | COMMIT /* xid=371 */                                                                                                                                                                                                                             |
| binlog.000001 | 1054 | Anonymous_Gtid |         1 |        1133 | SET @@SESSION.GTID_NEXT= 'ANONYMOUS'                                                                                                                                                                                                             |
| binlog.000001 | 1133 | Query          |         1 |        1219 | BEGIN                                                                                                                                                                                                                                            |
| binlog.000001 | 1219 | Table_map      |         1 |        1282 | table_id: 208 (mp_test.user)                                                                                                                                                                                                                     |
| binlog.000001 | 1282 | Write_rows     |         1 |        1339 | table_id: 208 flags: STMT_END_F                                                                                                                                                                                                                  |
| binlog.000001 | 1339 | Xid            |         1 |        1370 | COMMIT /* xid=374 */                                                                                                                                                                                                                             |
| binlog.000001 | 1370 | Anonymous_Gtid |         1 |        1449 | SET @@SESSION.GTID_NEXT= 'ANONYMOUS'                                                                                                                                                                                                             |
| binlog.000001 | 1449 | Query          |         1 |        1535 | BEGIN                                                                                                                                                                                                                                            |
| binlog.000001 | 1535 | Table_map      |         1 |        1598 | table_id: 208 (mp_test.user)                                                                                                                                                                                                                     |
| binlog.000001 | 1598 | Write_rows     |         1 |        1655 | table_id: 208 flags: STMT_END_F                                                                                                                                                                                                                  |
| binlog.000001 | 1655 | Xid            |         1 |        1686 | COMMIT /* xid=377 */                                                                                                                                                                                                                             |
| binlog.000001 | 1686 | Anonymous_Gtid |         1 |        1765 | SET @@SESSION.GTID_NEXT= 'ANONYMOUS'                                                                                                                                                                                                             |
| binlog.000001 | 1765 | Query          |         1 |        1860 | BEGIN                                                                                                                                                                                                                                            |
| binlog.000001 | 1860 | Table_map      |         1 |        1923 | table_id: 208 (mp_test.user)                                                                                                                                                                                                                     |
| binlog.000001 | 1923 | Update_rows    |         1 |        2003 | table_id: 208 flags: STMT_END_F                                                                                                                                                                                                                  |
| binlog.000001 | 2003 | Xid            |         1 |        2034 | COMMIT /* xid=380 */                                                                                                                                                                                                                             |
| binlog.000001 | 2034 | Anonymous_Gtid |         1 |        2111 | SET @@SESSION.GTID_NEXT= 'ANONYMOUS'                                                                                                                                                                                                             |
| binlog.000001 | 2111 | Query          |         1 |        2246 | use `mp_test`; DROP TABLE `user` /* generated by server */ /* xid=454 */                                                                                                                                                                         |
+---------------+------+----------------+-----------+-------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+

通过 info 看到 我在 Pos 2034 End_los_pos 2246 删除了 user表

4、日志文件转换sql文件进行数据恢复

先来到MySQL下的bin目录,这个目录有个 mysqlbinlog.exe,后面我们可以通过它来进行恢复,打开cmd进入下面目录

C:\Program Files\MySQL\MySQL Server 8.0\bin

在 C:\Program Files\MySQL\MySQL Server 8.0\bin 目录, cmd 运行下面命令,读取 binlog.000001从开始位置351,到结束位置2034,并输出到F:盘下 0917.sql 这个文件,binlog 在 C:\ProgramData\MySQL\MySQL Server 8.0\Data\目录里面

mysqlbinlog --start-position=351 --stop-position=2034 "C:\ProgramData\MySQL\MySQL Server 8.0\Data\binlog.000001" --result-file= D:\\mysql.sql

打开 MySQL 8.0 Command Line Client,就是 MySQL 自带的小黑窗口,运行下面命令

 source D:\\mysql.sql
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值