mysqldump: Got error: 1449: The user specified as a definer (‘xxx‘@‘%‘) does not exist when using LO

当mysqldump遇到错误1449,提示Definer用户不存在时,可以通过查询受影响的视图并修改Definer信息来解决。本文提供了详细的步骤,包括查询有问题的Definer、创建执行语句并在数据库中执行,以及如何在其他数据库中重复此过程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

目录

资料一

资料二

资料三

 自己实验

1.先用下面的语句查询哪些数据库中的definer是报错的那个用户

2. 创建执行语句

3.将上面的语句复制到mysql中执行就可以了。 

4.其他数据库再重复2-3的步骤就可以了。


 

资料一

开发同学说在测试环境使用mysqldump导出数据的时候遇到以下错误:

mysql>mysqldump -uroot -p --all-databases --routines --events --triggers --no-data > /tmp/test.sql;
Enter password:
mysqldump: Got error: 1449: The user specified as a definer ('xxx'@'%') does not exist when using LOCK TABLES

查询用户确实不存在

select User,Host from mysql.user;

因为库中的数据是从别的地方导入的。导入后就删除了上面的用户'xxx'@'%'。但是库中有一部分views是通过该用户创建的。

现在需要找出这些视图,并修改他们的定义者信息:

select concat("alter definer='root'@'localhost' view ",table_name," as ",view_definition,";")
from information_schema.views
where table_schema='property';

 执行上面查询出语句,到你的数据库中执行即可!

资料二

在给一个客户做电商项目实施的时候,mysql数据库报错The user specified as a definer (”@’%') does not exist。尝试过两种方式,第一种重启之后好用,但是一会就又不好用了。第二种算是一种完美的解决方法。此种报错主要是针对访问视图文件引起的。

第一种:

给root赋值所有权限:注意在命令符下面操作。

grant all privileges on *.* to root@”%” identified by “.”;

flush privileges;

但是这种重启之后一会就又不行了。

第二种:

复制视图创建语句,直接将create改成alter,definer改成相关的,比如

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

DN金猿

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

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

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

打赏作者

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

抵扣说明:

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

余额充值