如何解决将数据导入启用了自动备份的 Amazon RDS MySQL 实例时出现的错误 1227?

上次更新时间:2020 年 6 月 24 日

我将使用 mysqldump 执行的逻辑备份导入到启用了自动备份的 MySQL 实例的 Amazon Relational Database Service (Amazon RDS)。我收到了类似于以下内容的错误:

“Error: 1227 SQLSTATE: 42000 (ER_SPECIFIC_ACCESS_DENIED_ERROR) Access denied; you need (at least one of) the %s privilege(s) for this operation.”

简短描述

当数据库已启用二进制日志并且 mysqldump 文件包含对象(触发器、视图、函数或事件)时,会出现此错误。有关更多信息,请参阅 MySQL 文档中的二进制日志

如果任何 create 语句都不包含“NO SQL”、“READS SQL DATA”或“DETERMINISTIC”关键字,则 MySQL 无法创建这些对象,然后导入将失败,并出现错误 1227

解决方法

要解决错误 1227,请将 log_bin_trust_function_creators 的参数组值更改为 1

要放宽此条件并允许导入所有对象,请通过 RDS 自定义参数组将 global log_bin_trust_function_creators 系统变量设置为 1。有关更多信息,请参阅修改数据库参数组中的参数

注意:由于您无法更改默认参数组中的值,如果默认参数组目前与 RDS 数据库实例关联,则您必须将一个自定义参数组与您的 RDS 数据库实例关联。将新参数组与 RDS 数据库实例关联后,您必须重启 RDS 数据库实例。

如果您有附加到 RDS 数据库实例的自定义参数组,则执行以下操作:

  1. 打开 Amazon RDS 控制台,然后从导航窗格中选择参数组
  2. 选择与 RDS 数据库实例关联的自定义参数组名称。
  3. 筛选参数字段中输入 log_bin_trust_function_creators,然后选择编辑参数
  4. log_bin_trust_function_creators更改为 1
  5. 选择保存更改
    注意:由于此参数是动态参数,并且客户参数组已经与您的 RDS 数据库实例相关联,因此 RDS 会立即应用此更改。有关更多信息,请参阅使用数据库参数组

如果您有附加到 RDS DB 实例的默认参数组,则执行以下操作:

  1. 打开 Amazon RDS 控制台,然后从导航窗格中选择参数组
  2. 选择创建参数组,然后选择与您的 RDS 数据库实例匹配的参数组系列
  3. 输入组名称描述,然后选择创建
  4. 选择新参数组名称,然后在筛选参数字段中输入 log_bin_trust_function_creators
  5. 选择编辑参数,并将 log_bin_trust_function_creators更改为 1
    注意:请确保将相同的参数组附加到出现错误的目标 RDS 数据库实例。
  6. 选择保存更改
  7. 从导航窗格中选择数据库
  8. 选择您的 RDS 数据库实例,然后选择修改
  9. 数据库选项中,选择您创建的新参数组。
  10. 选择继续
  11. 选择立即应用在下一个计划的维护时段内应用
  12. 选择修改数据库实例
  13. 手动重启 RDS 数据库实例,使您的参数组处于同步状态。
    注意:要对新关联的参数组应用更改,您必须手动重启 RDS 数据库实例。有关更多信息,请参阅使用数据库参数组

如果已启用二进制日志记录或自动备份,并且在尝试将转储导入 Amazon RDS for MySQL 实例时收到此错误,请确保您已设置 log_bin_trust_function_creators 参数。有关更多信息,请参阅我在使用 mysqldump 将数据导入我的 Amazon RDS for MySQL 实例时如何解决 definer 错误?


这篇文章对您有帮助吗?

我们可以改进什么?


需要更多帮助?