1、sql异常TRIGGER command denied to user 'XXX' @'%' for table 'xxx'

mysql 错误信息集合_mysql

TRIGGER command denied to user 'ops'@'%’ for table 'order_new

意思为 触发器的账号ops没有权限去操作order_new这张表

照理说应该给这个账号增加权限,但是我想搞清楚为啥会有这个账号出来,这个账号并非是业务账账号,而是个人使用账号 ;微服务启动配置都是从apollo配置里拉取,不会有这个账号连接信息(也不应该有这个账号),查看当前spring微服务连接账号信息如下:

## 使用arthas 工具查看 ##
curl -O https://arthas.aliyun.com/math-game.jar
java -jar math-game.jar

## spring 查看命令
### spring.datasource.username  根据程序中的动态属性调整
vmtool -x 5 --action getInstances --className org.springframework.core.env.ConfigurableEnvironment  --express 'instances[1].getProperty("spring.datasource.username") '
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.

mysql 错误信息集合_mysql_02

打开表中的触发器后发现它的定义者是ops这个账户,代码中连接数据库不是用的这个账户,并且这个账户只有读的权限而没有写的权限,以前是读写,打算改成只读,出现该问题

原因: 由于触发器的定义者(ops)与数据库配置(userAdmin)不同导致的无法执行触发器而导致的异常,并且这个账户只有读的权限而没有写的权限。

验证:把ops改回原来的读写权限,立即生效(服务不需要重启)

解决: .最终,把原有的触发器删掉之后重新用配置文件中的账户新建触发器才解决了问题

结论:mysql触发器特性,A账号创建触发器生效后,只适用A账号会应用,B账号就算有该库读写权限也跟它没关系,一旦A账号被取消了写权限,那么就会出问题;