MYSQL数据库误删除数据处理
MYSQL数据库误删除怎么办
MYSQL数据库中数据的误删除恢复,网上的教程大部分都是基于binlog日志的恢复。而在未开启binlog日志的情况下,其实数据也是可以恢复的,不过这种条件下需要一些特殊手段进行恢复。这里我们简单介绍一下binlog日志开启和未开启时的恢复方案
一、开启binlog时
binlog日志文件,是记录所有数据库表结构变更(例如CREATE、ALTER TABLE…等操作)以及表数据修改(INSERT、UPDATE、DELETE…等操作)的二进制日志,会在日志中详细记录数据库表结构变更详情及表数据修改的详细内容。
如果没有开启binlog日志功能,运行此语句则会显示
ERROR 1381 (HY000): You are not using binary logging
找到binlog日志文件之后,可以使用MYSQL自带的mysqlbinlog工具查看binlog日志
mysql>mysqlbinlog /mysql/data/mysql-bin.000001
/*!50530 SET @@SESSION.PSEUDO_SLAVE_MODE=1*/;
/*!50003 SET @OLD_COMPLETION_TYPE=@@COMPLETION_TYPE,COMPLETION_TYPE=0*/;
DELIMITER /*!*/;
# at 4
#210802 15:16:11 server id 1918 end_log_pos 123 CRC32 0x6b83e18a Start: binlog v 4, server v 5.7.32-log created 210802 15:16:11 at startup
ROLLBACK/*!*/;
BINLOG '
u5sHYQ9+BwAAdwAAAHsAAAAAAAQANS43LjMyLWxvZwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAC7mwdhEzgNAAgAEgAEBAQEEgAAXwAEGggAAAAICAgCAAAACgoKKioAEjQA
AYrhg2s=
'/*!*/;
# at 123
#210802 15:16:11 server id 1918 end_log_pos 154 CRC32 0xeb0d0649 Previous-GTIDs
# [empty]
# at 154
#210802 15:16:49 server id 1918 end_log_pos 219 CRC32 0xfa8ab1ff Anonymous_GTID last_committed=0 sequence_number=1 rbr_only=no
SET @@SESSION.GTID_NEXT= 'ANONYMOUS'/*!*/;
# at 219
#210802 15:16:49 server id 1918 end_log_pos 316 CRC32 0x28719977 Query thread_id=2 exec_time=0 error_code=0
SET TIMESTAMP=1627888609/*!*/;
SET @@session.pseudo_thread_id=2/*!*/;
SET @@session.foreign_key_checks=1, @@session.sql_auto_is_null=0, @@session.unique_checks=1, @@session.autocommit=1/*!*/;
SET @@session.sql_mode=1436549152/*!*/;
SET @@session.auto_increment_increment=1, @@session.auto_increment_offset=1/*!*/;
/*!\C utf8mb4 *//*!*/;
SET @@session.character_set_client=45,@@session.collation_connection=45,@@session.collation_server=8/*!*/;
SET @@session.lc_time_names=0/*!*/;
SET @@session.collation_database=DEFAULT/*!*/;
DROP DATABASE `test1`
/*!*/;
# at 316
#210804 13:38:30 server id 1918 end_log_pos 339 CRC32 0xa510ff89 Stop
SET @@SESSION.GTID_NEXT= 'AUTOMATIC' /* added by mysqlbinlog */ /*!*/;
DELIMITER ;
# End of log file
/*!50003 SET COMPLETION_TYPE=@OLD_COMPLETION_TYPE*/;
/*!50530 SET @@SESSION.PSEUDO_SLAVE_MODE=0*/;
输出的信息中心,# at 4 即为事务的开始偏移值
另外可以添加参数’-s’, 在输出中只显示语句
mysql>mysqlbinlog -s /mysql/data/mysql-bin.000001
/*!50530 SET @@SESSION.PSEUDO_SLAVE_MODE=1*/;
/*!50003 SET @OLD_COMPLETION_TYPE=@@COMPLETION_TYPE,COMPLETION_TYPE=0*/;
DELIMITER /*!*/;
ROLLBACK/*!*/;
# [empty]
SET @@SESSION.GTID_NEXT= 'ANONYMOUS'/*!*/;
SET TIMESTAMP=1627888609/*!*/;
SET @@session.pseudo_thread_id=999999999/*!*/;
SET @@session.foreign_key_checks=1, @@session.sql_auto_is_null=0, @@session.unique_checks=1, @@session.autocommit=1/*!*/;
SET @@session.sql_mode=1436549152/*!*/;
SET @@session.auto_increment_increment=1, @@session.auto_increment_offset=1/*!*/;
/*!\C utf8mb4 *//*!*/;
SET @@session.character_set_client=45,@@session.collation_connection=45,@@session.collation_server=8/*!*/;
SET @@session.lc_time_names=0/*!*/;
SET @@session.collation_database=DEFAULT/*!*/;
DROP DATABASE `test1`
/*!*/;
SET @@SESSION.GTID_NEXT= 'AUTOMATIC' /* added by mysqlbinlog */ /*!*/;
DELIMITER ;
# End of log file
/*!50003 SET COMPLETION_TYPE=@OLD_COMPLETION_TYPE*/;
/*!50530 SET @@SESSION.PSEUDO_SLAVE_MODE=0*/;
如果误删除丢失的数据量不多,可以使用mysql>mysqlbinlog -s /mysql/data/mysql-bin.000001 > binlog.txt
命令将语句保存到文件中,在文件中搜索insert语句,找到丢失数据。
若整个数据库或者表被删除,丢失数据量较多,可以使用mysqlbinlog工具,直接从binlog日志还原全部数据。
先查看binlog日志,找到事务的起始偏移值,和误操作事务前的偏移值,设置–start-position参数为事务起始偏移值,–stop-position为误操作事务开始前一个事务的偏移值
mysqlbinlog --start-position=4 --stop-position=154 /mysql/data/mysql-bin.000001 | mysql -uroot -p123456
根据binlog日志文件名称id,从小到大依次运行binlog日志文件,完成数据恢复
二、未开启binlog日志
当数据库未开启binlog日志,发生数据丢失的情况时,不要慌,尽量保证环境的原始性,不要在数据库所在分区继续写入数据,不要常使用旧的备份去还原,第一时间保护现场环境。
如果是drop了表或数据库,那么表文件将会被全部删除,需要从存储介质底层去打捞数据表页,直接解析数据表页,提取出数据记录,再写入到新的数据库中
如果是delete了部分数据记录,那么要保证此数据表不再有新的数据写入。被删除的这部分数据记录起始还存在于表文件中,只是被数据库屏蔽,可以通过底层打捞的方式,突破数据库的屏蔽,从表文件中打捞出这些被删除的数据记录。
如果是truncate了数据表,那么这个时候虽然表文件看起来还存在,但实际上表文件已经被截断,部分数据表页已经被释放至文件系统的空闲空间,同样要保证数据库所在分区的无数据写入,从存储介质底层去打捞数据表页,解析数据表页,提取出数据记录,再写入到新的数据库中
无binlog日志时的mysql删除数据恢复较为复杂,如有需要,可以留言或私信
MYSQL数据库误删除数据处理相关推荐
- Mysql数据库误删除数据恢复成功
Mysql数据库误删除数据恢复成功 [客户描述] 客户在网站管理后台误操作把"报表"和"代理"数据删除,因数据库只有2月份的备份,丢失近三个月的数据. [数据库 ...
- 关于mysql数据库误删除后的数据恢复操作说明
在日常运维工作中,对于mysql数据库mysql数据库mysql数据库的备份是至关重要的!数据库对于网站的重要性使得我们对mysql数据的管理不容有失! 然后,是人总难免会犯错误,说不定哪天大脑短路了 ...
- 【数据库数据恢复】MySQL数据库误删除未备份的数据恢复案例
MySQL数据库属于关系型数据库.SQL是一种用于操作关系型数据库的结构化语言.关系型数据库就是指在关系模型的基础上建立起来的数据库,是一种借助了集合代数等一些数学方法和数学概念处理数据的数据库. M ...
- MySQL 数据库误删除后的数据恢复操作说明
在日常运维工作中,对mysql数据库的备份是万分重要的,以防在数据库表丢失或损坏情况出现,可以及时恢复数据. 线上数据库备份场景: 每周日执行一次全量备份,然后每天下午1点执行MySQLdump增量备 ...
- MYSQL数据库误删除恢复笔记收藏
原贴:http://blog.csdn.net/octobereva/archive/2007/08/03/1724424.aspx 今天不小心用mysql front把一个数据表给删除了.立即去网上 ...
- mysql数据库误删后能恢复吗_MySQL 数据库误删除后的数据恢复
MySQL 数据库误删除后的数据恢复 MySQL 数据库误删除后的数据恢复 在日常运维工作中,对于数据库的备份是至关重要的!数据库对于网站的重要性使得我们对 MySQL 数据库的管理不容有失! 然而是 ...
- 误删阿里云mysql恢复数据恢复_mysql数据库误删除后的数据恢复操作说明-阿里云开发者社区...
在日常运维工作中,对于mysql数据库的备份是至关重要的!数据库对于网站的重要性使得我们对mysql数据的管理不容有失! 然后,是人总难免会犯错误,说不定哪天大脑短路了来个误操作把数据库给删除了,怎么 ...
- mysql数据库的后_MySQL数据库误删后的回复技巧
在日常运维工作中,对于数据库的备份是至关重要的!数据库对于网站的重要性使得我们对 MySQL 数据库的管理不容有失!然而是人总难免会犯错误,说不定哪天大脑短路了,误操作把数据库给删除了,怎么办? 下面 ...
- mysql数据库恢复操作_MySQL 数据库误删后的数据该如何恢复操作?
原标题:MySQL 数据库误删后的数据该如何恢复操作? 纯手工打造每一篇开源资讯与技术干货,数十万程序员和Linuxer已经关注. 在日常运维工作中,对于数据库的备份是至关重要的!数据库对于网站的重要 ...
最新文章
- LIVE预告 | 哈佛大学CS博士徐莉莉:用博弈论保护野生动物
- Python练习题(day1)
- 大道至简第四章阅读笔记
- python图片超链接_python自动获得网页上的所有超链接并全部截图
- IOS学习之多线程(2)--创建线程
- shell技巧(sed 断句、读取指定行) 【ZT】
- JPush极光推送Java服务器端API
- python的egg包的安装和制作]
- 如何在 macOS 上安装Axure RP
- 阿里云ecs概念介绍
- 期货和股票平仓时成本计价的区别(期货和股票平仓时成本计价的区别是什么)
- 中高端时代趁势而来,本就艰难的酒店企业如何顺势而为
- 玩客云刷Armbian详细教程
- Ubuntu16.04下gdb工具gef的安装 wget命令详解
- 《一百岁感言》 杨绛
- OSI七层模型就这???
- wmiprvse.exe cpu占用高怎么解决
- 医共体HIS系统应该具有哪些特色功能
- 【全】最简单安装纯净版win10系统和删除双系统
- python爬取大量数据报错_【Python】Python爬取FAERS数据报错
热门文章
- Microsoft Access database engine 2010 (Chinese (Simplif... 您不能安装64位版本的Microsoft Access 2010 数据库引擎
- SQL语句 清空数据表
- 使用深澜宽带认证客户端的问题及解决办法
- 网络入侵检测论文阅读1
- 详解Redis的数据结构
- centos7搭建socket5代理服务器
- kali Linux换源
- (五)实际项目中分布式系统设计涉及算法总结
- linux 阵列命令,Adaptec raid卡命令行管理
- 基于WebRtc在H5视频聊天、视频教学、视频会议、视频直播、白板互动低延时方案