使用 AWS RDS 在 MySQL5.7 和 MariaDB10.6 上进行复制的故事

我在AWS RDS上尝试将MySQL5.7作为主数据库,MariaDB10.6作为读取副本进行复制。

目标或目的

为了验证在AWS RDS上从MySQL5.7无停机切换到MariaDB10.6是否可行。

总结

作为一种方法,首先建立常规的MySQL5.7复制,停止读取副本的复制,并确认主服务器的位置,获取停止复制状态下的快照,并基于该快照通过RDS的快照迁移功能创建MariaDB。从创建的MariaDB开始将复制到主服务器的MySQL5.7。这就是整个流程。

程序

    1. 构建标准化的MySQL 5.7复制系统

 

    1. 停止复制到读取副本

 

    1. 确认主服务器的位置信息

 

    1. 获取读取副本的快照

 

    1. 执行快照迁移(*在目标数据库选择MariaDB)

 

    1. 在新创建的MariaDB上启动复制

 

    删除不再需要复制的读取副本

详细 = 细节全面。

搭建MySQL 5.7的标准复制方案

使用以下步骤创建读取副本:
1. 登录AWS控制台
2. 进入RDS服务
3. 选择任意的MySQL5.7服务器单选按钮
4. 点击操作
5. 选择创建读取副本

停止在领先复制品中的复制。

用创建的领导复制品停止复制。

CALL mysql.rds_stop_replication;

确认大师位置信息

从领导复制品中参考并确认主人的信息

mysql> show slave status \G;
*************************** 1. row ***************************
               Slave_IO_State:
                  Master_Host: 172.X.X.X
                  Master_User: rdsrepladmin
                  Master_Port: 3306
                Connect_Retry: 60
              Master_Log_File: mysql-bin-changelog.000032
          Read_Master_Log_Pos: 154
〜(略)〜

获取领先复制品的快照

AWS控制台 > RDS > 选择创建的读取副本的单选按钮 > 操作 > 获取快照

进行快照迁移

AWS控制台 > RDS > 選擇已創建的讀取複本的單選按鈕 > 操作 > 遷移快照 > 選擇資料庫引擎名稱為mariadb

在进行后续操作时,请根据各个环境进行相应的设置。
关于主从复制的复制操作,建议在工作期间始终保持停止状态(因为根据max_binlog_size的设置,Master_Log_File可能会被轮换,导致后续无法启动复制操作)。

在新建的MariaDB中开始复制。

CALL mysql.rds_set_external_master(
'<hostname>',
<port>,
'<username>',
'<password>',
'<Master_Log_Fileの値>',
<Read_Master_Log_Posの値>,
0
);

CALL mysql.rds_start_replication;

mysql> show slave status \G;
〜(略)〜
              Slave_IO_Running: Yes
             Slave_SQL_Running: Yes

确认Slave_IO_Running和Slave_SQL_Running均为是

删除不再需要的读取副本,因为不再需要复制。

在AWS控制台中,导航到RDS,选择已创建的读取副本的单选按钮,点击“操作”,然后选择“删除”。

已经完成了

审查

尽管这不是AWS公认的方法,但我发现可以使用这种方法在MySQL 5.7中创建MariaDB 10.6的读取副本。

如果巧妙地运用这种方法,可能能够实现从MySQL5.7无间断切换至MariaDB10.6。