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

据我所见,my.cnf中的bind-address参数不支持多个IP,您可以不止一次。

评论

正如Tadej的回答所示,从8.0.13版本开始,这已经成为可能。另请参阅“ –bind-address选项现在支持多个地址”。但是,它仍然不如PostgreSQL灵活,并且在MariaDB v。10中仍然不受支持。

#1 楼

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

注意:«1小时前»距今已有10多年了。

#skip-networking
#bind-address                   = 127.0.0.1

如果如果只需要2个IP,则必须使用防火墙。
对于MySql 8.0.13及更高版本,可以指定用逗号分隔的IP地址的列表。
bind-address = 10.0.0.1,10.0.1.1,10.0.2.1

相关的MySql文档。

评论


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

–乔
2010-09-14 21:01

但是请注意,通过指定socket和bind-address选项,您既可以发布本地unix套接字,也可以发布网络套接字。

–丹诺顿
2012年3月30日17:04



直到今天仍然如此。

–丹尼斯·诺尔特
2014年8月11日下午13:07

那太荒谬了。

– Phillipp
2015年12月11日在15:01

@AJP Mysql在特权系统中对“ localhost”和“ 127.0.0.1”的处理不同。此处确认:如果您未指定主机名或指定特殊主机名localhost,则使用Unix套接字文件。

–克里斯蒂安·莱斯库(Christian Lescuyer)
16 Apr 15 '18:02

#2 楼

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

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

评论


除非网络堆栈损坏,否则无法将TCP端口绑定到地址0.0.0.0。

–约翰·加迪尼尔(John Gardeniers)
2010年5月6日在22:49

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

–灰色豹
2010年5月18日在16:49

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

–约翰·加迪尼尔(John Gardeniers)
2010-6-25 at 2:58

@JohnGardeniers这就是为什么它在特殊地址下定义的linux ip(7)手册页中:INADDR_ANY(0.0.0.0)表示任何要绑定的地址;吗?

– ebyrob
13年7月24日在17:06

在Debian上,创建一个文件/etc/mysql/conf.d/bindaddress.cnf,其内容为[mysqld] \ n bind-address = 0.0.0.0

–伊夫·马丁(Yves Martin)
13年8月16日在12:07



#3 楼

您不能绑定多个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=,这样它将绑定到所有地址。但是,如果还要允许远程连接,请确保未在my.cnf中启用skip-networking(更多信息:MySQL:允许远程和本地连接)。

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

主/从复制的不同端口)。复制使数据可以从一台MySQL数据库服务器(主服务器)复制到一台或多台MySQL数据库服务器(从服务器)。

更多信息:



5.3在MySQL.com上在一台计算机上运行多个MySQL实例

第17章在MySQL.com上进行复制


评论


这很好。只要记住检查是否允许所有用户从该第二,第三连接即可,无论IP地址如何

–gies0r
19年8月9日在14:15

#4 楼

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

要绑定的IP地址。只能选择一个地址。如果多次指定此选项,则使用给定的最后一个地址。
如果未指定地址或0.0.0.0,则服务器在所有接口上侦听。


#5 楼

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

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

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


评论


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

–txyoji
19年6月21日在20:09

#6 楼


在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-system-variables.html#sysvar_bind_address

评论


在my.cnf中为我工作:bind-address = 127.0.0.1,192.168.1.3

–obe
8月25日11:38

#7 楼

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

评论


MySQL功能要求可以追溯到2005年!

–胎蛋白
2014年4月24日14:02

#8 楼

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

bind-address                   = 127.0.0.1




bind-address                   = 0.0.0.0
然后在Windows上重启mysql(在Ubuntu服务上重启mysql)通常通过Win + R服务重启。msc

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