
我已經在單獨的AWS EC2執行個體上成功設定了MySQL主從情況。從屬伺服器正在運行並成功複製主伺服器。
到目前為止,一切都很好。
現在我希望能夠查詢從站(用於分析等),但我找不到正確的配置來能夠將查詢從主站發送到從站。
我收到的錯誤(取決於我的 AWS 安全性設定檔設定)是“連接被拒絕”或“連接逾時”
在從屬設備上,我有一個 EC2 安全群組允許主 IP 區塊用於連接到連接埠 3306,並且我在主設備的連接配置中使用了從屬設備的 IP 位址。
當我嘗試從主站查詢從站時,這導致了“連接被拒絕”錯誤。
在主伺服器上,我執行“show full processlist”,看到從屬主機是 AWS EC2 主機名,而不是 IP,並且連接埠 44508 被添加到末尾,因此我更改了主伺服器上的連接資訊以使用從屬主機名稱而不是IP 位址,並且從站上的安全群組設定允許來自主站的流量通過連接埠44508 而不是3306。
這導致了“連接逾時”錯誤。
我已經在從屬安全群組中嘗試了 IP/主機名稱/連接埠的組合,但只是得到這兩個錯誤之一,無論是任何組合。
任何人都可以提供有關如何配置事物的提示,以便我可以從該主機在從機上運行(只讀)查詢,並將結果傳回給主機? TIA。
兩個系統的設定相同,只是主系統也運行 Codeigniter4,這是我設定連線配置的地方:
Ubuntu 20.04.3 LTS 和 MySQL 8.0.26-0
答案1
在這樣的設定中,您的客戶端(應用程式、軟體)應該連接到從屬裝置並僅執行 SELECT 查詢(如果您需要執行寫入查詢 - 它們應該只在主裝置上完成)。
您應該檢查:
- 如果MySQL伺服器在從伺服器上監聽網路。
- 安全群組是否允許您的應用程式連接到從伺服器。
- 從站應配置為唯讀以防止問題。
答案2
已解決:在從站的/etc/mysql/mysql.conf.d/mysqld.cnf 中,我需要註解掉'bind-address' 和'mysqlx-bind-address' 行,停止從站,重新啟動mysqld 並啟動從站。
設定“bind-address = 127.0.0.1”會阻止來自其他任何地方的連接。註解掉它允許從所有來源訪問,而不僅僅是本地主機。 EC2 安全群組將對連接埠 3306 的存取僅限於主伺服器。
現在各方面都運作得很好。再次感謝您的關注。