Amazon-Ec2

無法將 MySQL EC2 主伺服器連接到 RDS 從伺服器

  • June 25, 2016

我在設置 MySQL RDS 實例和 EC2 上的外部主伺服器之間的複制時遇到問題。據我所知,一切都設置正確,但奴隸永遠不會到達主人並且不會更新。

Master 是 MySQL 5.5 版本,我嘗試使用 5.5、5.6 和 5.7 設置 slave 來檢查版本不兼容是否是問題,但無論版本如何都得到相同的結果。

Master EC2和slave RDS在同一個區域和VPC,它們的安全組可以在3306埠互相訪問。

我認為這可能是防火牆問題,所以我使用相同的設置創建了一個EC2從屬(版本5.5)在與 RDS 從屬相同的安全組中,並且那個能夠連接,所以可能不是這樣。

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 中沒有顯示錯誤,但日誌給出以下資訊(一遍又一遍地重複相同的消息):

$$ Note $$從屬 SQL 執行緒已初始化,在位置 17072930 的日誌“mysql-bin.000015”中開始複製,中繼日誌“/rdsdbdata/log/relaylog/relaylog.000001”位置:4

$$ Note $$讀取中繼日誌事件時出錯:從屬 SQL 執行緒被殺死

$$ ERROR $$從站 I/O: 連接到主站時出錯’$$ master_username $$@$$ ec2_master $$.compute.amazonaws.com:3306’ - 重試時間:60 次重試:1,錯誤程式碼:2003

$$ Note $$從 I/O 執行緒在連接到主時被殺死

$$ Note $$從 I/O 執行緒退出,讀取日誌 ‘mysql-bin.000015’,位置 17072930

這是我的 RDS 實例的“顯示從屬狀態”的輸出:

              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 設置上做錯了什麼?

[ec2_master].compute.amazonaws.com看起來像公共 IP 地址的主機名。您應該在 VPC 內使用 EC2 機器的私有 IP 地址。

RDS 實例可能無法訪問 VPC 的 DNS 解析器,否則如果 VPC 配置正確,這將導致公共主機名解析為來自內部的查詢的私有 IP 地址……但無論如何,您將想使用私有IP。

引用自:https://serverfault.com/questions/786173