“Access denied; you need (at least one of) the SUPER privilege(s) for this operation”错误
原因没有权限,使用root账户或让管理员提升权限
The last packet successfully received from the server was 226,166 millisecon 警告
配置测试探测
方案一:不怎么推荐,相当于每次发送测试请求
spring.datasource.druid.validationQuery=select 1
spring.datasource.druid.testWhileIdle=true
spring.datasource.druid.testOnBorrow=true
spring.datasource.druid.testOnReturn=true
修改数据库连接路径
方案二:在数据库连接上,加“&autoReconnect=true&failOverReadOnly=false”配置
datasource:
erp9:
driver-class-name: com.mysql.cj.jdbc.Driver
url: jdbc:mysql://172.16.*.*:4417/b1b_goods?useUnicode=true&characterEncoding=utf8&useSSL=false&serverTimezone=GMT%2b8&allowPublicKeyRetrieval=true&autoReconnect=true&failOverReadOnly=false&autoReconnect=true&failOverReadOnly=false
username:
password:
initialSize: 20
minIdle: 5
maxActive: 80
type: com.alibaba.druid.pool.DruidDataSource
修改mysql-server端修改连接的有效时间
方案三:修改my.cnf 不推荐
vim /etc/my.cnf
# 设置最大连接数
max_connections=500
# 设置每个用户最大连接数量
max_user_connections=150
#设置关闭空闲连接时间,对正在工作的连接不影响
wait_timeout=180
多数据源请求出现的对象名‘cms_log’无效
错误信息:
org.springframework.jdbc.BadSqlGrammarException:
### Error updating database. Cause: com.microsoft.sqlserver.jdbc.SQLServerException: 对象名 'cms_brands_temp' 无效。
### The error may exist in com/yuanda/erp9/syn/mapper/erp9/CmsBrandsTempMapper.java (best guess)
### The error may involve com.yuanda.erp9.syn.mapper.erp9.CmsBrandsTempMapper.insert-Inline
### The error occurred while setting parameters
### SQL: INSERT INTO cms_brands_temp ( name, tag ) VALUES ( ?, ? )
### Cause: com.microsoft.sqlserver.jdbc.SQLServerException: 对象名 'cms_brands_temp' 无效。
; bad SQL grammar []; nested exception is com.microsoft.sqlserver.jdbc.SQLServerException: 对象名 'cms_brands_temp' 无效。
at org.springframework.jdbc.support.SQLErrorCodeSQLExceptionTranslator.doTranslate(SQLErrorCodeSQLExceptionTranslator.java:234)
at org.springframework.jdbc.support.AbstractFallbackSQLExceptionTranslator.translate(AbstractFallbackSQLExceptionTranslator.java:72)
at org.mybatis.spring.MyBatisExceptionTranslator.translateExceptionIfPossible(MyBatisExceptionTranslator.java:88)
at org.mybatis.spring.SqlSessionTemplate$SqlSessionInterceptor.invoke(SqlSessionTemplate.java:440)
at com.sun.proxy.$Proxy96.insert(Unknown Source)
at org.mybatis.spring.SqlSessionTemplate.insert(SqlSessionTemplate.java:271)
at com.baomidou.mybatisplus.core.override.MybatisMapperMethod.execute(MybatisMapperMethod.java:60)
at com.baomidou.mybatisplus.core.override.MybatisMapperProxy$PlainMethodInvoker.invoke(MybatisMapperProxy.java:148)
at com.baomidou.mybatisplus.core.override.MybatisMapperProxy.invoke(MybatisMapperProxy.java:89)
at com.sun.proxy.$Proxy100.insert(Unknown Source)
at com.yuanda.erp9.syn.service.erp9.impl.RsSaveImpl.insertBrand(RsSaveImpl.java:49)
at com.yuanda.erp9.syn.service.erp9.impl.RsDataImportServiceImpl.insertHKDataToDatabase(RsDataImportServiceImpl.java:365)
at com.yuanda.erp9.syn.service.erp9.impl.RsDataImportServiceImpl.access$000(RsDataImportServiceImpl.java:39)
at com.yuanda.erp9.syn.service.erp9.impl.RsDataImportServiceImpl$2.run(RsDataImportServiceImpl.java:150)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
at java.lang.Thread.run(Thread.java:748)
Creating a new SqlSession
Caused by: com.microsoft.sqlserver.jdbc.SQLServerException: 对象名 'cms_brands_temp' 无效。
at com.microsoft.sqlserver.jdbc.SQLServerException.makeFromDatabaseError(SQLServerException.java:262)
SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@24a5d0b2] was not registered for synchronization because synchronization is not active
at com.microsoft.sqlserver.jdbc.SQLServerStatement.getNextResult(SQLServerStatement.java:1632)
at com.microsoft.sqlserver.jdbc.SQLServerPreparedStatement.doExecutePreparedStatement(SQLServerPreparedStatement.java:600)
at com.microsoft.sqlserver.jdbc.SQLServerPreparedStatement$PrepStmtExecCmd.doExecute(SQLServerPreparedStatement.java:522)
at com.microsoft.sqlserver.jdbc.TDSCommand.execute(IOBuffer.java:7225)
at com.microsoft.sqlserver.jdbc.SQLServerConnection.executeCommand(SQLServerConnection.java:3053)
解决方案:
1.
请勿直接使用mapper,应为切换数据源是根据不同的包路径下的service区分的
2. 在controller中(A数据库)UserServiceImple中调用ProductMapper(B数据库)会出现对象名无效错误,
原因是经过一次AOP切换数据源到A,但是您使用A的数据库的连接调用B数据库的表。所以会出现对象名错误。应该再调用B数据库的service再进行AOP切换数据源。
ERROR 1213 (40001): Deadlock found when trying to get lock; try restarting transaction 死锁错误
审核死锁代码,将涉及到死锁表的加锁顺序保持一直。
尽量让数据表中的数据检索都通过索引来完成,避免无效索引导致行锁升级为表锁。
合理设计索引,尽量缩小锁的范围。
尽量减少查询条件的范围,尽量避免间隙锁或缩小间隙锁的范围。
尽量控制事务的大小,减少一次事务锁定的资源数量,缩短锁定资源的时间。
如果一条SQL语句涉及事务加锁操作,则尽量将其放在整个事务的最后执行。
在业务允许的情况下尽可能使用低级别的事务隔离机制
Too many connections 连接数超过配置配置的最大个数
vim /etc/my.cnf
# 设置最大连接数
max_connections=500
# 设置每个用户最大连接数量
max_user_connections=150
首先先要考虑在我们 MySQL 数据库参数文件里面,对应的最大连接数max_connections 这个参数值是不是设置的太小了,导致客户端连接数超过了数据库所承受的最大值。该值默认大小是151,我们可以根据实际情况进行调整。
对应解决办法:set global max_connections=500但这样调整会有隐患,因为我们无法确认数据库是否可以承担这么大的连接压力,就好比原来一个人只能吃一个馒头,但现在却非要让他吃 10 个,他肯定接受不了。反应到服务器上面,就有可能会出现宕机的可能。所以这又反应出了,我们在新上线一个业务系统的时候,要做好压力测试。保证后期对数据库进行优化调整。
其次可以限制Innodb 的并发处理数量,如果 innodb_thread_concurrency = 0(这种代表不受限制) 可以先改成 16或是64 看服务器压力。如果非常大,可以先改的小一点让服务器的压力下来之后,然后再慢慢增大,根据自己的业务而定。个人建议可以先调整为 16 即可。
MySQL 随着连接数的增加性能是会下降的,可以让开发配合设置 thread pool,连接复用。在MySQL商业版中加入了thread pool这项功能,另外对于有的监控程序会读取 information_schema 下面的表,可以考虑关闭下面的参数。
以上有些文章参考至:
https://blog.csdn.net/lihaoyiding/article/details/125408711