讲师中心 微信公众号
AI工具推荐 视频效率加速

SQL误删数据后如何快速恢复?

千墨姑娘_6047

千墨姑娘_6047

发布时间:2026-08-19 11:10:00

|

609人浏览过

|

来源于php中文网

原创

能恢复,但必须立刻停写、确认日志状态、按删除类型选路径——等一小时再动手,90%的binlog或WAL就已轮转覆盖;DELETE已提交但有ROW格式binlog是最常见可控场景;TRUNCATE/DROP无备份则基本不可逆,仅能依赖从库、缓存或文件扫描等低成功率补救。

sql误删数据后如何快速恢复?

能恢复,但必须立刻停写、确认日志状态、按删除类型选路径——等一小时再动手,90%的 binlog 或 WAL 就已轮转覆盖。

DELETE 语句已提交,但有 ROW 格式 binlog

这是最常见也最可控的场景。关键不是“能不能”,而是“有没有在误删前的日志片段”。

  • 先锁库:FLUSH TABLES WITH READ LOCK(优先在从库操作,主库慎用)
  • 确认日志可用:SHOW VARIABLES LIKE 'log_bin' 必须为 ON,SHOW VARIABLES LIKE 'binlog_format' 必须为 ROW
  • 定位时间点:用 mysqlbinlog --base64-output=decode-rows -v mysql-bin.000012 | grep -A 5 -B 5 "DELETE FROM orders" 找到误删附近日志
  • 生成反向 SQL:用 binlog2sql.py 加 --flashback 参数,直接输出对应 INSERT;或手动截取:mysqlbinlog --stop-datetime="2026-08-10 14:22:59" mysql-bin.000012 | mysql -u root -p your_db

注意:--stop-datetime 必须设在误删执行完成前一秒,多 1 秒就可能包含 DELETE 本身。

TRUNCATE 或 DROP 表/库,且无备份

这类操作不记行级变更,binlog/WAL 里只有 DDL 语句,无法还原数据内容,只能靠外部副本或文件级抢救。

  • 立刻检查是否有延迟从库:SHOW SLAVE STATUS\G 看 Seconds_Behind_Master,若 > 0 且未同步误删语句,可直接从从库导出
  • 查应用层缓存:Redis 是否存了近期全量快照?MQ 消息体是否含原始记录?ORM 的审计表(如 django_reversion)是否启用?
  • 物理文件扫描(仅限 MySQL InnoDB 且未重启):undrop-for-innodb 工具可尝试解析 ibdata1,但成功率取决于后续写入量和 buffer pool 是否被刷出
  • 云数据库(如阿里云 RDS)直接进控制台点「回溯实例」,选误删前时间点,5 分钟拉起只读库导出——这是唯一不依赖人工解析日志的兜底方案

别指望 ROLLBACK:TRUNCATE/DROP 是隐式提交,事务回滚无效。

SQL Server 在 FULL 恢复模式下误删

核心是“完整备份 + 日志链 + STOPAT”,缺一不可。简单说:没做过完整备份,日志备份再多也白搭。

  • 先验证:SELECT name, recovery_model_desc FROM sys.databases WHERE name = 'your_db',结果必须是 FULL
  • 找最近一次完整备份:RESTORE FILELISTONLY FROM DISK='full.bak' 确认逻辑文件名
  • 还原到临时库(避免影响生产):RESTORE DATABASE your_db_temp FROM DISK='full.bak' WITH NORECOVERY, MOVE 'your_db' TO '/temp/your_db.mdf', MOVE 'your_db_log' TO '/temp/your_db.ldf'
  • 重放日志到误删前一秒:RESTORE LOG your_db_temp FROM DISK='log_20260810.trn' WITH RECOVERY, STOPAT='2026-08-10 14:22:59'
  • 从临时库抽数据:INSERT INTO your_db.dbo.orders SELECT * FROM your_db_temp.dbo.orders WHERE id IN (1001,1002),避免全表覆盖

注意:STOPAT 时间必须精确到秒,且日志备份链不能中断——中间缺失任意一个 .trn 文件,就只能退回到上一个完整备份点。

PostgreSQL WAL 归档开启但没做基础备份

WAL 本身不包含全量数据,只记录变更。没有 pg_basebackup 生成的基础备份,PITR 就像想用发票报销却没开发票一样——没起点,所有日志都无从锚定。

  • 立即停止数据库:pg_ctl stop -m fast,防止 checkpoint 刷脏页覆盖旧 WAL
  • 检查归档状态:SHOW wal_level 应为 replica 或 logical,SHOW archive_mode 应为 on
  • 若无基础备份:只能尝试 pg_waldump 手动解析最近几个 WAL 段,提取误删前的 INSERT/UPDATE,但需知道具体表 OID 和事务 ID,实操难度极高
  • 若有基础备份:用 pg_basebackup 拉起新集群,再配置 recovery.conf(或 postgresql.conf 中的 recovery_target_time)指向误删前时间点

最容易被忽略的是:WAL 归档脚本是否真正在运行?archive_command 返回 0 不代表成功,得去归档目录看文件是否真实生成并完整。

