全部產品
Search
文件中心

ApsaraDB RDS:解決無法串連執行個體問題

更新時間:Jun 18, 2026

本文介紹在各種情況下如何自助解決串連不上RDS的問題。

在搭建業務情境調試的過程中,經常會出現無法串連RDS執行個體的情況,很多時候都是由於網路類型不統一、白名單未放對應IP等導致的。以下為最常見的原因和解決辦法。

網路類型不同

  • ECS執行個體採用Virtual Private Cloud,RDS執行個體採用傳統網路

    • 解決辦法一(推薦):將RDS執行個體從傳統網路切換為VPC,具體操作請參見切換網路類型

      說明

      切換後,兩者必須處於同一個VPC,才能內網互連。

    • 解決辦法二:重新購買傳統網路的ECS執行個體(ECS執行個體不支援從VPC遷移到傳統網路)。但是VPC比傳統網路更安全,建議您使用VPC。

    • 解決辦法三:ECS執行個體使用RDS執行個體的公網串連地址串連RDS執行個體,即通過公網串連RDS執行個體。這種方式的效能、安全性、穩定性較差。

  • ECS執行個體採用傳統網路,RDS執行個體採用Virtual Private Cloud

    • 解決辦法一(推薦):將ECS執行個體從傳統網路遷移到VPC。

      說明

      切換後,兩者必須處於同一個VPC,才能內網互連。

    • 解決辦法二:將RDS執行個體從VPC切換為傳統網路。但是VPC比傳統網路更安全,建議您使用VPC。

    • 解決辦法三:使用ClassicLink功能,使傳統網路的ECS執行個體可以和VPC中的雲資源通過內網互連。

    • 解決辦法四:ECS執行個體使用RDS執行個體的公網串連地址串連RDS執行個體,即通過公網串連RDS執行個體。這種方式的效能、安全性、穩定性較差。

Virtual Private Cloud不同

Virtual Private Cloud是基於阿里雲構建的一個隔離的網路環境,專用網路之間邏輯上徹底隔離,所以當ECS和RDS執行個體的網路類型都是專用網路時,還需要保證所屬的專用網路也相同,才能實現內網互連。

地區不同

  • 公網(外網)串連:可以使用RDS執行個體的外網串連地址,通過外網跨地區/跨帳號串連,進出RDS執行個體的外網流量均不收費。

  • 內網(私網)串連:正常情況下,當ECS與RDS在不同地區或不同帳號時,無法通過內網串連(VPC互相隔離,無法互連)。但是,您可以使用VPC對等串連或雲企業網,連通兩個不同的VPC,使ECS可以跨地區或帳號訪問RDS執行個體。

    • VPC對等串連:支援跨地區/跨帳號VPC互連,成本低,但配置複雜度相對較高,適用於少量VPC互連的簡單情境。

    • 雲企業網:支援跨地區/跨帳號VPC互連,易配置,但成本相對較高,適用於多個VPC互連的複雜情境。

IP白名單設定有誤

  • 由於白名單設定中只有預設地址127.0.0.1。該地址表示不允許任何裝置訪問RDS執行個體。因此需在白名單中添加對端的IP地址,具體操作請參見設定IP白名單

  • 白名單設定成了0.0.0.0,正確格式為0.0.0.0/0。

    重要

    0.0.0.0/0表示允許任何裝置訪問RDS執行個體,請謹慎使用。

  • 如果開啟了高安全白名單,需進行如下檢查:

    • 如果使用的是專用網路的內網串連地址,請確保ECS內網IP地址添加到了專用網路的分組。

    • 如果使用的是傳統網路的內網串連地址,請確保ECS內網IP地址添加到了傳統網路的分組。

    • 如果通過公網串連,請確保裝置公網IP地址添加到了傳統網路的分組(專用網路的分組不適用於公網)。

  • 您在白名單中添加的裝置公網IP地址可能並非裝置真正的出口IP地址。原因如下:

    • 公網IP地址不固定,可能會變動。

    • IP地址查詢工具或網站查詢的公網IP地址不準確。

網域名稱解析失敗或錯誤

網域名稱伺服器出現故障或修改過網卡配置,可能會導致網域名稱解析失敗或錯誤。此時可以通過pingtelnet測試到RDS的連通性,命令如下。

ping <網域名稱>
telnet <網域名稱> <連接埠號碼>
            

樣本

# 正常樣本
[root@xxx ~]# ping rm-xxx.mysql.rds.aliyuncs.com
PING rm-xxx.mysql.rds.aliyuncs.com (192.168.0.176) 56(84) bytes of data.
64 bytes from 192.168.0.176 (192.168.0.176): icmp_seq=1 ttl=64 time=0.151 ms
64 bytes from 192.168.0.176 (192.168.0.176): icmp_seq=2 ttl=64 time=0.141 ms
64 bytes from 192.168.0.176 (192.168.0.176): icmp_seq=3 ttl=64 time=0.107 ms
64 bytes from 192.168.0.176 (192.168.0.176): icmp_seq=4 ttl=64 time=0.108 ms
# 失敗樣本
[root@izbpxxx ~]# ping rm-bp1xxx.mysql.rds.aliyuncs.com
ping: rm-bp1xxx.mysql.rds.aliyuncs.com: Name or service not known
[root@izbpxxx ~]#

