我在使用 mysqldump 尝试将数据导入 Amazon Relational Database Service (Amazon RDS) for MySQL 实例时,收到类似如下的错误:

Definer error: example: /*!50003 CREATE*/ /*!50017 DEFINER=`rdsadmin`@`localhost`*/ /*!50003 TRIGGER customer_update AFTER UPDATE ON `customer` FOR EACH ROW

当 MySQL 尝试以数据库用户的身份创建对象,而该数据库用户在目标数据库中并不存在时,将会触发定义者错误。MySQL 尝试为 localhost 创建用户时您也可能会收到类似的错误消息,这是因为 Amazon RDS 不拥有超级用户权限,不允许进行此操作。

可以采用多种方式解决定义者错误:

1.    删除以下定义者行:

/*!50017 DEFINER=`rdsadmin`@`localhost`*/

该行的内容现在如下所示:

/*!50003 CREATE*/ /*!50003 TRIGGER customer_update AFTER UPDATE ON `customer` FOR EACH ROW

2. 将定义者用户“rdsadmin”和“localhost”分别重命名为“masteruser”和“%”:

/*!50003 CREATE*/ /*!50017 DEFINER=`masteruser`@`%`*/ /*!50003 TRIGGER customer_update AFTER UPDATE ON `customer` FOR EACH ROW

3.    不使用定义者选项创建或重新创建转储文件。

MySQL dump 实用工具不提供删除 DEFINER 的选项。一些 MySQL 客户端会提供在创建逻辑备份时忽略定义者的选项,但这不属于默认设置。请查看您选用的 MySQL 客户端文档,检查是否存在忽略 DEFINER 的选项。MySQL 命令行客户端无法排除定义者;但客户端可以结合第三方工具来删除 DEFINER 或者查找并替换用户名和主机。


此页面对您有帮助吗? |

返回 AWS Support 知识中心

需要帮助?请访问 AWS 支持中心

发布时间:2016 年 6 月 27 日

更新时间:2018 年 7 月 2 日