本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

热门AI工具

更多
码上飞
码上飞 Hot

一款基于自然语言的AI应用开发平台,可根据用户描述自动生成应用程序,帮助个人和团队快速完成应用原型与开发。

DeepSeek

DeepSeek是一款面向对话、写作、编程和推理场景的AI大模型工具。

豆包大模型

豆包大模型是一款由字节跳动推出的企业级大语言模型服务平台。

超级简历WonderCV

一款AI办公效率工具,主要用于免费求职简历模版下载制作,应届生职场人必备简历制作神器,适合需要提升相关任务效率的用户。

WorkBuddy

一款AI办公效率工具,主要用于腾讯云推出的AI原生桌面智能体工作台,适合需要提升相关任务效率的用户。

讯飞智作

讯飞智作是一款AI视频创作工具,AI文本配音工具,数字人课程、营销视频制作。

讯飞智文

一款面向学习和办公场景的AI文档创作工具,可辅助生成PPT与Word文档,提高资料整理和内容制作效率。

UpDream
UpDream Hot

一款AI视频创作工具,主要用于哔哩哔哩推出的自研AI视频创作工具,适合需要提升相关任务效率的用户。

蛙蛙写作

一款AI论文写作工具,主要用于超级AI智能写作助手,适合需要提升相关任务效率的用户。

相关专题

更多
mysql修改数据表名
mysql修改数据表名

MySQL修改数据表:1、首先查看数据库中所有的表,代码为:‘SHOW TABLES;’;2、修改表名,代码为:‘ALTER TABLE 旧表名 RENAME [TO] 新表名;’。php中文网还提供MySQL的相关下载、相关课程等内容,供大家免费下载使用。

2533

2023.06.20

MySQL创建存储过程
MySQL创建存储过程

存储程序可以分为存储过程和函数,MySQL中创建存储过程和函数使用的语句分别为CREATE PROCEDURE和CREATE FUNCTION。使用CALL语句调用存储过程智能用输出变量返回值。函数可以从语句外调用(通过引用函数名),也能返回标量值。存储过程也可以调用其他存储过程。php中文网还提供MySQL创建存储过程的相关下载、相关课程等内容,供大家免费下载使用。

1519

2023.06.21

mongodb和mysql的区别
mongodb和mysql的区别

mongodb和mysql的区别:1、数据模型;2、查询语言;3、扩展性和性能;4、可靠性。本专题为大家提供mongodb和mysql的区别的相关的文章、下载、课程内容,供大家免费下载体验。

895

2023.07.18

mysql密码忘了怎么查看
mysql密码忘了怎么查看

MySQL是一个关系型数据库管理系统,由瑞典MySQL AB 公司开发,属于 Oracle 旗下产品。MySQL 是最流行的关系型数据库管理系统之一,在 WEB 应用方面,MySQL是最好的 RDBMS 应用软件之一。那么mysql密码忘了怎么办呢?php中文网给大家带来了相关的教程以及文章,欢迎大家前来阅读学习。

3612

2023.07.19

mysql创建数据库
mysql创建数据库

MySQL是一个关系型数据库管理系统,由瑞典MySQL AB 公司开发,属于 Oracle 旗下产品。MySQL 是最流行的关系型数据库管理系统之一,在 WEB 应用方面,MySQL是最好的 RDBMS 应用软件之一。那么mysql怎么创建数据库呢?php中文网给大家带来了相关的教程以及文章,欢迎大家前来阅读学习。

6228

2023.07.25

mysql默认事务隔离级别
mysql默认事务隔离级别

MySQL是一种广泛使用的关系型数据库管理系统,它支持事务处理。事务是一组数据库操作,它们作为一个逻辑单元被一起执行。为了保证事务的一致性和隔离性,MySQL提供了不同的事务隔离级别。php中文网给大家带来了相关的教程以及文章欢迎大家前来学习阅读。

1319

2023.08.08

sqlserver和mysql区别
sqlserver和mysql区别

SQL Server和MySQL是两种广泛使用的关系型数据库管理系统。它们具有相似的功能和用途,但在某些方面存在一些显著的区别。php中文网给大家带来了相关的教程以及文章,欢迎大家前来学习阅读。

6491

2023.08.11

mysql忘记密码
mysql忘记密码

MySQL是一种关系型数据库管理系统,关系数据库将数据保存在不同的表中,而不是将所有数据放在一个大仓库内,这样就增加了速度并提高了灵活性。那么忘记mysql密码我们该怎么解决呢?php中文网给大家带来了相关的教程以及其他关于mysql的文章,欢迎大家前来学习阅读。

5582

2023.08.14

Postman身份认证怎么配置
Postman身份认证怎么配置

本专题从实际API接口调试场景出发,讲解Postman身份认证的完整配置流程,包括常见认证协议介绍、授权参数设置、访问令牌填写、OAuth 2.0授权及认证失败排查,帮助用户正确完成接口授权与访问验证。

0

2026.11.06

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
热门推荐
/
最新课程
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn