gpt4 book ai didi

mysql - 创建 Elastic Beanstalk 环境时,有什么方法可以在创建时在 RDS MySQL 实例中创建触发器和存储过程吗?

转载 作者:行者123 更新时间:2023-11-29 15:33:44 35 4
gpt4 key购买 nike

默认情况下,在 Elastic Beanstalk 环境创建过程中创建的 RDS MySQL 实例不允许创建触发器、函数和存储过程,因为主用户没有 SUPER 权限、启用了二进制日志记录且 log_bin_trust_function_creators是假的。因此,在 container_commands 中尝试执行此操作的任何脚本都将失败。

这可以在实例化后通过使用 log_bin_trust_function_creators = 1 更改为非默认数据库参数组来解决。 。请参阅this video了解如何以交互方式进行操作的说明。但是,您似乎无法在创建时将新实例与非默认参数组关联。因此,您被迫在没有触发器和存储过程的情况下实例化,修改实例以使用非默认参数组,重新启动实例,然后才能运行脚本来创建触发器和存储过程。

更糟糕的是,您甚至无法允许创建触发器的 container_commands 运行,因为这会导致实例化失败,并且您无法获得可以应用所描述的手动干预的工作实例。因此,您需要在创建过程中注释掉您的container_commands,然后在随后的重启后“eb部署”期间重新启用。在这种情况下,您无法自动创建需要 DDL 创建触发器、函数或存储过程的环境。

最佳答案

这个问题是根据特定的 MySQL 参数编写的,但它适用于需要非默认数据库参数组的任何情况。与 AWS 技术支持进行一些讨论后,您可以在环境创建期间将非默认数据库参数组关联到 RDS 实例。我建议文档可以更好;-)

此示例特定于 MySQL 8.0 (mysql8.0),但您应该可以清楚地看出您将针对您的特定情况进行哪些更改。

将以下内容添加到 .ebextensions/中的文件

Resources:
customdbparametergroup:
Type: 'AWS::RDS::DBParameterGroup'
Properties:
Description: "DB parameter group for Beanstalk RDS instance which enables functions, procedures, and triggers"
Family: "mysql8.0"
Parameters:
"log_bin_trust_function_creators" : 1

AWSEBRDSDatabase:
Properties:
DBParameterGroupName:
Ref: customdbparametergroup

当然,如果您已有包含 Resources: 部分的配置文件,则只需添加参数组资源和 AWSEBRDSDatabase 键。当您检查创建的实例时,参数组名称将以通常的方式被破坏。您必须在配置中将参数组声明为资源,即您无法指定现有参数组的名称。

关于mysql - 创建 Elastic Beanstalk 环境时,有什么方法可以在创建时在 RDS MySQL 实例中创建触发器和存储过程吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58466792/

35 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com