MySQL误删数据救命指南:必收藏

本文涉及的产品
云数据库 RDS MySQL Serverless,0.5-2RCU 50GB
简介: 首先看下mysql误删数据排名最前的几种是:1.误删文件2.误删库、表3.错误全表删除 / 更新4.升级操作失误都来看看你命中过几个,hoho。
+关注继续查看
img_8f5715855c39bb2273317942e0e685fd.png

首先看下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吧。

相关实践学习
基于CentOS快速搭建LAMP环境
本教程介绍如何搭建LAMP环境,其中LAMP分别代表Linux、Apache、MySQL和PHP。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助     相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
相关文章
|
2天前
|
SQL 关系型数据库 MySQL
Mysql快速导入数百万条数据,亲测有效
Mysql快速导入数百万条数据,亲测有效
10 0
|
3天前
|
缓存 关系型数据库 MySQL
MYSQL数据优化常用配置参数
MYSQL数据优化常用配置参数
31 0
|
3天前
|
存储 NoSQL 关系型数据库
MySQL数据库C接口的数据插入操作示例
MySQL数据库C接口的数据插入操作示例
|
3天前
|
关系型数据库 MySQL
MySQL中数据插入与主键冲突解决方案
MySQL中数据插入与主键冲突解决方案
14 0
|
3天前
|
SQL 关系型数据库 MySQL
由于Flink CDC在同步MySQL数据时,没有正确地处理并行度和server-id导致的
由于Flink CDC在同步MySQL数据时,没有正确地处理并行度和server-id导致的
22 1
|
3天前
|
Java 关系型数据库 MySQL
|
3天前
|
SQL 关系型数据库 MySQL
Mysql数据库 4.SQL语言 DQL数据查询语言 查询
Mysql数据库 4.SQL语言 DQL数据查询语言 查询
7 0
|
3天前
|
SQL 存储 关系型数据库
Mysql数据库 1.SQL语言分类 DDL.数据定义语言
Mysql数据库 1.SQL语言分类 DDL.数据定义语言
38 0
|
18天前
|
关系型数据库 MySQL 5G
如何给MySQL 数据瘦身
如何给MySQL 数据瘦身
14 0
|
18天前
|
SQL 安全 关系型数据库
MySQL数据维护和灾难恢复
MySQL数据维护和灾难恢复
8 0
推荐文章
更多