# 串連正常
[root@xxx ~]# telnet rm-xxx.mysql.rds.aliyuncs.com 3306
Trying 192.168.0.176...
Connected to rm-xxx.mysql.rds.aliyuncs.com.
Escape character is '^]'.
N
5.6.16-logtEkkVNd-0!)\}\4/,/GXfu<mysql_native_password
# 串連失敗(網域名稱解析失敗)
[root@izbpxxx ~]# telnet rm-bp1xxx.mysql.rds.aliyuncs.com 3306
telnet: rm-bp1xxx.mysql.rds.aliyuncs.com: Name or service not known
rm-bp1xxx.mysql.rds.aliyuncs.com: Host name lookup failure
[root@izbpxxx ~]#

如果失敗的話,可以通過修改網卡設定檔來解決問題,具體步驟如下:

  1. 修改對應的網卡設定檔。

    vi /etc/sysconfig/network-scripts/<網卡設定檔名>
    說明

    <網卡設定檔名>:ECS伺服器使用的網卡,可以通過ifconfig查看尾碼名,預設為ifcfg-eth0。

  2. 在設定檔末尾加入如下配置。

    DNS1=100.100.XX.XX
    DNS2=100.100.XX.XX
    說明

    如果已經有DNS1DNS2配置,請將IP地址修改為如上所示。

    DEVICE=eth0
    BOOTPROTO=dhcp
    ONBOOT=yes
    DNS1=100.100.2.136
    DNS2=100.100.2.138
  3. 使用如下命令重啟Network服務。

    sudo systemctl restart network
  4. 使用如下命令查看是否修改成功。

     cat /etc/resolv.conf
    [root@xxx ~]# cat /etc/resolv.conf
    options timeout:2 attempts:3 rotate single-request-reopen
    : generated_by /usr/sbin/dhclient-script
    nameserver 100.100.2.136
    nameserver 100.100.2.138
    [root@xxx ~]#

連接埠連通性測試

網域名稱解析正常時,可通過telnet命令測試RDS執行個體連接埠是否可達。

telnet <RDS串連地址> <連接埠號碼>

例如,測試RDS MySQL執行個體的預設連接埠3306:

telnet rm-xxxx.mysql.rds.aliyuncs.com 3306
  • 輸出Connected toEscape character is,表示網路層連接埠可達。

  • 連線逾時(Connection timed out),表示網路不通或被防火牆攔截。檢查以下配置:

    • RDS白名單是否包含用戶端IP地址。

    • 安全性群組規則是否放通對應連接埠。

    • 用戶端與RDS執行個體是否在同一VPC內(內網地址僅VPC內可達)。

  • 串連被拒絕(Connection refused),表示連接埠未監聽。確認RDS執行個體運行狀態和連接埠配置。

pingtelnet均正常但應用仍報連線逾時時,問題在應用程式層而非網路層。使用tcpdump抓包分析TCP三向交握和四次揮手過程,定位逾時根因。

tcpdump -i eth0 host <RDS串連地址> -w rds_capture.pcap

分析抓包結果:SYN無回複表示網路不可達或被攔截,三向交握完成後無資料互動表示應用程式層異常。

執行個體狀態一直處於“建立網路連接”中

通過控制台進入工作清單,可對執行個體的當前任務重試,或修改切換時間。詳情請參見工作中樞

串連建立後發送FIN包無響應導致讀逾時

通過VPN或專線等中間網路訪問RDS MySQL執行個體時,串連可以正常建立和使用,但用戶端發送FIN包後服務端無響應,最終導致串連讀逾時(read timeout)。

排查步驟:

  1. 在RDS控制台執行個體詳情頁,單擊左側導覽列的參數設定,檢查wait_timeoutinteractive_timeout參數值。RDS MySQL中wait_timeout預設值為86400秒,如果該參數被設定過短,空閑串連會被服務端提前關閉。

  2. 檢查VPN或專線等中間網路鏈路是否存在丟包或高延遲。使用telnet <RDS串連地址> <連接埠號碼>測試RDS執行個體連接埠連通性,確認網路層可達。

  3. 在用戶端和服務端同時使用tcpdump或Wireshark抓包,分析TCP FIN/RST包的互動時序,定位斷連發生在網路傳輸層還是資料庫應用程式層。

通過日誌排查連線逾時

連線逾時問題可以通過查看RDS執行個體的錯誤記錄檔和慢日誌來定位原因。

  1. 登入RDS管理主控台,在實例列表頁面找到目標執行個體,進入執行個體的管理頁面。在左側導覽列選擇日誌管理 > 錯誤記錄檔

  2. 查看錯誤記錄檔中是否存在串連拒絕(如Host is blocked)或連線逾時(如connect timeoutAborted connection)等記錄,定位串連失敗的具體原因。

  3. 選擇慢日誌明細,檢查是否有長時間啟動並執行慢查詢阻塞了新串連。

  4. 檢查執行個體的wait_timeoutinteractive_timeout參數配置,判斷是否因空閑連線逾時被自動斷開。