MySQL数据库误删恢复_mysql 数据 误删

server/2025/3/10 2:00:33/

2、BigLog日志相关

2.1、检查biglog状态是否开启

声明: 当前为mysql版本5.7 当前为mysql版本5.7****当前为mysql版本5.7

2.1.1、Navicat工具执行
SHOW VARIABLES LIKE 'LOG_BIN%';
  • OFF 是未开启状态,如果不是ON 开启状态需要开启为ON。{默认情况下就是关闭状态}

2.1.2、命令行执行
  • 其中-h表示服务器名,localhost表示本地;-u为数据库用户名,root是mysql默认用户名;-p为密码,如果设置了密码,可直接在-p后链接输入,如:-proot;如果用户没有设置密码,显示Enter password时,直接回车即可。

    mysql -hlocalhost -uroot -proot

2.2、开启biglog
  • 执行语句开启biglog

    SET GLOBAL log_bin = ‘ON’;

执行结果:

注意: **报错了! 报错了!报错不可怕,可怕的是报错没有征兆。**如果要永久修改log_bin的值,需要修改MySQL的配置文件(my.cnf或my.ini),并重启MySQL服务器使修改生效。(只读变量,不能使用set修改,只能通过修改my.cnf或my.ini文件再重启生效)

  1. 遇到这种错误,需要修改my.cnf <Linux系统>my.ini<Windows系统>配置文件,在 [mysqld] 下面增加log-bin=mysql-bin后,重启MySQL服务即可

  2. 在 [mysqld] 段落中添加的log-bin=mysql-bin这是一个 MySQL 数据库的配置选项,用于开启二进制日志记录。二进制日志可以记录所有的数据库操作,包括增删改查等。开启二进制日志记录可以用于备份和恢复数据库,以及进行数据复制等操作。

  3. 在 [mysqld] 段落中添加 server-id=1 (其中的1可以替换为任意整数,但要确保主从之间的server-id不同)

  4. server-id是 MySQL 数据库中的一条配置参数,用于设置 MySQL 实例的唯一 ID。每个 MySQL 实例都必须有一个唯一的 server-id,以便 MySQL 集群中的各个节点能够相互识别和通信。通常情况下,server-id参数会被设置为一个唯一的数字或字符串,比如可以设置为当前服务器的 IP 地址或主机名。如果在一个 MySQL 集群中配置不正确,可能会导致数据同步出现问题,因此需要谨慎配置。

    开启BigLog用于备份和恢复数据库,以及进行数据复制等操作。

    log-bin=mysql-bin

    实例都必须有一个唯一的 server-id 如:server-id=1 ,以便 MySQL 集群中的各个节点能够相互识别和通信。

    server-id=1

  • ON 是开启状态,如果是开启状态那就可以做数据恢复了。

2.3、查看biglog日志文件
show binary logs;

2.3.1、查看master状态
show master status;

2.3.2、查看第一个binlog文件内容
show binlog events;

2.3.3、查看指定binlog文件的内容
show binlog events in 'mysql-bin.000002';

**注意:**上一个事件的结束位置,就是下一个事件的开始位置。如下↓↓↓

2.3.4、刷新log日志
flush logs;

2.3.5、删除日志文件

MySQL删除日志的方式有以下几种:

  1. 通过Reset Master指令删除全部binlog日志,删除之后,日志编号将从xxxx.00001重新开始。
  2. 执行指令purge master logs to ‘mysqlbin.******’,该命令将删除指定编号之前的所有日志。
  3. 执行指令purge master logs before ‘yyyy-mm-dd hh24:mi:ss’,该命令将删除指定日期之前的所有日志。
  • 列出所有日志

    show binary logs;

  • 指定删除

    purge master logs to ‘mysql-bin.000001’;

  • 指定日期删除(该命令将删除指定日期之前的所有日志)

    purge binary logs before ‘2023-5-29 23:59:59’;

  • 删除全部binlog日志

    reset master;

2.3.6、查看和修改日志文件有效期

说明:

  1. 查看日志文件的有效期 **show variables like ‘%expire_logs_days%’;**默认有效期为 0,表示 Binlog 日志的自动清理功能是没有启用的
  2. 设置日志文件有效期 参数set global expire_logs_days=7; 此参数的含义是设置日志的过期天数为7天,过了指定的天数后日志将会被自动删除,这样将有利于减少DBA管理日志的工作量。
  • 查看日志文件的有效期

    show variables like ‘%expire_logs_days%’;

  • 设置日志文件有效期

    set global expire_logs_days=7;

