资料一
开发同学说在测试环境使用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改成相关的