使用 AWS OpsWorks 覆盖 RDS 中的 my.conf 模板

Posted

技术标签:

【中文标题】使用 AWS OpsWorks 覆盖 RDS 中的 my.conf 模板【英文标题】:Overriding my.conf template in RDS using AWS OpsWorks 【发布时间】:2016-06-20 06:08:21 【问题描述】:

我正在尝试将我的 RDS 实例默认字符集更改为 utf8mb4,以便支持表情符号。我有一个repo with all my recipes,我过去曾用它来自定义我的部署。我关注了来自 AWS 的 this guide,但是当我部署应用程序时,更改不会反映在数据库中。我还确保在我的自定义食谱存储库的mysql 目录的根目录中创建一个metadata.rb 文件。

我还使用新的属性组设置了一个新的 RDS 实例,其中适当的字符集和排序规则设置为 utf8mb4。该数据库也被设置为我在 OpsWorks 中的应用程序中的数据源。

在 Rails 中,我还将编码和排序规则设置为 utf8mb4...

default: &default
  adapter: mysql2
  encoding: utf8mb4
  collation: utf8mb4_general_ci
  ...

如果我 ssh 进入我的应用程序服务器,然后连接到 MySql,这就是我在查询全局变量时看到的...

mysql> SHOW GLOBAL VARIABLES WHERE Variable_name LIKE 'character\_set\_%' OR Variable_name LIKE 'collation%';
+--------------------------+--------------------+
| Variable_name            | Value              |
+--------------------------+--------------------+
| character_set_client     | utf8mb4            |
| character_set_connection | utf8mb4            |
| character_set_database   | utf8mb4            |
| character_set_filesystem | binary             |
| character_set_results    | utf8mb4            |
| character_set_server     | utf8mb4            |
| character_set_system     | utf8               |
| collation_connection     | utf8mb4_unicode_ci |
| collation_database       | utf8mb4_unicode_ci |
| collation_server         | utf8mb4_unicode_ci |
+--------------------------+--------------------+

但是当我对非全局变量做同样的事情时,我看到了:

mysql> show variables like 'char%';
+--------------------------+-------------------------------------------+
| Variable_name            | Value                                     |
+--------------------------+-------------------------------------------+
| character_set_client     | utf8                                      |
| character_set_connection | utf8                                      |
| character_set_database   | utf8mb4                                   |
| character_set_filesystem | binary                                    |
| character_set_results    | utf8                                      |
| character_set_server     | utf8mb4                                   |
| character_set_system     | utf8                                      |
| character_sets_dir       | /rdsdbbin/mysql-5.6.23.R1/share/charsets/ |
+--------------------------+-------------------------------------------+
8 rows in set (0.00 sec)

我还应该提到,在我使用迁移将适当的表和列设置为 utf8mb4 后,这在本地可以正常工作。

此时,我无法弄清楚为什么我无法正确应用字符集。希望比我聪明的人能帮我解决这个问题!

谢谢

【问题讨论】:

【参考方案1】:

在深入挖掘之后,我意识到我在更新自定义食谱时错过了一个关键步骤。我没有意识到简单地进行部署不会检索新配方。在我运行命令以“更新自定义食谱”然后进行部署后,它起作用了。

希望这对将来的某人有所帮助。

【讨论】:

以上是关于使用 AWS OpsWorks 覆盖 RDS 中的 my.conf 模板的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 Cloudformation 向 OpsWorks 堆栈注册 RDS 实例?

使用 customResource 将 RDS 层注册到 opsworks 堆栈

通过 Cloudformation 模板创建 RDS Opsworks 层

terraform:如何覆盖 AWS RDS 最终快照

带有 AWS Opsworks Mysql 层的 Mysql 5.6?

我可以使用/覆盖 AWS OpsWork 的内置 unicorn::rails 配方安装自定义构建的 nginx 吗?