在做一个并发抢购功能,使用并发锁库存逻辑后,发现还有漏网之鱼导致超卖。
调查后,发现库存数据锁定成功,但存在几笔失败,即扣完库存后被别的更新覆盖了,出现该问题主要是设计问题,锁库存字段被多方更新,通过更改,使得库存更新只能通过专门方法解决该问题。
此处主要想记录解决问题的方法。
1、通过日志调查知道库存锁定成功,但何时被谁覆盖未知
2、通过mysql的binlog,查看出问题时间对该表的update操作,发现了更新的记录从而定位问题
此处打个tag记录调查语句及方法
mysqlbinlog --start-datetime='2019-07-24 09:22:57' --stop-datetime='2019-07-24 09:22:57' -d lfcp_txwuzhendai_web /mnt/disk1/data/mysql/binlog.000039 --base64-output=decode-rows -v
mysqlbinlog --start-datetime='2019-07-24 09:22:57' --stop-datetime='2019-07-24 10:00:00' -d lfcp_txwuzhendai_web /mnt/disk1/data/mysql/binlog.000039 --base64-output=decode-rows -v >/home/mysql.20190724092257-100000.txt