如何恢复刚刚删除的行在mysql?

u1ehiz5o  于 2023-11-16  发布在  Mysql
关注(0)|答案(9)|浏览(146)

如果所有数据被意外删除,是否可以将表恢复到上次的数据。

ycl3bljg

ycl3bljg1#

还有另一种解决方案,如果您的服务器上有活动的二进制日志,则可以使用mysqlbinlog
生成一个sql文件

mysqlbinlog binary_log_file > query_log.sql

字符串
然后搜索你丢失的行。如果你没有激活它,没有其他解决方案。下次做备份。

weylhg0b

weylhg0b2#

有点.使用phpMyAdmin我只是删除了一行太多.但我抓住了它之前,我继续和大部分的数据从删除确认消息.我能够重建记录.但确认消息截断了一些文字评论.
比我更了解phpMyAdmin的人可能知道一个设置,这样你就可以得到一个更完整的删除确认消息的回声。有了一个完整的删除消息,如果你放慢速度并发现错误,你可以恢复整个记录。
(PS此应用程序还发送创建记录的提交的电子邮件。如果客户端有副本,我将能够完全恢复记录)

5lwkijsr

5lwkijsr3#

正如Mitch所说,备份数据是最好的方法。
然而,根据情况或所使用的DB服务器,可能会部分提取丢失的数据。在大多数情况下,如果没有任何备份,您就不走运了。

2nbm6dog

2nbm6dog4#

对不起,但这是不可能的,除非你做了备份文件之前。
编辑:实际上这是可能的,但它变得非常棘手,如果数据不是真的,真的很重要,你就不应该考虑它。你看:当数据从计算机中删除时,它仍然保留在磁盘上的同一位置,只有其扇区被标记为空。因此数据保持完整,除非它被新数据覆盖。有几个程序设计用于此目的,有公司谁专门从事数据恢复,虽然它们相当昂贵。

guykilcj

guykilcj5#

对于InnoDB表,Percona has a recovery tool which may help。它远非故障安全或完美,并且在意外删除后停止MySQL服务器的速度有很大影响。如果你足够快,更改可以恢复相当多的数据,但恢复 * 所有 * 数据几乎是不可能的。
当然,适当的每日备份,binlog,可能还有一个复制从站(这对意外删除没有帮助,但在硬件故障的情况下确实有帮助)是要走的路,但是这个工具可以让你在没有这些东西的时候尽可能多地保存数据。

rekjcdws

rekjcdws6#

不,这是不可能的。唯一的解决办法是定期备份。这是非常重要的。

8cdiaqws

8cdiaqws7#

如果你在默认配置下运行服务器,去获取你的备份(你有备份,对吗?)-通常,数据库不会保留你的数据的以前版本,或者修改的版本:只有当前状态。
(或者,如果您通过自定义前端删除了数据,很可能前端实际上并没有发出删除命令:许多表都有一个is_deleted字段或类似字段,这只是由前端切换。请注意,这是前端应用程序中实现的“软删除”-在这种情况下,数据实际上并没有被删除;如果您实际上发出了DELETETRUNCATE或类似的SQL命令,则这不适用。)

yqkkidmi

yqkkidmi8#

如果你使用binlogbinlog_format=ROW,这两个都是mysql 8.0的默认值,
并且没有在可用binlog文件的生命周期内完成完整备份,即在binlog_expire_logs_seconds的配置时间之后完成mysqldump,以执行建议的Point-in-Time Recovery
然后你仍然可以尝试恢复删除的行,只使用一个binlog文件,该文件覆盖了这些删除的事件,并在https://github.com/lefred/MyUndelete/issues/5中使用这种方法将它们转换为插入事件:
它可以用http://thenoyes.com/littlenoise/?p=307中的原始awk脚本替换事件类型:

BEGIN { regexp = "$^" }

/^BINLOG/ {
  print;
  getline;
  regexp = "^" substr($0, 1, 5) "[CSiy][ABCD]" substr($0, 8, 4);
}

$0 ~ regexp {
  n = $0;
  $0 = substr(n, 1, 5)
  $0 = $0 substr("BRhx", index("CSiy", substr(n, 6, 1)), 1)
  $0 = $0 substr("4567", index("ABCD", substr(n, 7, 1)), 1)
  $0 = $0 substr(n, 8) ;
}

{ print; }

个字符

jbose2ul

jbose2ul9#

如果您使用MyISAM表,则可以恢复您删除的任何数据,只需
打开文件:mysql/data/[your_db]/[your_table].MYD
用任意文本编辑器

相关问题