记录一次真实mysql数据恢复

出现问题的原因:千万不要使用navicat的工具进行生产数据库的操作,很容易出现麻烦。而且操作不会记录到binlog日志中。我这次就是使用navicat的工具数据传输,想将生产库的数据传输到测试库做测试,结果导致整个生产库数据都被清空,网址直接瘫痪。

幸好系统刚上线不久,数据不是很多,使用人数也不多,就赶紧到网上找解决办法,很多办法都试了,加班到晚上10点终于恢复了99%的数据,可能有半小时左右的数据没法恢复了,因为那点时间我可能执行了删数据操作,所以无法精确到具体的时间点。而且最近的备份文件是上周6的。已经过去好几天了。

恢复方法就是找到最近的备份文件,执行恢复。再找到mysql binlog日志文件的位置,一般日志文件中编号最大的就是最近的binlog日志,把日志文件copy到其他目录,cmd命令,执行mysqlbinlog

--start-datetime="最近备份文件的时间节点“  --stop-datetime="大概的事故发生之前的时间"  -d 数据库名 binlog.000029 > my.sql

生成的my.sql就是从最近生成备份文件的时间节点到事故发生之前的数据操作记录,因此配合我们的备份文件加这段时间的sql脚本就可以恢复大部分数据了。

执行my.sql,就是直接进入navicat,执行即可。

针对此次事故,我做了一些手段防止再出现此类事故,因为系统没开多久,只有我一个人维护和更新,因此很多事情没时间做,为了防止此类数据丢失问题再发生,我写了个定时执行数据库备份的脚本,由于使用的是window服务器,因此此脚本只适用于weindow服务器哦。

脚本如下

@echo off
set dbname=fms
set hour=%time:~0,2%
if "%time:~0,1%"==" " set hour=0%time:~1,1%
set backup_date=%Date:~0,4%%Date:~-5,2%%Date:~8,2%%hour%%Time:~3,2%%Time:~6,2%
set backupfile=D:/sqlbackup/%dbname%-%backup_date%.sql
"C:\Program Files\MYSQL\mysql-8.0.15-winx64\bin\mysqldump" -h127.0.0.1 -P3306 -uroot -proot -c --add-drop-table %dbname%> %backupfile%

forfiles /p D:/sqlbackup /s /m *.sql /d -30 /c "cmd /c del @file /f"

使用记事本编辑后,将文件后缀修改成.bat文件,注意脚本中的地址和文件保存路径可自行修改

然后添加windows执行计划,在开始菜单或win+r(运行)输入 taskschd.msc

选择创建基本任务,填写相关内容,选择脚本文件,触发器设置每天执行的时间,保存,windows就会每天按时执行此脚本生成备份文件,这样即使出现故障,也只会丢失小段时间的数据,再配合binlog,即可恢复增量数据。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值