最近在做一个项目,由于服务器切换,所以需要将原有服务器的mysql数据表以及存储过程导入到另一个服务器的mysql数据库中。
导数据的过程中报如下错误
**[Err] 1449 - The user specified as a definer ('admin'@'%') does not exist**
一般是由于admin用户调用存储过程或者查询视图无访问权限。因此只要给admin用户添加一个访问权限即可。
解决办法:
打开navicat的命令行模式:
**执行如下sql即可
**
mysql>grant all privileges on *.* to admin@"%" identified by ".";
Query OK, 0 rows affected (0.00 sec)
不过在此操作之前,你要确定是否可以给这个用户全部的权限。
然后一定要运行这句指令;【该指令的意思为:刷新权限】
mysql> flush privileges;
Query OK, 0 rows affected (0.00 sec)
对执行的指令有兴趣的可以参见以下内容:
指定范围:
@'localhost' :指本机使用'admin'账号才可访问
@'IP地址 :'指定该IP地址使用'admin'账号才可访问。
@'%' :任何电脑连接此数据库使用'admin'账号才可访问。
指定权限:
权限列表:
ALTER: 修改表和索引。
CREATE: 创建数据库和表。
DELETE: 删除表中已有的记录。
DROP: 抛弃(删除)数据库和表。
INDEX: 创建或抛弃索引。
INSERT: 向表中插入新行。
REFERENCE: 未用。
SELECT: 检索表中的记录。
UPDATE: 修改现存表记录。
FILE: 读或写服务器上的文件。
PROCESS: 查看服务器中执行的线程信息或杀死线程。
RELOAD: 重载授权表或清空日志、主机缓存或表缓存。
SHUTDOWN: 关闭服务器。
ALL: 所有权限,ALL PRIVILEGES同义词。
USAGE: 特殊的 "无权限" 权限。
指令解析
grant all privileges on *.* to 'admin'@'%' identified by '123456' with grant option;
1、all privileges:
表示将所有权限授予给用户。也可指定具体的权限,如:SELECT、CREATE、DROP等。
2、on:
表示这些权限对哪些数据库和表生效,格式:数据库名.表名,这里写“*”表示所有数据库,所有表。如果我要指定将权限应用到test库的user表中,可以这么写:test.user
3、to:
将权限授予哪个用户。格式:
”用户名”@”登录IP或域名”。
% 表示没有限制,在任何主机都可以登录
4、identified by
指定用户的登录密码
5、with grant option:
表示允许用户将自己的权限授权给其它用户
可以使用GRANT给用户添加权限,权限会自动叠加,不会覆盖之前授予的权限,比如你先给用户添加一个INSERT权限,后来又给用户添加了一个SELECT权限,那么该用户就同时拥有了SELECT和INSERT权限。