3、误删恢复

3.1、查看数据库
show databases;

3.2、查看表中的数据
 --切换到指定数据库。
use text; 
--显示当前数据库中的所有表名。
show tables;
--查询表数据
select * from user_misjudge;

3.3、查看用户表相关操作日志

说明:show binary logs; 和show master logs; 都是显示所有可用的binlog日志文件列表。

show master logs;

注意: 可以看到我之前删除的表数据已经被记录了 ,由于之前演示删除日志,我的日志是不完整的不完整的日志是不能恢复的 。(开启日志后 重新创一个库 详情查看:3.4重新创建库**) ↓↓↓**

3.4、重新创建库
  • 删除库

    drop database text

  • 清空全部日志

    reset master;

  • 创建库

    CREATE DATABASE text CHARACTER SET ‘utf8’ COLLATE ‘utf8_general_ci’

  • 查看日志信息

    show binlog events in ‘mysql-bin.000001’;

3.4、删除数据库text
 drop database text;

可以看到列表text库已经被删除

3.5、恢复数据库
3.5.1、查看日志文件中的信息
show binlog events in 'mysql-bin.000001';

3.5.2、利用事件开始结束位置进行恢复
mysqlbinlog --start-position=154 --stop-position=427 mysql-bin.000001 | mysql -uroot -p

以上该命令是一个从MySQL二进制日志文件中提取数据并导入到MySQL数据库的命令。具体解释如下:

  1. mysqlbinlog:MySQL二进制日志文件命令,用于读取、处理和输出MySQL二进制日志文件中的内容。
  2. –start-position=154:指定从二进制日志文件的154个字节开始读取,默认情况下,mysqlbinlog从文件的开头开始读取。
  3. –stop-position=427:指定从二进制日志文件的427个字节结束读取,默认情况下,mysqlbinlog读取到文件的末尾。
  4. mysql-bin.000001:二进制日志文件名,表示要读取的二进制日志文件。
  5. |:管道符,将前面的命令的输出作为后面命令的输入。
  6. mysql:MySQL客户端命令,用于连接和操作MySQL数据库
  7. -uroot:指定以root用户身份连接MySQL数据库
  8. -p:表示连接MySQL数据库时需要输入密码。
  • 注意: 此命令是使用终端,进入MySQL时的路径下的data目录下执行。

  • 查看是否恢复删除的库text

mysqlbin000001_250">3.5.3、查看mysql-bin.000001文件日志细节

说明

  1. 由于binlog是二进制的文件,使用mysqlbinlog命令进行转换。
  2. mysqlbinlog:MySQL二进制日志文件命令,用于读取、处理和输出MySQL二进制日志文件中的内容。
  3. 找到安装MySQL时的路径下的data目录,不管你是Linux 或windows,我目前是windows 我就在data目录下使用cmd (如果是linux查详细的日志信息内容,同理进入MySQL时的路径下的data目录,这个时候需要用 ls -la 来查看细节,执行命令:mysqlbinlog ‘mysql-bin.000001’ )
  4. 配置MySQL环境变量,不配置执行命令会失败,右击我的电脑–高级系统设置–环境变量–系统变量–Path(点击,添加MySQL的bin目录)
  • 生成mysql-bin.000001文件日志细节名称是xj.sql

    mysqlbinlog “mysql-bin.000001”>“xj.sql”

  • 生成后的mysql-bin.000001文件日志位置

  • 解析后的mysql-bin.000001文件日志细节

3.5.4、利用事件时间节点进行恢复
mysqlbinlog --start-datetime="2023-06-01 11:32:34" --stop-datetime="2023-06-01 11:47:46" mysql-bin.000001 | mysql -uroot -p
  • 查看恢复的text库

3.6、恢复数据库
3.6.1、进入库
  • 可以看到text库下没有表

3.6.2、库下创建表
  • 建表语句文章开头已经给大家准备直接拿过来执行。

  • 表已经创建成功

3.6.3、库下的表中添加数据
insert user_misjudge(attr1) values('CSDN臭弟弟');
insert user_misjudge(attr1) values('这是一条数据');

3.6.4、删表之间查看日志信息

3.6.4、删除表
drop tables user_misjudge;
  • 查询user_misjudge已经不存在了

