我正在尝试设置 mysql 副本。在主服务器上,当我将bind-address
值更改为my.cnf
服务器的 IP 地址时,某些网站会崩溃,因为它们正在用作127.0.0.1
数据库主机值。
很少有其他网站(WordPress)可以运行,因为 WP 使用它localhost
作为数据库主机值。
它是生产服务器,所以我无权对所有出现故障或尝试更改的站点进行127.0.0.1
更改localhost
。
还有其他方法可以让我将 mysql 配置bind-address
值保留为服务器的 IP,并且它可以与网站配置中指定的 localhost 或 127.0.0.1 一起使用吗?
这是我的 /etc/hosts,一些值已被删除
# cat /etc/hosts
::1 localhost localhost.localdomain localhost6 localhost6.localdomain6
127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4
127.0.0.1 localhost ns123456
xx.xx.xx.xx ns123456.ip-11-22-33.net ns123456
更新
有很好的讨论https://stackoverflow.com/questions/19712307/mysql-localhost-127-0-0-1但它没有提供明确的答案。
答案1
绑定 IPv4 套接字时,BSD 套接字 API(由大多数 *nix 和其他操作系统使用)提供两种选择:绑定到单个地址,或绑定到全部使用保留地址 0.0.0.0 又名 INADDR_ANY 的地址。
为您mysqld实例既可以被使用 127.0.0.1(而不是主机地址)的本地客户端访问,也可以被必须使用主机地址的远程副本服务器访问,因此需要两个地址。要么告诉mysqld绑定两次,如果版本支持:每个地址一个套接字,或者绑定一次到 INADDR_ANY,以允许所有可能的访问。
来自文档:
如果指定了bind_address,其值必须满足以下要求:
在 MySQL 8.0.13 之前,bind_address 接受单个地址值,该值可以指定单个非通配符 IP 地址或主机名,或者允许监听多个网络接口的通配符地址格式之一(*、0.0.0.0 或 ::)。
从 MySQL 8.0.13 开始,bind_address 既可以接受上述单个值,也可以接受逗号分隔的值列表。当变量指定多个值的列表时,每个值必须指定单个非通配符 IP 地址(IPv4 或 IPv6)或主机名。值列表中不允许使用通配符地址格式(*、0.0.0.0 或 ::)。
从 MySQL 8.0.22 开始,地址可能包含网络命名空间说明符。
如有疑问,只需使用 0.0.0.0。如果服务器有多个接口或多个地址(除环回接口外),并且您不想访问所有这些接口和/或地址,那么即使如此,也应该已经设置了足够的防火墙,或者已经设置了防火墙,以处理这种情况。