如何将 MySQL 服务器绑定到多个 IP 地址?

Bla*_*laM 295 mysql linux configuration ip

有没有一种秘密方法可以将 MySQL 绑定到多个 IP 地址?

据我所知,my.cnf 中的bind-address参数不支持多个 IP,并且您不能拥有多个 IP。

Chr*_*yer 278

不,没有(我刚在 1 小时前检查过)。您可以在 my.cnf 中注释绑定地址:

注意:“1 小时前”现在是 10 多年前。

#skip-networking
#bind-address                   = 127.0.0.1
Run Code Online (Sandbox Code Playgroud)

如果您只需要 2 个 IP,则必须使用防火墙。

对于 MySql 版本 8.0.13 及更高版本,您可以指定以逗号分隔的 IP 地址列表。

bind-address = 10.0.0.1,10.0.1.1,10.0.2.1
Run Code Online (Sandbox Code Playgroud)

相关的 MySql 文档

请记住在更改配置文件后重新启动您的 MySQL 实例。

  • 正确的。绑定仅限于服务器上的 0、1 或 *所有 * IP 地址。 (35认同)
  • 那太荒谬了。 (34认同)
  • 但是请注意,您可以通过同时指定 `socket` 和 `bind-address` 选项来发布和提供本地 unix 套接字和网络套接字。 (8认同)
  • 直到今天仍然如此。 (5认同)
  • @AJP Mysql 在权限系统中对 'localhost' 和 '127.0.0.1' 的处理方式不同。在此确认:[如果不指定主机名或指定特殊主机名 localhost,则使用 Unix 套接字文件。](http://dev.mysql.com/doc/refman/5.5/en/can-不连接到服务器.html) (2认同)

Gre*_*her 82

绑定到 127.0.0.x 不会使其对所有设备可用,它只会使其仅在本地可用。如果您希望使其可用于所有接口,则应使用 0.0.0.0。如果您希望从多个接口访问它,但少于所有接口,您应该绑定到 0.0.0.0 并防火墙关闭您不想通过其访问的接口。

此外,作为第二层安全,您应该确保所有 MySQL 用户都将主机字段设置为 % 以外的其他内容(即任何主机)。

  • 你*可以*绑定到 0.0.0.0。你只是无法路由到它。如果您使用的是 Linux(或什至在 Windows 上,只需为 Windows 安装 netcat)尝试:在一个终端中: nc -l 0.0.0.0 4321 在第二个终端中: telnet <您的计算机具有的任何接口的 IP> 4321 然后它将连接到它。 (29认同)
  • 在 Debian 上,创建一个文件 `/etc/mysql/conf.d/bindaddress.cnf` 文件,内容为 `[mysqld] \n bind-address = 0.0.0.0` (3认同)
  • @JohnGardeniers 这就是为什么它在特殊地址下定义的 linux ip(7) 手册页中:`INADDR_ANY (0.0.0.0) 表示任何绑定地址;`? (2认同)

ken*_*orb 51

您不能绑定到多个 IP 地址,但您可以绑定到所有可用的 IP 地址。如果是这样,只需0.0.0.0在您的 MySQL 配置文件(例如 /etc/mysql/my.cnf)中使用一个绑定地址,如下所示:

bind-address    = 0.0.0.0
Run Code Online (Sandbox Code Playgroud)

如果地址为 0.0.0.0,则服务器接受所有服务器主机 IPv4 接口上的 TCP/IP 连接。

此外,如果地址是::,则服务器接受所有服务器主机 IPv4 和 IPv6 接口上的 TCP/IP 连接。使用此地址允许所有服务器接口上的 IPv4 和 IPv6 连接。

或者您可以简单地完全注释掉bind-address=,因此它将绑定到所有地址。但是,skip-networking如果您还想允许远程连接,请确保您没有在 my.cnf 中启用(阅读更多:MySQL:同时允许远程和本地连接)。

更改绑定地址后,不要忘记通过以下方式重新启动 MySQL 服务器:

sudo service mysql restart
Run Code Online (Sandbox Code Playgroud)

最终你可以考虑在一台机器(不同的端口)上运行多个 MySQL 实例,使用 Master/Slave 复制。复制使数据从一台 MySQL 数据库服务器(主服务器)复制到一台或多台 MySQL 数据库服务器(从服务器)。

阅读更多:


小智 20

你不能。您链接到的页面明确指出:

要绑定到的 IP 地址。只能选择一个地址。如果多次指定此选项,则使用最后给出的地址。

如果未指定地址或 0.0.0.0,则服务器侦听所有接口。


小智 17

正如其他人所回答的那样,目前还没有一种方法可以选择性地绑定到多个接口。

Linux 有一些 TCP 工具使之成为可能。在此设置中,您将配置 mysql 以侦听 127.0.0.1,然后使用redir在任意接口上公开它。

我一直在使用它来帮助虚拟机来宾查看主机上安装的 mysql。

redir --laddr=192.168.33.1 --lport=3306 --caddr=127.0.0.1 --cport=3306 &
Run Code Online (Sandbox Code Playgroud)


ttt*_*ttt 14

在 MySQL 8.0.13 之前,--bind-address 接受单个地址值,它可以指定单个非通配符 IP 地址或主机名,或允许侦听多个网络接口的通配符地址格式之一 (*, 0.0 .0.0 或 ::)。

从 MySQL 8.0.13 开始,--bind-address 接受刚才描述的单个值,或逗号分隔值的列表。When the option names a list of multiple values, each value must specify a single non-wildcard IP address or host name; none 可以指定通配符地址格式(*、0.0.0.0 或 ::)。

来源:https : //dev.mysql.com/doc/refman/8.0/en/server-system-variables.html#sysvar_bind_address


小智 6

我认为您的问题与此错误有关http://bugs.mysql.com/bug.php?id=14979 该错误报告提出了一些解决方法。


Ale*_*vić 5

my.cnf更改(通常在 Linux 或 Windows 上的/etc/mysql/my.cnf检查答案。

bind-address                   = 127.0.0.1
Run Code Online (Sandbox Code Playgroud)

bind-address                   = 0.0.0.0
Run Code Online (Sandbox Code Playgroud)

然后在 Windows上重启 mysql(在 Ubuntu服务 mysql restart 上)通常通过Win+R services.msc服务重启

0.0.0.0 告诉它绑定到所有可用 IP 的端口也在 my.cnf 中给出