失眠网,内容丰富有趣,生活中的好帮手!
失眠网 > mysql 加密 en_以极少的停机时间加密运行 MySQL 或 MariaDB 的 Amazon RDS 数据库实例...

mysql 加密 en_以极少的停机时间加密运行 MySQL 或 MariaDB 的 Amazon RDS 数据库实例...

时间:2021-10-26 13:19:21

相关推荐

mysql 加密 en_以极少的停机时间加密运行 MySQL 或 MariaDB 的 Amazon RDS 数据库实例...

如何以极少的停机时间对未加密的 Amazon RDS MySQL 或 MariaDB 数据库实例进行加密?

上次更新时间: 年 8 月 19 日

我尝试为未加密的 Amazon Relational Database Service (Amazon RDS) MySQL 或 MariaDB 实例创建加密只读副本。但是我收到了以下错误:

“您无法从未加密的数据库实例创建加密只读副本。(服务:AmazonRDS;状态代码:400;错误代码:InvalidParameterCombination;请求 ID:”

如何以极少的停机时间对未加密的数据库实例进行加密?

简短描述

Amazon RDS 对加密的数据库实例有以下限制:

无法通过修改现有未加密的 Amazon RDS 数据库实例来加密该实例。

无法在未加密实例的基础上创建加密的只读副本。

执行以下操作:

1.对您拍摄的该实例的未加密只读副本的未加密快照进行加密。

2.从加密快照还原新的 RDS 数据库实例,以此部署新的加密数据库实例。

3.使用 MySQL 复制功能将更改从源数据库实例同步到新的加密数据库实例。

4.验证新的加密数据库实例与源数据库实例是否同步。

5.切换连接,并将您的流量重定向到新数据库实例。

此过程可实现最短的停机时间。

解决方法

1.为未加密的源 Amazon RDS 数据库实例创建临时只读副本。在此示例中,未加密的源数据库实例称为 SOURCE-UE,临时只读副本称为 TEMP-RR。

2.连接到 TEMP-RR,然后监控副本滞后情况,直到 Seconds_Behind_Master 稳定在 0 值。这表明 TEMP-RR 与 SOURCE-EU 同步:

mysql> SHOW SLAVE STATUS \G

Seconds_Behind_Master: 0

MySQL > call mysql.rds_stop_replication;

+---------------------------+

| Message |

+---------------------------+

| Slave is down or disabled |

+---------------------------+

4.记下来自 TEMP-RR 的 Relay_Master_Log_File 和 Exec_Master_Log_Pos 的值:

mysql> SHOW SLAVE STATUS \G

Relay_Master_Log_File: mysql-bin-changelog.000012

Exec_Master_Log_Pos: 123

5.在

SOURCE-EU 中,设置

binlog retention hours 参数,以便在完成操作所需的时间内保留二进制日志。在以下示例中,

binlog retention hours 设置为 24 小时:

mysql> call mysql.rds_set_configuration('binlog retention hours', 24);

6.为 TEMP-RR 拍摄快照。您也可以选择在拍摄快照后删除 TEMP-RR。

7.复制 TEMP-RR 的快照,然后将启用加密设置为是。

8.从已启用加密的已复制快照还原新的数据库实例。在此示例中,新的加密数据库实例称为 NEW-RR-EN。

9.修改 SOURCE-EU 的安全组中的入站规则,以允许来自 NEW-RR-EN 的流量。如果两个数据库实例使用的安全组相同,则您可以使用与 SOURCE-EU 相同的安全组 ID 参考。从 Amazon RDS 控制台中选择数据库。选择数据库实例,然后选择连接与安全选项卡。选择安全组,然后选择入站选项卡。选择编辑,输入您的安全组 ID,然后选择保存。

注意:请确保允许从 NEW-RR-EN 到SOURCE-EU 的出站流量。

10.登录 SOURCE-EU,设置复制用户,然后向该用户授予必要的权限:

mysql> create user repl_user@'%' identified by ‘password123’;

mysql> grant replication slave, replication client on *.* to repl_user@'%';

mysql> show grants for repl_user@'%';

注意:将 repl_user 和 password123 分别替换成您自己的复制用户名和密码。

11.连接 NEW-RR-EN,然后建立到 SOURCE-EU 的复制连接:

mysql> CALL mysql.rds_set_external_master ( 'rds-endpoint' , 3306 , 'repl_user' , 'password123’ , 'mysql-bin.000012' , 123 , 0 );

注意:rds-endpoint 是 SOURCE-EU 的终端节点。如果未加密的源数据库实例 (SOURCE-UE) 可公开访问(数据库实例的可公开访问属性设置为是),则需要提供一个私有 IP 地址而不是 rds-endpoint。

用户名 (repl_user) 和密码 (password123) 与您在第 10 步中创建的用户名和密码相同。使用在第 4 步获得的 Relay_Master_Log_File 和 Exec_Master_Log_Pos 的值,来使用 mysql.rds_set_external_master procedure 设置复制。

12.在 NEW-RR-EN 中,开始复制:

mysql > CALL mysql.rds_start_replication;

13.在 NEW-RR-EN 中,确认 SOURCE-EU和 NEW-RR-EN 之间的复制保持同步。

mysql> SHOW SLAVE STATUS \G

Seconds Behind master: 0

14. 当 Seconds_Behind_Master 稳定在 0 值后,停止流量并关闭 SOURCE-EU 上的连接。停机随后开始。

注意:必须停止连接到 SOURCE-EU 的所有应用程序服务器和客户端,以确保未对 SOURCE-EU 作出任何新的更改。您还可以临时锁定 SOURCE-EU 使用的安全组。这可以阻止来自任何任何应用程序或客户端(NEW-RR-EN 以及用户执行这些操作时所使用的主机除外)的入站流量。

15.以数据库主用户身份连接到 NEW-RR-EN并停止复制:

MySQL > call mysql.rds_stop_replication;

重要提示:运行此命令后,NEW-RR-EN 将不会从 SOURCE-EU 复制数据。

16.停止 SOURCE-EU 和 NEW-RR-EN 之间的复制关系,以将 NEW-RR-EN 提升为独立服务器:

MySQL > call mysql.rds_reset_external_master;

17.在所有连接字符串中指定 NEW-RR-EN 的 DNS 终端节点,以将所有应用程序、客户端和数据库连接指向 NEW-RR-EN。或者,您可以重命名 SOURCE-EU,然后修改 NEW-RR-EN,以使用与 SOURCE-EU 所用相同的名称。

18.确认 NEW-RR-EN 上的安全组规则允许来自相应应用程序和客户端的入站流量。

19. 将应用程序和客户端均指向 NEW-RR-EN 并测试了环境后,便可以删除 SOURCE-EU。

提示:最佳实践是先在还原后的实例上测试此项操作,然后再在生产环境中应用此项操作。

如果觉得《mysql 加密 en_以极少的停机时间加密运行 MySQL 或 MariaDB 的 Amazon RDS 数据库实例...》对你有帮助,请点赞、收藏,并留下你的观点哦!

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。