龙空技术网

Mysqldump报错解决办法-The user specified as a definer不存在

波波说运维 253

前言:

现在咱们对“mysql创建函数报错”大致比较注意,兄弟们都想要分析一些“mysql创建函数报错”的相关知识。那么小编在网上汇集了一些对于“mysql创建函数报错””的相关文章,希望我们能喜欢,小伙伴们快快来了解一下吧!

概述

最近碰到一个mysqldump导出报错的问题,由于这个问题比较特殊,所以先介绍下大致背景。

背景

前段时间做了权限隔离,之前都是用fsl_prod(%,localhost)来创建函数,后来设置为应用程序只能用fsl_prod(指定IP)连接,平时运维人员是用fsl_yw(%)来运维和创建函数,root只能localhost连接;

所以将fsl_prod(%)这个用户删除,今天mysqldump时发现有问题,具体报错如下:

报错

备份数据库命令

$ mysqldump -uroot -p fsl_prod

出现了下面的错误

mysqldump: Got error: 1449: The user specified as a definer ('fsl_prod'@'%') does not exist when using LOCK TABLES
解决过程

1、查看definer

主要原因是当时创建 view procedure 或者trigger使用的user 已经被删除了,这个问题最常见的是数据库迁移之后,我的问题是我db里面的存储过程的创建者没有了

1.1、查看mysql.proc查看definer

1.2、查看 information_schema.VIEWS表格中Deafiner 一栏

2、授权 root

试一下对root授权,看是不是可行,测试后发现不成功,回收root权限。

3、 增加一个definer

根据错误: The user specified as a definer ('fsl_prod'@'%') does not exist

执行:

grant all privileges on *.* to fsl_prod@'%' identified by 'fxxxxx'; --解决mysqldump问题FLUSH PRIVILEGES;

好吧,执行后问题解决。

权限一做细果然之前留下的坑就越多,后面会分享更多devops和DBA方面的内容,感兴趣的朋友可以关注一下~

标签: #mysql创建函数报错