AWS EC2 MySQL 复制:配置从主服务器查询从服务器

AWS EC2 MySQL 复制:配置从主服务器查询从服务器

我已成功在单独的 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 查询(如果您需要运行写入查询 - 它们应该仅在主服务器上完成)。

您应该检查:

  1. 如果 MySQL 服务器在从属服务器中监听网络。
  2. 如果安全组允许您的应用程序连接到从属服务器。
  3. 应将从属服务器配置为只读,以防止出现问题。

答案2

已解决:在从属的 /etc/mysql/mysql.conf.d/mysqld.cnf 中,我需要注释掉“bind-address”和“mysqlx-bind-address”行,停止从属,重新启动 mysqld 并启动从属。

'bind-address = 127.0.0.1' 阻止了来自其他任何地方的连接。将其注释掉可允许来自所有来源的访问,而不仅仅是本地主机。EC2 安全组将对端口 3306 的访问限制为主服务器。

现在一切都进展顺利。再次感谢您的关注。

相关内容