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


有没有秘密的方法将MySQL绑定到多个IP地址?

据我所知 绑定地址 my.cnf中的参数不支持多个IP,你不能多次使用它。


245
2017-09-02 16:04






答案:


不,没有(我刚刚1小时前检查过)。你可以在my.cnf中评论bind-address:

#skip-networking
#bind-address                   = 127.0.0.1

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


228
2017-09-02 16:08



正确。绑定限制为0,1或 所有 服务器上的IP地址。 - Joe
但请注意,您可以通过指定两者来发布和提供本地unix套接字和网络套接字 socket 和 bind-address 选项。 - danorton
截至今天仍然如此。 - Dennis Nolte
这太荒谬了。 - Phillipp
@AJP Mysql在权限系统中以不同方式处理'localhost'和'127.0.0.1'。在这里确认: 如果未指定主机名或指定特殊主机名localhost,则使用Unix套接字文件。 - Christian Lescuyer


绑定到127.0.0.x将不会使其可用于所有设备,它将仅在本地可用。如果您希望将其用于所有接口,则应使用0.0.0.0。如果您希望从多个接口(但不是所有接口)访问它,则应绑定到0.0.0.0并从不希望通过其访问的接口上防火墙。

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


76
2017-09-02 16:29



除非您的网络堆栈损坏,否则无法将TCP端口绑定到地址0.0.0.0。 - John Gardeniers
您 能够 绑定到0.0.0.0。你无法路由它。如果你在Linux上(甚至在Windows上,只需安装netcat for windows),请尝试:在一个终端:nc -l 0.0.0.0 4321和第二个终端:telnet <你的计算机所有接口的IP> 4321它将连接到它。 - Grey Panther
正如我所说,除非你有一个破碎的网络堆栈...... - John Gardeniers
@JohnGardeniers这就是为什么它在特殊地址下定义的linux ip(7)手册页中: INADDR_ANY (0.0.0.0) means any address for binding;? - ebyrob
在Debian上,创建一个文件 /etc/mysql/conf.d/bindaddress.cnf 带内容的文件 [mysqld] \n bind-address = 0.0.0.0 - Yves Martin


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

bind-address    = 0.0.0.0

如果地址为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

最终,您可以考虑在具有主/从复制的单个计算机(不同端口)上运行多个MySQL实例。复制允许将来自一个MySQL数据库服务器(主服务器)的数据复制到一个或多个MySQL数据库服务器(从服务器)。

阅读更多:


33
2017-08-11 09:37



实际上我希望有一个选项绑定到某些地址,但不是所有地址。 - BlaM


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

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

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


19
2017-09-14 20:45





正如其他人已经回答的那样,还没有办法选择性地绑定到多个接口。

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

我一直用它来帮助虚拟盒客户看到主机上安装的mysql。

redir --laddr=192.168.33.1 --lport=3306 --caddr=127.0.0.1 --cport=3306 &

8
2018-02-24 20:23





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


6
2017-09-02 16:14



MySQL功能请求可以追溯到2005年! - Tonin


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

bind-address                   = 127.0.0.1

bind-address                   = 0.0.0.0

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

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


2
2017-09-19 18:34