3.6.5、恢复表
mysqlbinlog --start-position=720 --stop-position=1579 mysql-bin.000001 | mysql -uroot -p
  • 不用再说了吧一定要终端执行以上命令,离开mysql命令行进入mysql路径下的data目录使用终端执行。
3.6.7、查看恢复的表

  • 查看日志

    show binlog events in ‘mysql-bin.000001’;

可以看到 我们只恢复了表 并没有恢复数据 。为什么 往下继续↓↓

3.6.8、分析日志

原因:

在导航{3.6.5、恢复表} 我们执行的语句mysqlbinlog --start-position=720 --stop-position=1579 mysql-bin.000001 | mysql -uroot -p, 事件开始位置720 ,事件结束位置1579,说明我们位置不对呗,这个位置只能恢复表不能恢复数据。(想要恢复数据应该在 事件的结束位置应该在 删除表之前的最后连接的位置才对)

  • 完整日志如下:

    mysql> show binlog events in ‘mysql-bin.000001’;
    ±-----------------±-----±---------------±----------±------------±--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
    | Log_name | Pos | Event_type | Server_id | End_log_pos | Info |


http://www.ppmy.cn/server/173816.html

相关文章

单链表基本操作的实现与解析(补充)

目录 一、引言 二、代码实现 遍历考虑情况 三、操作解析 查找操作&#xff08;sltfind函数&#xff09; 前插操作&#xff08;sltinsert函数&#xff09; 后插操作&#xff08;sltinsertafter函数&#xff09; 前删操作&#xff08;slterase函数&#xff09; 后删操作&…

一文读懂深度学习中的损失函数quantifying loss —— 作用、分类和示例代码

在深度学习中&#xff0c;quantifying loss&#xff08;量化损失&#xff09;是指通过数学方法计算模型预测值与真实值之间的差异&#xff0c;以衡量模型的性能。损失函数&#xff08;Loss Function&#xff09;是量化损失的核心工具&#xff0c;它定义了模型预测值与真实值之间…

12 【HarmonyOS NEXT】 仿uv-ui组件开发之Avatar组件设计精髓(三)

温馨提示&#xff1a;本篇博客的详细代码已发布到 git : https://gitcode.com/nutpi/HarmonyosNext 可以下载运行哦&#xff01; 文章目录 第三篇&#xff1a;掌握Avatar组件的样式魔法与灵活定制1. 基础使用1.1 组件引入1.2 基础示例 2. 样式定制2.1 尺寸设置2.2 形状设置2.3 …

python爬虫系列课程6:js定时器

python爬虫系列课程6:js定时器 一、定时器的介绍二、定时器的使用三、清除定时器一、定时器的介绍 定时器就是在一段特定的时间后执行某段程序代码。 二、定时器的使用 js定时器有两种创建方式: 1、setTimeout(func, [delay, param1, param2, …]):以指定的时间间隔(以毫…

你会测量管道液体流阻吗?西-魏斯巴赫方程(Darcy-Weisbach Equation)、Colebrook-White 方程帮你

测量管道液体流阻需要测量以下关键量&#xff1a; 需要测量的量 压力差&#xff08;ΔP&#xff09;&#xff1a;管道入口和出口之间的压力差&#xff0c;通常通过压力传感器或差压计测量。流量&#xff08;Q&#xff09;&#xff1a;流经管道的液体体积流量&#xff0c;可通…

WHAT - Tree Shaking 的前提是 ES Module

目录 1. ESM 具有静态结构2. CommonJS (CJS) 无法静态分析3. Tree-shaking 依赖静态分析4. 构建工具支持总结 在 WHAT - Webpack 详解系列&#xff08;七&#xff09; 中我们看到&#xff1a; Tree-shaking 实现的前提是 ES Modules&#xff0c;也就是说&#xff1a;最终交给 W…

Electron:点击右键保存图片到本地

前期插件 前端请求后台的一种方法 npm install got -S用于获取ArrayBuffer文件类型 npm install image-type -S生成随机数 npm install randomstring -D增加右击事件 点击右击事件的时候加载菜单 const imageRightSave require("./ImageRightSave") // 创建右…

CSS—属性继承与预处理器:2分钟掌握预处理器

个人博客&#xff1a;haichenyi.com。感谢关注 1. 目录 1–目录2–属性继承3–预处理器 2. 属性继承 像Android里面继承extends&#xff0c;类继承&#xff0c;子类可以使用父类的public和protected的属性和方法。子类可以直接用。   在CSS里面也是类似的。CSS里面是布局里面…