首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >问题定位-研发说应用语句更新操作成功数据库里数据没有更新

问题定位-研发说应用语句更新操作成功数据库里数据没有更新

原创
作者头像
wangwei-dba
修改2021-03-02 14:16:32
修改2021-03-02 14:16:32
1.3K0
举报
文章被收录于专栏:mysql-dbamysql-dba

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

业务日志
业务日志

业务语句要更新字段值

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日志

语句如下:

代码语言:javascript
复制
/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插入记录

代码语言:javascript
复制
### 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更新记录

代码语言:javascript
复制
### 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 删除。

问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档