MySQL 允许在 my.cnf 文件中将参数 SQL_MODE 设置为多个值。如何在 Amazon RDS 上执行相同操作?
更新:这个问题已经解决了......见下文。
MySQL 允许在 my.cnf 文件中将参数 SQL_MODE 设置为多个值。如何在 Amazon RDS 上执行相同操作?
更新:这个问题已经解决了......见下文。
MySQL 允许在 my.cnf 文件中将参数 SQL_MODE 设置为多个值。但是,Amazon RDS 只允许一个值,无论您使用他们基于浏览器的控制台还是他们的 CLI 工具。
对于无法将 SQL_MODE 设置为多个值的问题,我找到了一个(也许不是完美的)解决方案。在下面的过程中,我展示了我的设置。您可以选择您认为与您的环境相关的任何值。
1)在您的参数组中,设置 SQL_MODE = TRADITIONAL (或任何一个值是您的最高优先级)
2) 在您的参数组中,将 init_connect 设置为:SET SESSION sql_mode = 'TRADITIONAL,IGNORE_SPACE,NO_ENGINE_SUBSTITUTION,ONLY_FULL_GROUP_BY'
现在,当客户端登录到数据库时,他们的会话 SQL_MODE 应该设置为 init_connect 字符串传入的所有值。就我而言,这相当于:IGNORE_SPACE、ONLY_FULL_GROUP_BY、STRICT_TRANS_TABLES、STRICT_ALL_TABLES、NO_ZERO_IN_DATE、NO_ZERO_DATE、ERROR_FOR_DIVISION_BY_ZERO、TRADITIONAL、NO_AUTO_CREATE_USER、NO_ENGINE_SUBSTITUTION
警告:在设置后编辑 init_connect 值涉及剪切-粘贴。但是,我发现在设置后尝试删除 init_connect 值很麻烦,所以在使用它时要小心。麻烦吗?要在设置后删除 init_connect 值,我需要从头开始创建一个新的 parm 组,将除 init_connect 之外的所有值设置为原始 parm 组的值,删除原始 parm 组,然后用旧名称重命名新组。Firefox 和 Chrome 都是如此。我也无法使用 CLI 工具 (aws rds modify-db-parameter-group) 删除该值。
虽然不是这篇文章的真正一部分,但如果有人回答如何删除/重置/null-out init_connect 而没有我上面描述的那种麻烦,那就太好了。
更新 1:
没关系。我发现 init_connect 设置(在 RDS 上)将无法在数据库重新启动后继续存在。因此,我上面提供的解决方案不起作用。
此外,由于无法通过控制台删除(删除)init_connect 设置(为什么不呢?),所以可以使用aws rds reset-db-parameter-group CLI 命令将其删除,而不是像我之前描述的那样重建整个参数组.
我对 Amazon RDS 感到非常失望:
更新 2:
根据 Ross Scrivener 的回复,我测试了通过 AWS 控制台设置多个 SQL_MODE 值。我使用了值“TRADITIONAL,IGNORE_SPACE,ONLY_FULL_GROUP_BY”(没有空格)。然后我重新启动了服务器两次,一切似乎都已经完成了。
感谢 Amazon 修复此问题,并感谢 Ross Scrivener 指出 AWS 的变化。
有帮助的是,亚马逊似乎已于 2016 年 5 月 24 日修复此问题
该
sql_mode
参数现在可以设置为所有 MySQL 和 MariaDB 版本的值列表。值列表在所有地区也应该是正确的。