mysql的常见错误

“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
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

心有城府,腹有良谋

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值