记一次生产数据库mysqldump导出报错案例(附解决方法)

概述

最近碰到一个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

记一次生产数据库mysqldump导出报错案例(附解决方法)


解决过程

1、查看definer

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

1.1、查看mysql.proc查看definer

记一次生产数据库mysqldump导出报错案例(附解决方法)

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

记一次生产数据库mysqldump导出报错案例(附解决方法)

2、授权 root

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

记一次生产数据库mysqldump导出报错案例(附解决方法)

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方面的内容,感兴趣的朋友可以关注一下~

记一次生产数据库mysqldump导出报错案例(附解决方法)

相关推荐