无法将 MySQL EC2 主服务器连接到 RDS 从服务器

无法将 MySQL EC2 主服务器连接到 RDS 从服务器

我在设置 MySQL RDS 实例和 EC2 上的外部主实例之间的复制时遇到问题。据我所知,一切都设置正确,但从实例始终无法到达主实例,也无法更新。

主服务器是 MySQL 5.5 版本,我尝试使用 5.5、5.6 和 5.7 设置从服务器来检查版本不兼容是否是问题所在,但无论版本如何都会得到相同的结果。

主 EC2 和从属 RDS 位于同一区域和 VPC,并且它们的安全组可以在端口 3306 上互相访问。
我认为这可能是防火墙问题,因此我使用相同的设置在与 RDS 从属相同的安全组中创建了一个 EC2 从属(版本 5.5),并且该从属能够连接,所以可能不是这个问题。

EC2 从属服务器大小相同,因此可能不是空间问题。

我与 AWS RDS 工具建立了连接:

call mysql.rds_set_external_master \
    ('[ec2_master].compute.amazonaws.com', \
     3306, \
     '[master_username]', \
     '[master_password]', \
     'mysql-bin.000015', \
     17072930, \
     0);

从属设备保持“连接”状态,并且在 Last_IO_Errno 中不显示任何错误,但日志显示以下内容(一遍又一遍重复相同的消息):

[注意] 从属 SQL 线程已初始化,在日志“mysql-bin.000015”中开始复制,位置为 17072930,中继日志“/rdsdbdata/log/relaylog/relaylog.000001”位置:4
[注意] 读取中继日志事件时出错:从属 SQL 线程已被终止
[错误] 从属 I/O:连接到主服务器“[master_username]@[ec2_master].compute.amazonaws.com:3306”时出错 - 重试时间:60 重试:1,Error_code:2003
[注意] 连接到主服务器时从属 I/O 线程被终止
[注意] 从属 I/O 线程退出,读取至日志“mysql-bin.000015”,位置 17072930

以下是我的 RDS 实例的“show slave status”输出:

               Slave_IO_State: Connecting to master
                  Master_Host: [ec2_master].compute.amazonaws.com
                  Master_User: [master_username]
                  Master_Port: 3306
                Connect_Retry: 60
              Master_Log_File: mysql-bin.000015
          Read_Master_Log_Pos: 17072930
               Relay_Log_File: relaylog.000001
                Relay_Log_Pos: 4
        Relay_Master_Log_File: mysql-bin.000015
             Slave_IO_Running: Connecting
            Slave_SQL_Running: Yes
              Replicate_Do_DB:
          Replicate_Ignore_DB:
           Replicate_Do_Table:
       Replicate_Ignore_Table: mysql.plugin,mysql.rds_monitor,mysql.rds_sysinfo,mysql.rds_replication_status,mysql.rds_history,innodb_memcache.config_options,innodb_memcache.cache_policies
      Replicate_Wild_Do_Table:
  Replicate_Wild_Ignore_Table:
                   Last_Errno: 0
                   Last_Error:
                 Skip_Counter: 0
          Exec_Master_Log_Pos: 17072930
              Relay_Log_Space: 950
              Until_Condition: None
               Until_Log_File:
                Until_Log_Pos: 0
           Master_SSL_Allowed: No
           Master_SSL_CA_File:
           Master_SSL_CA_Path:
              Master_SSL_Cert:
            Master_SSL_Cipher:
               Master_SSL_Key:
        Seconds_Behind_Master: NULL
Master_SSL_Verify_Server_Cert: No
                Last_IO_Errno: 0
                Last_IO_Error:
               Last_SQL_Errno: 0
               Last_SQL_Error:
  Replicate_Ignore_Server_Ids:
             Master_Server_Id: 0
                  Master_UUID:
             Master_Info_File: mysql.slave_master_info
                    SQL_Delay: 0
          SQL_Remaining_Delay: NULL
      Slave_SQL_Running_State: Slave has read all relay log; waiting for the slave I/O thread to update it
           Master_Retry_Count: 86400
                  Master_Bind:
      Last_IO_Error_Timestamp:
     Last_SQL_Error_Timestamp:
               Master_SSL_Crl:
           Master_SSL_Crlpath:
           Retrieved_Gtid_Set:
            Executed_Gtid_Set:
                Auto_Position: 0

我在 EC2->RDS 设置中做错了什么?

答案1

[ec2_master].compute.amazonaws.com看起来像是公共 IP 地址的主机名。您应该使用 VPC 内的 EC2 计算机的私有 IP 地址。

如果 VPC 配置正确,RDS 实例可能无法访问 VPC 的 DNS 解析器,否则会导致公共主机名解析为来自内部的查询的私有 IP 地址……但无论如何,您都希望使用私有 IP。

相关内容