![AWS EC2 MySQL 复制:配置从主服务器查询从服务器](https://linux22.com/image/770594/AWS%20EC2%20MySQL%20%E5%A4%8D%E5%88%B6%EF%BC%9A%E9%85%8D%E7%BD%AE%E4%BB%8E%E4%B8%BB%E6%9C%8D%E5%8A%A1%E5%99%A8%E6%9F%A5%E8%AF%A2%E4%BB%8E%E6%9C%8D%E5%8A%A1%E5%99%A8.png)
我已成功在单独的 AWS EC2 实例上设置了 MySQL 主从情况。从属服务器正在运行并成功复制主服务器。
到目前为止,一切都很好。
现在我希望能够查询从属服务器(进行分析等),但我找不到正确的配置以便能够从主服务器向从属服务器发送查询。
我收到的错误(取决于我的 AWS 安全配置文件设置)是“连接被拒绝”或“连接超时”
在从属服务器上,我有一个 EC2 安全组允许主服务器 IP 块用于连接端口 3306,并且我在主服务器的连接配置中使用了从属服务器的 IP 地址。
当我尝试从主服务器查询从服务器时,出现了“连接被拒绝”错误。
在主服务器上,我运行了“显示完整进程列表”,看到从属主机是 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 的访问限制为主服务器。
现在一切都进展顺利。再次感谢您的关注。