ted*_*ers 50 triggers amazon-rds
我正在尝试在我的Amazon RDS数据库中的表上创建一个触发器,我似乎无法实现它.
我试图在我使用的mysql客户端(Navicat)的表上创建一个触发器,并得到了我需要SUPER权限的错误.经过一番搜索,我发现你可以SET GLOBAL log_bin_trust_function_creators = 1
解决这个问题.我尝试使用这些说明:http://getasysadmin.com/2011/06/amazon-rds-super-privileges/(然后重新启动数据库服务器以获得良好的衡量标准),但没有运气.
我也尝试通过mysql命令行创建触发器并设置变量,以确保Navicat没有向我的sql命令添加任何不需要的东西,但也失败了.从搜索中看,似乎没有办法给自己超级特权.
那么......是否可以在RDS中创建触发器?
fox*_*gga 110
这很简单!
打开RDS Web控制台.
打开"参数组"选项卡.
创建一个新的参数组.在对话框中,选择与MySQL数据库版本兼容的MySQL系列,为其命名并确认.
选择刚刚创建的参数组并发出"编辑参数".
查找参数'log_bin_trust_function_creators'并将其值设置为'1'.
保存更改.
打开"实例"选项卡.展开您的MySQL实例并发出名为"Modify"的"Instance Action".
选择刚刚创建的参数组并启用"立即应用".
单击"继续"并确认更改.
再次,打开"Instances"选项卡.展开您的MySQL实例并发出名为"Modify"的"Instance Action".
别忘了:打开"Instances"选项卡.展开您的MySQL实例并发出名为"Reboot"的"Instance Action".
通过 - http://techtavern.wordpress.com/2013/06/17/mysql-triggers-and-amazon-rds/
小智 38
不,它实际上并非不可能只需要太多的额外工作.
首先,似乎无法将Super Privileges应用于默认参数组.所以我要做的是通过控制台或CLI创建一个新的数据库参数组.
我发现的关键是默认区域不是我尝试使用的区域,因此我必须使用--region参数将其应用于我部署数据库实例的正确区域中的组
rds-create-db-parameter-group --db-parameter-group-name allow-triggers --description'参数组允许触发' - 区域你的区域
接下来,我必须创建一个使用该参数组的数据库实例.(再次通过控制台或CLI)
RDS-创建-DB实例
然后我必须修改参数组以允许log_bin_trust_function_creators只能通过CLI完成
rds-modify-db-parameter-group --db-parameter-group-name yourgroupname --region yourRegion --parameters'name = log_bin_trust_function_creators,value = true,method = immediate'
最后,我必须修改创建的数据库实例以允许触发器,也仅限CLI.
rds-modify-db-instance --db-instance-identifier your-db-instance-id --db-parameter-group-name allow-triggers --apply-immediately
Wil*_*ler 16
除了其他人已经提到的参数组修改之外,当使用MySQL数据库转储(通过mysqldump)在AWS RDS实例中创建触发器时,还会出现进一步的挑战.您可能会收到如下消息:
ERROR 1227 (42000) at line 875: Access denied; you need (at least one of) the SUPER privilege(s) for this operation
Run Code Online (Sandbox Code Playgroud)
发生这种情况是因为转储包含"definer"条目,其用户名与RDS主用户名不同.一种解决方案是使用您的RDS主用户名替换定义者用户名.另一种解决方案是不使用mysqldump来创建数据库.
有关更多信息,请参阅此博客文章:
http://www.percona.com/blog/2014/07/02/using-mysql-triggers-and-views-in-amazon-rds/
编辑:事实证明,MySQL的多可用区使用"物理复制"而不是逻辑复制,因此这可能不正确.至少这是他们的文档所说的:https://aws.amazon.com/rds/details/multi-az/ - 我在他们的论坛上询问这意味着什么,但没有得到答复.奇怪的是,我的RDS多可用区实例声称它是"复制设置中的主人",即使我没有只读副本.
由于这个问题已经得到解决,这不仅是一个答案:
我很惊讶没有人考虑为什么这个功能不是默认的.亚马逊不会为了让人们的生活更加困难而禁用它.
在主/从复制中,使用修改数据的存储过程和触发器可能是危险的(如执行SELECT以外的查询).
在主/从设置中禁用此限制之前请阅读下面的内容,当您使用多可用区时,Amazon RDS就是这种限制(至少您应该这样做).
http://dev.mysql.com/doc/refman/5.6/en/stored-programs-logging.html
归档时间: |
|
查看次数: |
29843 次 |
最近记录: |