背景介绍
听说过删库跑路被抓的,今天就碰到升级服务器(Alibaba Cloud Linux ----> Ubuntu)原因是taos3.2不支持Alibaba Cloud Linux系统!
为了保险起见把现在这个数据库里的数据都备份一份,为了不耽误同事们继续开发所以需要将需要升级的数据库在另一个服义务器中再跑一份出来!
有navicat帮忙数据迁移很方便!
但是犯错就在图方便上了!
因为迁移的这两个数据库中有几个名字相同的库!然后再数据同步时直接把原表中的数据删除了!
我的天呢尤其是 bas_file表,这里面存的都是minio里的文件!
任务需求
现在无论如何都要把数据恢复回来!要不然工作不保!
有好多方法:
一.数据恢复备份(这个我我尝试了,需要实现开启备份)
就是这个东西!谁没事会保存这个!(我就保存了)
这个恢复很简单,我要讲的不是这个简单的!
二.利用bin_log日志来完成
查看有没有开启bin_log
现在服务器中进入到mysql服务
mysql -u root -p
show variables like 'log_%'
可以看得到 log_bin是开启状态(其实不用太过关心,一般大家都是开启的,尤其是安装liunx版本的mysql时,如果真的没开 再去看其他博客吧)
开启了bin_log日之后,就会有binlog文件生成咱们现在过去找
show master logs;
可以看得到文件名与大小都被打印出来,现在就去找这两个文件(先退出mysql模式:exit)
find / -name binlog.000004
找到了他的位置
找到他们了
然后根据时间确定 是哪binlog
可以看得到000004后缀的这个时4月28 11:55 到 4月29 9:56,我是4月28 下午1:30左右删除的数据,所以咱们把重点放在binlog.000004上就行了。
这个文件将会救回你的数据
复制一份到你想要的位置 cp binlog.000004 /you/ (位置自己选)
然后 cd /you/ (别忘记换成自己的路径)
使用
mysqlbinlog --no-defaults --base64-output=DECODE-ROWS -v -d crmeb /mysqldb/binlog.000004 > data.sql
上面这个语句多半你会遇到问题!
大概报错是mysqlbinlog 找不到
在你这个目录不用动 使用软连接链接过来一个就行了
ln -s /www/server/mysql/bin/mysqlbinlog mysqlbinlog
能用就行了。
先用这个生成一个事件日志文件
日志大概样子:
根据咱们要找的时间咱们找到他对一个的开始id和结束id
我大概是1:30左右删除的 这里我就选择这个
然后使用下面这个语句生成时间段内对数据进行的操作语句
mysqlbinlog --no-defaults --base64-output=DECODE-ROWS --start-position=3367047 --stop-position=3747440 -v binlog.000004 > insertdata.sql
会生成一个 insertdata.sql文件大概样子如下:
可以看得到,每步的操作都会被打印出来
往下翻找到咱们误删除的地方:
这就得到了当时删除数据的详细信息,根据这些信息就看别写insert语句再插入进去就行了。
总结
操作数据库时 要有留备份的习惯!
找到binlog.000004文件后可以复制到本地,用本地的mysqlbinlog操作效果是一样的。
最后的 delete转insert可以借助excel实现,这里就不赘述了如果需要请留言。