2022-04-20 21:30:01 星期三
下午做IDEA本地调试,莫名其妙把云服务器上的数据删掉了?现在也没找到原因,多次检查本地项目,连接的确实是本地数据库,如何会操作到我的服务器上的数据呢?花了一下午终于把数据找回来了(前面发的两篇博客,这都是用Markdown写的,找不回来的话得心疼好久),在此记录一下我恢复数据的方法。
第一步,在MySQL数据库中检查是否已打开 binlog(一般情况下都是默认打开的)。代码如下:
show variables like '%log_bin%';
如图所示,log_in 的 value 值为 ON 说明 binlog 已打开(如果你的值为 OFF,那么这篇文章将无法给你任何帮助)。
查看binlog存放日志文件目录:
show variables like '%datadir%';
如图所示,/www/server/data/ 即为我的日志文件目录。
第二步,进入云服务器或本地的binlog文件目录,找出日志文件(我的为云服务器)。
如图,mysql-bin-000009 即为我需要的日志文件。
第三步,进入 MySQL 安装目录下的 bin 文件夹,使用 bin 下 MySQL 自带的 mysqlbinlog 工具查看日志文件。
代码如下:
./mysqlbinlog --no-defaults --database=blog --start-datetime="2022-4-15 14:00:00" --stop-datetime="2022-4-20 18:00:00" /www/server/data/mysql-bin.000009 | grep t_blog > hyc.txt
代码说明:查询出 mysql-bin.000009 日志文件中记录的从 2022-4-15 14:00:00 到 2022-4-20 18:00:00 有关 t_blog 表的所有数据操作并将这些数据输出保存到 hyc.txt 文件中。
第四步,打开 hyc.txt,可以看到符合上述条件的所有信息,根据这些信息可以查出删除操作发生的全过程。根据这些信息可以找到在删除操作发生之前的数据,然后利用这些数据通过 insert 或 update 重新写入数据库。
如上图,可以观察到日志文件最后记录下的 delete 操作。正如你所见,虽然前两篇博客(I / O 与多线程)已经恢复了,但是我至今仍未想通产生这些 delete 语句的原因。这件事情发生在2022年4月20日下午四点半左右,可以肯定的是,我并未做任何数据库操作,也没有登录本网站的后台管理系统,更没有操作服务器,我是做了两次删除测试(因为我今天发现网站的博客管理系统的删除键居然没有提供确认删除弹出框,所以在本地的源程序中加入了这个功能并测试,等待网站更新比较多的时候再发布上来),可是我做的这两次测试并没有连接到服务器与数据库,在逻辑上似乎高度吻合,我做了两次删除测试,然后正好删除掉了我服务器上的两篇博客。可我删除的的确是本地数据库上的两篇博客,本地数据库上的那两篇也确实被我删除掉了,可为什么会连带着服务器上的也删除掉呢?哪怕退一万步说,我确实操作的是服务器上的数据库,那么本地的这两篇文章又是怎么被删除的?我只做了两次删除操作,在本地 Tomcat 上做的。这四篇文章没有任何关联,甚至连 主键ID 都是不同的,更别提根本不在一个数据库、一个服务器上了。下面是我本地程序中的 application.yml 配置文件。想不通!
评论