为什么mysql的一行数据没有了?

今天又遇到了一个问题!!!

一个小姐姐跑来对我说:

用户的一行记录没有了!!!

要不重启下试试~~

显然小姐姐并不买账。。

登录数据库,喵了一下

还真少了一行!!!

看了下业务逻辑,也没问题

那数据怎么就无缘无故的消失了呢

小姐姐还在一旁瞪着大眼睛看着呢!!!

只有祭出我的大招了

binlog

既然数据删除了,肯定记录了删除相关的sql

 mysqlbinlog -vv --base64-output=decode-rows mysql-bin.000906 | grep '`DELETE FROM `database`.`table`' -C10

查看 与之相关的上下10行

发现了

### DELETE FROM `database`.`table`
### WHERE
###   @1=432 /* INT meta=0 nullable=0 is_null=0 */
###   @2=31231 /* INT meta=0 nullable=0 is_null=0 */
###   @3=0 /* TINYINT meta=0 nullable=0 is_null=0 */
###   @4=1 /* INT meta=0 nullable=0 is_null=0 */
###   @5=NULL /* INT meta=0 nullable=1 is_null=1 */
###   @6='xxx' /* VARSTRING(90) meta=90 nullable=0 is_null=0 */
###   @7='xxx' /* VARSTRING(36) meta=36 nullable=1 is_null=0 */
###   @8=2 /* INT meta=0 nullable=0 is_null=0 */
###   @9='xxx' /* DATETIME(0) meta=0 nullable=0 is_null=0 */
###   @10='xxx' /* VARSTRING(180) meta=180 nullable=0 is_null=0 */
###   @11='xxx' /* VARSTRING(765) meta=765 nullable=1 is_null=0 */
###   @12=123 /* INT meta=0 nullable=0 is_null=0 */
###   @13=111 /* INT meta=0 nullable=0 is_null=0 */
###   @14=1574672884 /* TIMESTAMP(0) meta=0 nullable=0 is_null=0 */
###   @15=271 /* INT meta=0 nullable=0 is_null=0 */
###   @16=''

还真删除了

心里暗语,不知,哪个鳖孙干的好事!!

既然删除了

肯定业务逻辑有问题

在祭出神器PhpStorm

哇,好厉害

还有更厉害的呢~

少说话,快排查!!

排查发现

是一个时间差和硬删除的问题

用户支付完成后,还没有回调完成,此时用户又点击了取消按钮,就把数据给硬删除了

前人挖坑,后人填坑啊

解决方案

  • 1 添加支付中状态
  • 2 数据软删除

小姐姐,你重启好了没

业务没问题

可能跟你的电脑有关系

要升级了

才不是

你看我刷新下就好了

你又想诳我

此时此刻,明白了

  • 重启

  • 刷新

是唯一的解决方案

嗯,对


ps: 没有小姐姐,只有bug

Posted in 后端 on Nov 25, 2019

请登录 登录 评论!