数据库误删除后的两种恢复方法(一)日志操作篇
工欲善其事必先利其器
想要详细了解数据库误删后的恢复操作,得先了解一些基本的信息
目录
Binlog 日志详解
一、Binlog 记录模式
二、Binlog 文件结构
三、Binlog 写入机制
四、Binlog文件操作
1、查看Binlog的状态
2、开启Binlog功能
3、查看都有哪些日志文件
4、查看当前正在操作的日志
5、查看当前日志中有哪些事件
6、删除日志文件的三种方式
7、查看和修改日志文件的有效期
8、查看日志文件的详细信息
9、对删除数据库的恢复具体操作
首先呢,想要恢复误删的数据库,可以先从日志入手,而在数据库的InnoDB搜索引擎中有三种日志:Undo Log 日志、Redo Log 日志、Binlog 日志,三种日志中,我们需要通过Binlog日志来进行数据库的恢复
Binlog 日志详解
一、Binlog 记录模式
Redo Log 是属于InnoDB引擎所特有的日志,而MySQL Server也有自己的日志,即常说的Binary log(二进制日志)简称:Binlog。Binlog是记录所有数据库表结果变更以及表数据修改的二进制日志,而不会记录SELECT和SHOW这类的操作。Binlog日志以时间的形式进行记录,还会包含语句所执行的消耗时间。开启Binlog日志后,会有以下两个最为重要的使用场景:
① 主从复制:在主库中开启Binlog功能,这样主库就可以把Binlog传送给从库,从库在拿到Binlog后,就可以实现数据恢复,从而达到主从数据的一致性。
② 数据恢复:通过mysqlbinlog工具来恢复数据。
Binlog文件名默认为“主机名_binlog-序列号”格式,譬如:stu_binlog-000001,当然也可以在配置文件中指定名称。文件记录模式有 STATEMENT、ROW 和 MIXED 三种,具体的含义如下:
① ROW(row-based replication,RBR):日志中会记录每一行数据被修改的情况,然后在slave端对相同的数据进行修改。
优点:能清楚的记录每一个行数据的修改细节,并能完全实现主从数据同步和数据的恢复。
缺点:批量操作,会产生大量的日志,尤其是 alter table 会让日志暴涨。
② STATEMENT(statement-based replication,SBR):每一条被修改数据SQL都会记录到master的Binlog中,slave在复制的时候SQL进程会解析成和原来master端执行过的相同的SQL再次执行。简称SQL语句复制。
优点:日志量小,减少磁盘IO,提升存储和恢复速度
缺点:在某些情况下会导致主从数据不一致,譬如:last_insert_id()、now()等函数时
③ MIXED(mixed-based replication,MBR):以上两种模式的混合使用,一般会使用STATEMENT模式保存Binlog,对于STATEMENT模式无法复制的操作则使用ROW模式来保存Binlog,MySQL会根据执行的SQL语句来选择写入的模式
二、Binlog 文件结构
MySQL的Binlog文件中记录的是对数据库的各种修改操作,用来表示修改操作的数据结构是Log event,不同的修改操作对应不同的log event,比较常用的log event有:Query event、Row event、Xid event等。Binlog文件的内容就是各种log event的集合。
Binlog文件中的 Log event结构如下图:
timestamp 4字节 | 事件开始的执行时间 |
Event Type 1字节 |
指明该事件的类型 |
server_id 1字节 | 服务器的server ID |
Event size 4字节 | 该事件的长度 |
Next_log pos 4字节 | 固定4字节下一个event的开始位置 |
Flag 2字节 | 固定2字节 event flags |
Fixed part | 每种Event Type 对应结构体固定的结构部分 |
Variable part | 每种Event Type 对应结构体可变的结构部分 |
三、Binlog 写入机制
① 根据记录模式和操作出发 event 事件生成 log event (事件出发执行机制)
② 将事务执行过程中产生的 log event 写入到缓冲区,每个事务线程都偶有一个缓冲区
** Log Event 保存在一个 Binlog_cache_mngr 数据结构汇中,在该结构中有两个缓冲区,一个是 stmt_cache,用来存放不支持事务的信息;另一个 trx_cache,用于存放支持事务的信息。
③ 事务在提交阶段会将产生的 Log event 写入到外部的 Binlog 文件中
** 不同事务以串行方式将Log event 写入到 Binlog 文件中,所以一个事务包含的Log event 信息在 Binlog 文件中是连续的,中间不会插入其他事务的Log event。Binlog是引擎插件上层的功能,事务提交第一个就会调用Binlog的功能接口,然后再调用其他存储引擎的功能接口。所以先写 Binlog,然后在执行 InnoDB 的 redo log / undo log 和脏页刷新操作。
四、Binlog文件操作
1、查看Binlog的状态
方法一:show variables like "log_bin";方法二:show variables like "%log_bin%";
示例图:
Tip:默认情况下, log_bin 的值是 OFF 状态的哦
2、开启Binlog功能
正常情况下,我们使用如下命令即可搞定,但是这次好像不行了哦,需要我们去直接修改配置文件
mysql> set global log_bin=1;
ERROR 1238 (HY000): Variable 'log_bin' is a read only variable
遇到这种错误,我们接下来需要修改 my.cnf <MAC系统> 或者 my.ini<Windows系统> 配置文件,在 [mysqld] 下面增加 log-bin=mysql-bin 后,重启MySQL服务即可
3、查看都有哪些日志文件
方法一:show binary logs;方法二:show master logs;
![]() |
![]() |
4、查看当前正在操作的日志
show master status;
5、查看当前日志中有哪些事件
''' 查看当前日志中有哪些事件 '''show binlog events;''' 查看当前指定日志文件 '''show binlog events in 'mysql-bin.000005';
Tip:上面两个图只要细心的话就会发现,上一个事件的结束位置,就是下一个事件的开始位置,在后面恢复删除数据库的操作会用到这个哦
6、删除日志文件的三种方式
''' 删除指定的日志文件 '''
purge binary logs to 'mysql-bin.000003';''' 删除指定时间之前的文件 '''
purge binary logs before '2021-12-08 00:00:00';''' 清除所有日志文件 '''
reset master;
示例效果展示:
目前已经存在的日志文件,接下来对 "mysql-bin.000003" 日志文件进行删除
删除12月8号之前的文件和清除所有文件
7、查看和修改日志文件的有效期
''' 查看日志文件的有效期 '''
show variables like '%expire_logs_days%';''' 默认有效期为 0,表示 Binlog 日志的自动清理功能是没有启用的 '''''' 设置日志文件的有效期(启用日志自动清理功能),设置为2 表示超出2天,Binlog文件会自动删除 '''
set global expire_logs_days=2;
示例效果图:
8、查看日志文件的详细信息
Tip:如果想要查看日志文件的详细信息的话,我们需要离开MySQL的命令行,回到系统中的终端命令行来进行,找到安装MySQL时的路径下的 data 目录,会发现我们的日志文件
mysql-bin.000001接下来,我们在终端输入命令就可查看日志文件的详细信息了哦,里面包含了每条操作记录的详细时间,后面我们也可以通过这个时间来恢复删除的数据库
'''
在MySQL的 data 目录下执行下面的命令,来查看指定日志文件的详细信息可能有的小伙伴输入这个命令后,看不到详细的信息内容,这个时候就需要用 ls -la 来查看下
日志文件的权限,修改下权限即可哈
sudo chmod 权限 文件名
'''
mysqlbinlog 'mysql-bin.000001'
示例效果:
9、对删除数据库的恢复具体操作
删除数据库恢复的具体操作
数据库误删除后的两种恢复方法(一)日志操作篇相关推荐
- sdhc卡文件丢失常见原因和两种恢复方法
sdhc卡作为sd卡的继任者,主要有容量/速度等级高.支持文件格式和兼容的机器多等特征,通常被用于存储大量文件的设备中,比如松下照相机.但是sdhc卡跟其他存储设备相似,也会因各种原因导致重要数据丢失 ...
- win10专业版开机画面模糊_Win10系统登录背景变模糊的两种恢复方法
Win10系统开机到登录界面时背景总是很模糊,看着一点也不清晰,也不清楚哪里出现问题.即使恢复锁屏登录时设置了好看的登录背景也白搭,有什么办法能解决?其实旧版本中是清晰的也是微软刚改的,大家不妨通过下 ...
- u盘系统文件删除后的五种恢复方法
U盘是我们日常生活中使用较为普遍的移动存储设备,由于其便携性和易用性广受人们的欢迎.然而,在我们使用U盘的过程中,经常会出现误删文件的情况,例如本来要作为启动盘的u盘,误删里面的系统文件怎么办?当U盘 ...
- Linux系统密码忘记后的五种恢复方法
一. lilo引导 1. 在出现 lilo: 提示时键入 linux single Boot: linux single 2. 回车可直接进入linux单用户模式 3. vi /etc/passwd ...
- MySQL数据库root账户密码忘记两种处理方法转载
本文转自:http://blog.51cto.com/lizhenliang/1977881 方法1: 1.停止MySQL服务 1 # kill `cat /var/run/mysqld/mysqld ...
- mysql数据库密码转换_MySQL数据库root账户密码忘记两种处理方法转载
方法1: 1.停止MySQL服务# kill `cat /var/run/mysqld/mysqld.pid` 或者# pkill mysqld 2.创建一个密码赋值语句的文本文件 # vi mysq ...
- afudos备份bios不动_bios刷坏后的两种解决方法
通常主板新的BIOS可以修正旧版中BIOS的一些BUG,纠正对某些硬件和软件的兼容问题,添加新硬件的支持等等,所以有时我们需要刷新BIOS.但刷新主板BIOS实际上是存在一定风险的,虽然现在各主板厂商 ...
- mysql system账户密码忘记了_MySQL数据库root账户密码忘记两种处理方法(保有效)...
方法1: 1.停止MySQL服务 kill cat /var/run/mysqld/mysqld.pid 或者 pkill mysqld 2.创建一个密码赋值语句的文本文件 vi mysql-init ...
- [整理] C#调用SQLDMO.DLL时间数据库备份 / 还原。 (香神无涯) // C#实现SQLSERVER2000数据库备份还原的两种方法 (带进度条)...
/// <summary> /// 通过调用MSSQL的SQLDMO.DLL文件来实现备份数据库 /// 1.首先在在项目中引用SQLDMO.DLL文件. /// 2.在引用中的SQLDM ...
最新文章
- docker desktop使用入门
- Github | NumPy手写全部主流机器学习模型
- 在IOS开发中根据(id)sender获取UIButton的信息
- hbase java框架_Hadoop学习笔记—15.HBase框架学习(基础实践篇)
- 深度学习CTR模型最全演化图谱 [王喆观点]
- 测试:abstract class不允许出现在Angular依赖注入框架的providers区域内
- 861. Score After Flipping Matrix
- Java设计模式应用到数据库_Java设计模式在数据库编程中的应用研究
- Python XML解析器– ElementTree
- Java ResultSet教程
- 065_VFPage中CallBack回调函数的解释
- RAC连接时的2种方式Connect Time Failver和taf
- java session 永不过期_java设置配置session过期时间的方法
- iPhone模拟器突然开始运行非常慢
- 瑞幸咖啡上市被评“蒙眼狂奔”,CEO钱治亚回答:狂奔是真的,但并非蒙眼
- 8086的两种工作模式_8086系统中最小模式与最大模式两种工作方式的主要区别是什么?...
- Arcpy基础入门-4、arcpy工具进阶
- RADIUS协议 [收藏]
- python cv2画点_opencv-python鼠标画点:cv2.drawMarker()
- 【总结】线性代数的本质 - 2
热门文章
- 高可用性系统在大众点评的实践与经验
- 2017年2月12日GRE考试报名费用公布
- Mysql 通过 binlog日志 恢复数据(数据搞丢看过来)
- 什么是阿里云备案服务号及相关疑问解答
- java 视频系统_java web电影网视频点播系统
- nasm纠正性训练指南pdf_打开部队军事体能训练科学化的钥匙军人身体运动功能评估(EMPF)...
- 惠普激光打印机硒鼓加碳粉图解篇
- 100多个神奇网站,学习娱乐大全,总有一款适合你。。。
- 影视金曲-爱你一生嫌未够_昆仑奴插曲》
- matlab计算截断误差,Matlab相位截断误差仿真解说.doc