线上数据库问题解决

背景:项目在生产环境做压力测试,然后其中的task任务一直在异常状态。

截图一:

### Error querying database.  Cause: java.sql.SQLException: Error
### The error may exist in URL [jar:file:/app/xxx-1.0-SNAPSHOT-all.jar!/config/mapper/TableMapper.xml]
### The error may involve defaultParameterMap
### The error occurred while setting parameters
### SQL: select                            *               from table         where col1 = ?         and col2 in          (                ?          ,               ?          ,               ?          ,               ?          )
### Cause: java.sql.SQLException: Error
; uncategorized SQLException; SQL state [null]; error code [0]; Error; nested exception is java.sql.SQLException: Error

截图二:

Error attempting to get column 'col3' from result set.  Cause: java.sql.SQLException: Error
; uncategorized SQLException; SQL state [null]; error code [0]; Error; nested exception is java.sql.SQLException: Error

截图四:

Communications link failure during rollback(). Transaction resolution unknown.

解决步骤:

1、最初我怀疑是截图二中的字段数据问题导致,先核查数据,发现没有为空的字段。然后我又针对这些有数据的部分,加了非空限制,暂时解决截图二中的问题,但我认为这并非根本性问题。

2、截图四我查了下,主要是由于超时导致。

   查看超时设置命令及数据库版本

sql命令1:
show VARIABLES LIKE '%timeout%'

connect_timeout	10
delayed_insert_timeout	300
innodb_flush_log_at_timeout	1
innodb_lock_wait_timeout	50
innodb_rollback_on_timeout	OFF
interactive_timeout	28800
lock_wait_timeout	31536000
net_read_timeout	30
net_write_timeout	60
rpl_stop_slave_timeout	31536000
slave_net_timeout	3600
wait_timeout	28800

sql命令2:
show variables like '%version%'

innodb_version	5.6.37
protocol_version	10
slave_type_conversions	
version	5.6.37-log
version_comment	MySQL Community Server (GPL)
version_compile_machine	x86_64
version_compile_os	Linux

然后发现生产的配置是:

sql命令1:
show VARIABLES LIKE '%timeout%'

connect_timeout	10
delayed_insert_timeout	300
have_statement_timeout	YES
innodb_flush_log_at_timeout	1
innodb_lock_wait_timeout	50
innodb_rollback_on_timeout	OFF
interactive_timeout	28800
lock_wait_timeout	31536000
net_read_timeout	30
net_write_timeout	60
rpl_stop_slave_timeout	31536000
slave_net_timeout	60
wait_timeout	28800


sql命令2:
show variables like '%version%'

innodb_version	5.7.26
protocol_version	10
slave_type_conversions	
tls_version	TLSv1,TLSv1.1,TLSv1.2
version	5.7.26-log
version_comment	Source distribution
version_compile_machine	x86_64
version_compile_os	Linux

3、初步推断wait_timeout较小,即DBA运维中常见的8小时空闲,不过我们并没有调整大小,而是在数据库连接的URL做了配置

    &autoReconnect=true  

 

你可能感兴趣的:(java开发,数据库开发)