必收藏!MySQL误删数据救命指南
本篇文章向大家介绍《必收藏!MySQL误删数据救命指南》,主要包括MySQL、数据库、运维、后端、程序员,具有一定的参考价值,需要的朋友可以参考一下。

作者:年底卖茶冲KPI / 老叶茶馆
出处:https://yq.aliyun.com/article...
首先看下mysql误删数据排名最前的几种是:
1.误删文件
2.误删库、表
3.错误全表删除 / 更新
4.升级操作失误
都来看看你命中过几个,hoho。
简单说下我亲手造的一个大事故吧。
那大概是一个春暖花开的季节,我的内心是激动澎湃的,因为已经安排了休假计划。在这前几天,已经把一个新项目的数据库环境都部署好了,包括自动化备份。
等我美美的出去玩的时候,悲剧发生了,业务要求进行数据回滚,但发现备份文件不可用,原因是 备份时指定的字符集和表字符集不一致。我勒个擦,原来该项目采用新的字符集,但是我没有认真检查确认并修改备份脚本,结果导致备份失效。最后,因为这个事,当季度绩效结果被降档,boss也为此背锅~
好吧,回到正题,先说几点我平时预防误操作导致文件/数据丢失不成熟的建议:
1.欲删除文件时,将rm命令改成mv,可在系统层面将rm命令做个alias(或参考 Windows / Mac OSX做法,删除文件时先进回收站)。
删除数据库、表时,不要用drop命令,而是rename到一个专用归档库里;
2.删除表中数据时,不要直接用delete或truncate命令,尤其是truncate命令,目前不支持事务,无法回滚。
3.用delete命令删除数据时,应当先显式开启事务,这样误操作时,还有机会进行回滚。
4.要大批量删除数据时,可以将这些数据insert...select到一个新表,确认无误后再删除。或者反其道行之,把要保留的数据写到新表,然后将表重命名对掉。
5.执行重要命令之前,先准备好相关命令,再三确认无误才之行,对于新鸟而言,最好请你的boss坐你旁边镇场几次,否则极有可能会连累大家~
以上几条,也是我自己奉行的原则。总之,要时刻保持对线上生产环境的敬畏之心。虽说现在大部分操作可以靠平台来完成了,但平台也不是万能的,不也发生过平台本身的缺陷造成数据丢失、代码回滚、部署失误等事故嘛,我就不点名了。
做好备份,不管是物理备份还是逻辑备份!
做好备份,不管是物理备份还是逻辑备份!
做好备份,不管是物理备份还是逻辑备份!
重要的事情说三遍都不嫌多。
说完预防措施,我们再说万一发生误操作时,怎么以最快速度进行补救。 我们分别列举几种常见的情况:
1.执行DROP DATABASE / DROP TABLE命令误删库表,如果碰巧采用共享表空间模式的话,还有恢复的机会。如果没有,请直接从备份文件恢复吧。神马,你连备份文件都没有?那麻烦退出DBA届吧,一个连备份都懒得做的人,不配成为DBA的。
2.接上,采用共享表空间模式下,误删后立刻杀掉(kill -9)mysql相关进程(mysqld_safe、mysqld),然后尝试从ibdataX文件中恢复数据。
3.误删除正在运行中的MySQL表ibd或ibdataX文件。请立即申请对该实例进行维护,当然,不是指把实例关闭,而是把业务暂停,或者把该实例从线上环境摘除,不再写入新数据,然后利用linux系统的proc文件特点,把该ibd文件从内存中拷出来,再进行恢复,因为此时mysqld实例在内存中是保持打开该文件的,切记这时不要把mysqld实例关闭了。
4.接上,把复制出来的ibdataX或ibd文件拷贝回datadir后,重启mysqld进入recovery模式,innodb_force_recovery 选项从 0 - 6 逐级测试,直至能备份出(整个实例或单表的)所有数据后,再重建实例(或单表),恢复数据。
5.未开启事务模式下,执行delete误删数据。意识到后立即将mysqld(以及mysqld_safe)进程杀掉(kill -9),不要任何犹豫,然后再用工具将表空间数据读取出来。因为执行delete删除后,实际数据并没被物理清除,只是先打上deleted-mark标签,后续再统一清理,因此还有时间差。
5.执行truncate误清整表。如果没使用共享表空间模式的话,基本别想了,走备份恢复+binlog吧。
6.执行不带where条件的update,或者update错数据。也别费劲了,走备份恢复+binlog吧。
终于介绍完啦!小伙伴们,这篇关于《必收藏!MySQL误删数据救命指南》的介绍应该让你收获多多了吧!欢迎大家收藏或分享给更多需要学习的朋友吧~golang学习网公众号也会发布数据库相关知识,快来关注吧!
Mysql性能优化与测试
- 上一篇
- Mysql性能优化与测试
- 下一篇
- 数据库密码配置项都不加密?心也太大了吧!
-
- 朴实的战斗机
- 太全面了,收藏了,感谢博主的这篇博文,我会继续支持!
- 2023-03-04 14:14:47
-
- 糟糕的唇彩
- 受益颇多,一直没懂这个问题,但其实工作中常常有遇到...不过今天到这,帮助很大,总算是懂了,感谢作者大大分享文章内容!
- 2023-03-02 18:41:33
-
- 专注的白开水
- 这篇博文太及时了,细节满满,很有用,已加入收藏夹了,关注作者大大了!希望作者大大能多写数据库相关的文章。
- 2023-02-12 05:56:04
-
- 数据库 · MySQL | 25分钟前 |
- MySQL utf8mb4 排序规则变化会影响唯一索引吗
- 431浏览 收藏
-
- 数据库 · MySQL | 1小时前 |
- MySQL 联合索引中间列范围条件为什么影响后列
- 454浏览 收藏
-
- 数据库 · MySQL | 2小时前 |
- MySQL EXPLAIN ANALYZE 如何观察临时表和排序开销
- 196浏览 收藏
-
- 数据库 · MySQL | 5小时前 |
- MySQL 分区表查询没走分区裁剪怎么办
- 134浏览 收藏
-
- 数据库 · MySQL | 6小时前 |
- MySQL 死锁日志看不懂时先找哪两条事务
- 467浏览 收藏
-
- 数据库 · MySQL | 7小时前 |
- MySQL JSON 数组字段如何建立可用索引
- 482浏览 收藏
-
- 数据库 · MySQL | 12小时前 | MySQL · rank · 窗口函数 · ROW_NUMBER · DENSE_RANK ·
- MySQL 窗口函数如何取每组排名第二的记录
- 478浏览 收藏
-
- 数据库 · MySQL | 1天前 |
- MySQL 在线 ALTER TABLE 前怎么判断是否会重建表
- 339浏览 收藏
-
- 前端进阶之JavaScript设计模式
- 设计模式是开发人员在软件开发过程中面临一般问题时的解决方案,代表了最佳的实践。本课程的主打内容包括JS常见设计模式以及具体应用场景,打造一站式知识长龙服务,适合有JS基础的同学学习。
- 543次学习
-
- GO语言核心编程课程
- 本课程采用真实案例,全面具体可落地,从理论到实践,一步一步将GO核心编程技术、编程思想、底层实现融会贯通,使学习者贴近时代脉搏,做IT互联网时代的弄潮儿。
- 516次学习
-
- 简单聊聊mysql8与网络通信
- 如有问题加微信:Le-studyg;在课程中,我们将首先介绍MySQL8的新特性,包括性能优化、安全增强、新数据类型等,帮助学生快速熟悉MySQL8的最新功能。接着,我们将深入解析MySQL的网络通信机制,包括协议、连接管理、数据传输等,让
- 500次学习
-
- JavaScript正则表达式基础与实战
- 在任何一门编程语言中,正则表达式,都是一项重要的知识,它提供了高效的字符串匹配与捕获机制,可以极大的简化程序设计。
- 487次学习
-
- 从零制作响应式网站—Grid布局
- 本系列教程将展示从零制作一个假想的网络科技公司官网,分为导航,轮播,关于我们,成功案例,服务流程,团队介绍,数据部分,公司动态,底部信息等内容区块。网站整体采用CSSGrid布局,支持响应式,有流畅过渡和展现动画。
- 485次学习
-
- H2O EvalGPT
- H2O EvalGPT是H2O.ai推出的开源LLM评估平台,提供详细的大模型性能排行榜、行业特定基准测试及A/B测试功能,助您快速选择最适合项目的高性能大语言模型。
- 107次使用
-
- LMArena
- LMArena是加州大学伯克利分校推出的AI模型匿名评测平台。通过盲测投票机制,用户可对比不同大模型回答并生成实时排行榜,助力开发者优化模型及用户选择最佳AI工具。
- 23次使用
-
- OpenCompass
- OpenCompass是上海AI实验室推出的开源大模型评测平台,提供CompassKit、CompassHub和CompassRank三大核心组件,支持LLM及多模态模型的一站式标准化评估与排行榜查询。
- 35次使用
-
- AGI-Eval
- AGI-Eval是由上海交大等高校联合发布的大模型评测社区,提供公正透明的LLM能力榜单、多领域评测集及Data Studio数据服务,助力AI模型性能评估与NLP科研开发。
- 23次使用
-
- SuperCLUE
- SuperCLUE是权威的中文大语言模型综合评测基准,涵盖语言理解、知识应用、AI Agent智能体及安全性等12项核心能力。通过多轮对话与客观测试,定期发布榜单与技术报告,为模型研发、优化及行业选型提供科学依据。
- 260次使用
-
- MySQL 明明加了索引,为什么查询还是很慢?先查这 6 个点
- 2026-06-27 374浏览
-
- 接口返回的数据和数据库不一致怎么办?按数据生命周期排查
- 2026-06-27 398浏览
-
- golang MySQL实现对数据库表存储获取操作示例
- 2022-12-22 499浏览
-
- golang 基于 mysql 简单实现分布式读写锁
- 2023-01-07 384浏览
-
- 详解如何利用GORM实现MySQL事务
- 2023-01-07 184浏览

