
研发在技术群里@我说数据库有问题,我就仔细询问了相关的情况,他们说应用的操作更新数据库成功了(事务也提交成功)而数据库中的数据确没有更新,他们就断定数据库出了问题,并拿出了应用日志为证据

业务语句要更新字段值
status 10
seats_user_id 323
seats_org_code 1.337.8.
agent_name 01188900
xh_plan_name W+DIRBCHID0166815d522f4f3695e692221662dd42
task_get_type 0
agent_id 10134
以此为由例证数据库更新操作成功了(他们以id为1631527为例查询说数据没有更新)
看他们这么坚定,我也只能找到证据,说明数据库也更新了,并成功了
联系现场操作人员帮忙查询一下数据库里的1631527数据

就猜测如果数据库更新成功了,数据没有更新,只有一种可能就是数据又被改了回去
根据问题的发生的时间点解析binlog日志
语句如下:
/usr/local/mysql/bin/mysqlbinlog --no-defaults -v -v --base64-output=DECODE-ROWS --start-datetime='startime' --stop-datetime='stoptime' mysql-bin.000249 > 249.txt从解析日志中找到id为1631527插入记录
### INSERT INTO `xxxxx`.`xxxxx`
### SET
### @1=1631527 /* INT meta=0 nullable=0 is_null=0 */
### @2='W+DIRBCHID0166815d522f4f3695e692221662dd42' /* VARSTRING(192) meta=192 nullable=1 is_null=0 */
### @3=NULL /* VARSTRING(192) meta=192 nullable=1 is_null=1 */
### @4='138xxx0xxx' /* VARSTRING(48) meta=48 nullable=1 is_null=0 */
### @5=0 /* INT meta=0 nullable=0 is_null=0 */
### @6=NULL /* INT meta=0 nullable=1 is_null=1 */
### @7=NULL /* VARSTRING(48) meta=48 nullable=1 is_null=1 */
### @8=NULL /* VARSTRING(192) meta=192 nullable=1 is_null=1 */
### @9='鑳℃檽鏅撳コ澹? /* VARSTRING(192) meta=192 nullable=1 is_null=0 */
### @10='鑳℃檽鏅撳コ澹? /* VARSTRING(768) meta=768 nullable=1 is_null=0 */
### @11=NULL /* VARSTRING(768) meta=768 nullable=1 is_null=1 */
### @12='W+DIRTSKIDb1577e11e1944f60821e6ecf51b9a5e8' /* VARSTRING(768) meta=768 nullable=1 is_null=0 */
### @13=NULL /* VARSTRING(768) meta=768 nullable=1 is_null=1 */
### @14='闀挎矙鍒嗚' /* VARSTRING(768) meta=768 nullable=1 is_null=0 */
### @15='1.337.8.' /* VARSTRING(768) meta=768 nullable=1 is_null=0 */
### @16=NULL /* VARSTRING(3000) meta=3000 nullable=1 is_null=1 */
### @17='2021-02-26 08:40:05' /* DATETIME(0) meta=0 nullable=1 is_null=0 */
### @18=NULL /* DATETIME(0) meta=0 nullable=1 is_null=1 */
### @19=NULL /* DATETIME(0) meta=0 nullable=1 is_null=1 */
### @20=323 /* INT meta=0 nullable=1 is_null=0 */
### @21='1.337.8.' /* VARSTRING(96) meta=96 nullable=1 is_null=0 */
### @22=NULL /* INT meta=0 nullable=1 is_null=1 */
### @23=NULL /* INT meta=0 nullable=1 is_null=1 */
### @24=NULL /* INT meta=0 nullable=1 is_null=1 */
### @25=NULL /* VARSTRING(96) meta=96 nullable=1 is_null=1 */
### @26=NULL /* INT meta=0 nullable=1 is_null=1 */
### @27=NULL /* INT meta=0 nullable=1 is_null=1 */
### @28=NULL /* VARSTRING(96) meta=96 nullable=1 is_null=1 */
### @29=58 /* INT meta=0 nullable=1 is_null=0 */
### @30=0 /* INT meta=0 nullable=1 is_null=0 */
### @31=0 /* INT meta=0 nullable=1 is_null=0 */
### @32=0 /* LONGINT meta=0 nullable=1 is_null=0 */
### @33=NULL /* LONGINT meta=0 nullable=1 is_null=1 */
### @34=NULL /* VARSTRING(465) meta=465 nullable=1 is_null=1 */
### @35=NULL /* VARSTRING(465) meta=465 nullable=1 is_null=1 */
### @36=NULL /* VARSTRING(465) meta=465 nullable=1 is_null=1 */
### @37=NULL /* VARSTRING(465) meta=465 nullable=1 is_null=1 */
### @38=NULL /* DATETIME(0) meta=0 nullable=1 is_null=1 */
### @39=0 /* INT meta=0 nullable=1 is_null=0 */
### @40=NULL /* INT meta=0 nullable=1 is_null=1 */
### @41=NULL /* VARSTRING(765) meta=765 nullable=1 is_null=1 */
### @42=0 /* INT meta=0 nullable=1 is_null=0 */
### @43=NULL /* DATETIME(0) meta=0 nullable=1 is_null=1 */
### @44=NULL /* INT meta=0 nullable=1 is_null=1 */
### @45=NULL /* VARSTRING(765) meta=765 nullable=1 is_null=1 */
### @46=0 /* INT meta=0 nullable=1 is_null=0 */
### @47=NULL /* INT meta=0 nullable=1 is_null=1 */
### @48=NULL /* INT meta=0 nullable=1 is_null=1 */
### @49=NULL /* VARSTRING(300) meta=300 nullable=1 is_null=1 */
### @50=NULL /* VARSTRING(60) meta=60 nullable=1 is_null=1 */
### @51=NULL /* VARSTRING(600) meta=600 nullable=1 is_null=1 */
### @52=NULL /* INT meta=0 nullable=1 is_null=1 */
### @53=NULL /* INT meta=0 nullable=1 is_null=1 */
### @54=NULL /* INT meta=0 nullable=1 is_null=1 */
### @55=NULL /* DATETIME(0) meta=0 nullable=1 is_null=1 */
### 从上面日志可以看出插入的时候如下字段的值为(@num 代码字段表结构里的顺序 @1就代表表的第一个字段id)
status @5=0
seats_user_id @26=NULL
seats_org_code @28=NULL
agent_name @41=NULL
xh_plan_name @45=NULL
task_get_type @46=0
agent_id @40=NULL
从解析日志中找到id为1631527更新记录
### UPDATE `xxxx`.`xxxxxxxx`
### WHERE
### @1=1631527 /* INT meta=0 nullable=0 is_null=0 */
### @2='W+DIRBCHID0166815d522f4f3695e692221662dd42' /* VARSTRING(192) meta=192 nullable=1 is_null=0 */
### @3=NULL /* VARSTRING(192) meta=192 nullable=1 is_null=1 */
### @4='13xxx27' /* VARSTRING(48) meta=48 nullable=1 is_null=0 */
### @5=0 /* INT meta=0 nullable=0 is_null=0 */
### @6=NULL /* INT meta=0 nullable=1 is_null=1 */
### @7=NULL /* VARSTRING(48) meta=48 nullable=1 is_null=1 */
### @8=NULL /* VARSTRING(192) meta=192 nullable=1 is_null=1 */
### @9='鑳℃檽鏅撳コ澹? /* VARSTRING(192) meta=192 nullable=1 is_null=0 */
### @10='鑳℃檽鏅撳コ澹? /* VARSTRING(768) meta=768 nullable=1 is_null=0 */
### @11=NULL /* VARSTRING(768) meta=768 nullable=1 is_null=1 */
### @12='W+DIRTSKIDb1577e11e1944f60821e6ecf51b9a5e8' /* VARSTRING(768) meta=768 nullable=1 is_null=0 */
### @13=NULL /* VARSTRING(768) meta=768 nullable=1 is_null=1 */
### @14='闀挎矙鍒嗚' /* VARSTRING(768) meta=768 nullable=1 is_null=0 */
### @15='1.337.8.' /* VARSTRING(768) meta=768 nullable=1 is_null=0 */
### @16=NULL /* VARSTRING(3000) meta=3000 nullable=1 is_null=1 */
### @17='2021-02-26 08:40:05' /* DATETIME(0) meta=0 nullable=1 is_null=0 */
### @18=NULL /* DATETIME(0) meta=0 nullable=1 is_null=1 */
### @19=NULL /* DATETIME(0) meta=0 nullable=1 is_null=1 */
### @20=323 /* INT meta=0 nullable=1 is_null=0 */
### @21='1.337.8.' /* VARSTRING(96) meta=96 nullable=1 is_null=0 */
### @22=NULL /* INT meta=0 nullable=1 is_null=1 */
### @23=NULL /* INT meta=0 nullable=1 is_null=1 */
### @24=NULL /* INT meta=0 nullable=1 is_null=1 */
### @25=NULL /* VARSTRING(96) meta=96 nullable=1 is_null=1 */
### @26=NULL /* INT meta=0 nullable=1 is_null=1 */
### @27=NULL /* INT meta=0 nullable=1 is_null=1 */
### @28=NULL /* VARSTRING(96) meta=96 nullable=1 is_null=1 */
### @29=58 /* INT meta=0 nullable=1 is_null=0 */
### @30=0 /* INT meta=0 nullable=1 is_null=0 */
### @31=0 /* INT meta=0 nullable=1 is_null=0 */
### @32=0 /* LONGINT meta=0 nullable=1 is_null=0 */
### @33=NULL /* LONGINT meta=0 nullable=1 is_null=1 */
### @34=NULL /* VARSTRING(465) meta=465 nullable=1 is_null=1 */
### @35=NULL /* VARSTRING(465) meta=465 nullable=1 is_null=1 */
### @36=NULL /* VARSTRING(465) meta=465 nullable=1 is_null=1 */
### @37=NULL /* VARSTRING(465) meta=465 nullable=1 is_null=1 */
### @38=NULL /* DATETIME(0) meta=0 nullable=1 is_null=1 */
### @39=0 /* INT meta=0 nullable=1 is_null=0 */
### @40=NULL /* INT meta=0 nullable=1 is_null=1 */
### @41=NULL /* VARSTRING(765) meta=765 nullable=1 is_null=1 */
### @42=0 /* INT meta=0 nullable=1 is_null=0 */
### @43=NULL /* DATETIME(0) meta=0 nullable=1 is_null=1 */
### @44=NULL /* INT meta=0 nullable=1 is_null=1 */
### @45=NULL /* VARSTRING(765) meta=765 nullable=1 is_null=1 */
### @46=0 /* INT meta=0 nullable=1 is_null=0 */
### @47=NULL /* INT meta=0 nullable=1 is_null=1 */
### @48=NULL /* INT meta=0 nullable=1 is_null=1 */
### @49=NULL /* VARSTRING(300) meta=300 nullable=1 is_null=1 */
### @50=NULL /* VARSTRING(60) meta=60 nullable=1 is_null=1 */
### @51=NULL /* VARSTRING(600) meta=600 nullable=1 is_null=1 */
### @52=NULL /* INT meta=0 nullable=1 is_null=1 */
### @53=NULL /* INT meta=0 nullable=1 is_null=1 */
### @54=NULL /* INT meta=0 nullable=1 is_null=1 */
### @55=NULL /* DATETIME(0) meta=0 nullable=1 is_null=1 */
### SET
### @1=1631527 /* INT meta=0 nullable=0 is_null=0 */
### @2='W+DIRBCHID0166815d522f4f3695e692221662dd42' /* VARSTRING(192) meta=192 nullable=1 is_null=0 */
### @3=NULL /* VARSTRING(192) meta=192 nullable=1 is_null=1 */
### @4='13xxxxxx27' /* VARSTRING(48) meta=48 nullable=1 is_null=0 */
### @5=10 /* INT meta=0 nullable=0 is_null=0 */
### @6=NULL /* INT meta=0 nullable=1 is_null=1 */
### @7=NULL /* VARSTRING(48) meta=48 nullable=1 is_null=1 */
### @8=NULL /* VARSTRING(192) meta=192 nullable=1 is_null=1 */
### @9='鑳℃檽鏅撳コ澹? /* VARSTRING(192) meta=192 nullable=1 is_null=0 */
### @10='鑳℃檽鏅撳コ澹? /* VARSTRING(768) meta=768 nullable=1 is_null=0 */
### @11=NULL /* VARSTRING(768) meta=768 nullable=1 is_null=1 */
### @12='W+DIRTSKIDb1577e11e1944f60821e6ecf51b9a5e8' /* VARSTRING(768) meta=768 nullable=1 is_null=0 */
### @13=NULL /* VARSTRING(768) meta=768 nullable=1 is_null=1 */
### @14='闀挎矙鍒嗚' /* VARSTRING(768) meta=768 nullable=1 is_null=0 */
### @15='1.337.8.' /* VARSTRING(768) meta=768 nullable=1 is_null=0 */
### @16=NULL /* VARSTRING(3000) meta=3000 nullable=1 is_null=1 */
### @17='2021-02-26 08:40:05' /* DATETIME(0) meta=0 nullable=1 is_null=0 */
### @18=NULL /* DATETIME(0) meta=0 nullable=1 is_null=1 */
### @19=NULL /* DATETIME(0) meta=0 nullable=1 is_null=1 */
### @20=323 /* INT meta=0 nullable=1 is_null=0 */
### @21='1.337.8.' /* VARSTRING(96) meta=96 nullable=1 is_null=0 */
### @22=NULL /* INT meta=0 nullable=1 is_null=1 */
### @23=NULL /* INT meta=0 nullable=1 is_null=1 */
### @24=NULL /* INT meta=0 nullable=1 is_null=1 */
### @25=NULL /* VARSTRING(96) meta=96 nullable=1 is_null=1 */
### @26=323 /* INT meta=0 nullable=1 is_null=0 */
### @27=NULL /* INT meta=0 nullable=1 is_null=1 */
### @28='1.337.8.' /* VARSTRING(96) meta=96 nullable=1 is_null=0 */
### @29=58 /* INT meta=0 nullable=1 is_null=0 */
### @30=0 /* INT meta=0 nullable=1 is_null=0 */
### @31=0 /* INT meta=0 nullable=1 is_null=0 */
### @32=0 /* LONGINT meta=0 nullable=1 is_null=0 */
### @33=NULL /* LONGINT meta=0 nullable=1 is_null=1 */
### @34=NULL /* VARSTRING(465) meta=465 nullable=1 is_null=1 */
### @35=NULL /* VARSTRING(465) meta=465 nullable=1 is_null=1 */
### @36=NULL /* VARSTRING(465) meta=465 nullable=1 is_null=1 */
### @37=NULL /* VARSTRING(465) meta=465 nullable=1 is_null=1 */
### @38=NULL /* DATETIME(0) meta=0 nullable=1 is_null=1 */
### @39=0 /* INT meta=0 nullable=1 is_null=0 */
### @40=10134 /* INT meta=0 nullable=1 is_null=0 */
### @41='01188900' /* VARSTRING(765) meta=765 nullable=1 is_null=0 */
### @42=0 /* INT meta=0 nullable=1 is_null=0 */
### @43=NULL /* DATETIME(0) meta=0 nullable=1 is_null=1 */
### @44=NULL /* INT meta=0 nullable=1 is_null=1 */
### @45='W+DIRBCHID0166815d522f4f3695e692221662dd42' /* VARSTRING(765) meta=765 nullable=1 is_null=0 */
### @46=0 /* INT meta=0 nullable=1 is_null=0 */
### @47=NULL /* INT meta=0 nullable=1 is_null=1 */
### @48=NULL /* INT meta=0 nullable=1 is_null=1 */
### @49=NULL /* VARSTRING(300) meta=300 nullable=1 is_null=1 */
### @50=NULL /* VARSTRING(60) meta=60 nullable=1 is_null=1 */
### @51=NULL /* VARSTRING(600) meta=600 nullable=1 is_null=1 */
### @52=NULL /* INT meta=0 nullable=1 is_null=1 */
### @53=NULL /* INT meta=0 nullable=1 is_null=1 */
### @54=NULL /* INT meta=0 nullable=1 is_null=1 */
### @55=NULL /* DATETIME(0) meta=0 nullable=1 is_null=1 */从上面日志可以看出语句更新如下字段:
status @5=10
seats_user_id @26=323
seats_org_code @28=1.337.8.
agent_name @41=01188900
xh_plan_name @45=W+DIRBCHID0166815d522f4f3695e692221662dd42
task_get_type @46=0
agent_id @40=10134
可以看出和应用程序语句更新的字段是吻合的,就可以确定这条就是业务更新的数据binlog日志
日志的最下面有COMMIT/*!*/; 表明更新提交了
到这里可以肯定数据肯定更新成功了,那就剩下最后一种可能,就是数据又被更新回去了,了解到记录是通过接口传进来的,如果接口传了同样记录会怎样处理?? 或者记录有没有可能再次被引用程序更新回去??
带着这样的疑问,找到相应的研发人员确认,最后一个研发说好像有什么重置操作,查询代码确认,真有这个接口并且就是改上面的字段把字段恢复插入的默认值
问题解决
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。