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


260

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

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

Answers:


242

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

#skip-networking
#bind-address                   = 127.0.0.1

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


31
正确。绑定限制为0、1或服务器上的所有 IP地址。

7
但是请注意,您可以同时指定socketbind-address选项来发布和服务本地unix套接字和网络套接字。
丹诺顿

5
直到今天仍然如此。
丹尼斯·诺尔特

22
那太荒谬了。
菲利普2015年

2
@AJP Mysql在特权系统中将'localhost'和'127.0.0.1'区别对待。此处确认:如果您未指定主机名或指定特殊主机名localhost,则使用Unix套接字文件。
Christian Lescuyer

78

绑定到127.0.0.x不会使它在所有设备上都可用,而只能在本地使用。如果希望使其可用于所有接口,则应使用0.0.0.0。如果希望从多个接口(但少于所有接口)访问它,则应绑定到0.0.0.0,并屏蔽不想访问的接口。

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


1
除非网络堆栈损坏,否则无法将TCP端口绑定到地址0.0.0.0。
约翰·加迪尼尔

26
可以绑定到0.0.0.0。您只是无法路由到它。如果您使用的是Linux(甚至在Windows上,只需为Windows安装netcat),请尝试:在一个终端上:nc -l 0.0.0.0 4321,在另一个终端上:telnet <计算机具有的任何接口的IP> 4321将连接到它。
Gray Panther

就像我说的,除非您的网络堆栈坏了...
John Gardeniers

1
@JohnGardeniers这就是为什么它在特殊地址下定义的linux ip(7)手册页中INADDR_ANY (0.0.0.0) means any address for binding;吗?
ebyrob

2
在Debian上,创建一个/etc/mysql/conf.d/bindaddress.cnf包含内容的文件文件[mysqld] \n bind-address = 0.0.0.0
Yves Martin

41

您不能绑定多个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

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

阅读更多:


这很好。只需记住检查是否所有用户都可以从该第二个,第三个连接,无论使用
哪个

21

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

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

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


12

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

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

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

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

注意MySQL> = 8.0.13允许绑定到多个接口。
txyoji


5

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

从MySQL 8.0.13开始,--bind-address接受如上所述的单个值,或以逗号分隔的值的列表。当该选项命名一个包含多个值的列表时,每个值都必须指定一个非通配IP地址或主机名。没有人可以指定通配符地址格式(*,0.0.0.0或::)。

来源:https : //dev.mysql.com/doc/refman/8.0/en/server-options.html


3

my.cnf中进行更改(通常在Linux或Windows下为/etc/mysql/my.cnf,请检查答案。

bind-address                   = 127.0.0.1

bind-address                   = 0.0.0.0

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

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

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.