主从复制延迟导致坑

18 篇文章 0 订阅
4 篇文章 0 订阅
背景:

线上出现了用户注册了多条重复记录

排查问题:
  • 第一种一开始怀疑是不是并发问题造成,后来查了大多数都是隔了几秒钟,并发出现概率小
  • 第二种就是看出现重复数据的时间,然后线上看到从库出现了延迟复制的问题,这就问题出现的关键
原来代码逻辑:

先查询传过来的openid是否在从库中存在,不存在就进行主库插入。

出现问题关键点:

前端第一次请求时候,判断从库不存在,然后主库插入注册数据。由于出现复制延迟,前端第二请求过来,因为延迟了从库查询还是不存在,那就GG了,又重复插了一条。

解决方法:

方法有很多种,列举一些

  • 我们采用的是在注册的时候在加多锁判断,如果这么多分钟内重复注册就代表重复注册,后面的请求就直接返回。
  • 可以用唯一索引限制
  • 或者用insert … select … where not exist 这种方式
延伸一些也是很明显的主从复制的错误:
$intStatus = $arrInput[status];
$this->objActTmp->updateInfoByAId($intActId, $intStatus);
// 更新后,马上查
$arrActContent = $this->objActTmp->getActByStatus($intStatus);

这就是主从延迟出现的地方,update后,马上get。

参考链接:

http://itindex.net/detail/57223-mysql-%E5%A4%8D%E5%88%B6-%E5%BB%B6%E8%BF%9F

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值