听说过删库跑路吧,这就遇到了,项目上的队友在做数据库操作时“不小心”把数据库的表清空了,然后。。。tmd他还把库给删了,
目录
-
第一步:查看是否打开binlog日志
show variables like '%log_bin%';
ON为打开,下面的路径就是binlog所在的目录,/home/mysql/data
binlog 名字一般是:mysql-bin.000010
第二步:查找日志
第三步:找到删库时候的时间点对应的日志,导出分析一下
使用mysqlbinlog命令导出bin日志为sql或txt文件
mysqlbinlog --no-defaults --database=dataxxx /home/mysql/data/mysql-bin.000018 > /mnt/binlog.sql
--database : 过滤指定数据库的日志
我把日志导出到了/mnt下,下载到本地开始分析,找到最后一次写表的时间点或日志点:
这个决定了我恢复数据的截止点
第四步:开始数据恢复
由于是直接删库的,没办法,只能从头开始恢复数据,从第一个日志开始干
mysqlbinlog --no-defaults --database=dataxxx /home/mysql/data/mysql-bin.000010 | mysql -uroot -pPASSWORD -P3306 -h127.0.0.1
直接恢复hdiot库下面的所有数据。
恢复到有截止点的日志文件时,需要添加参数:
--start-position=2174 日志的起始点
--stop-position=17450818 正常数据的截止点
也可以用时间表示:
--start-datetime="开始时间" --stop-datetime="结束时间"
mysqlbinlog --no-defaults --database=hdiot --start-position=2174 --stop-position=17450818 /home/mysql/data/mysql-bin.000019 | mysql -uroot -pPASSWORD -P3306 -h127.0.0.1
恢复完之后查看数据和表都回来了,搞定。
最后建议:一定做好定时数据备份。