【问题标题】:How to bind MySQL server to more than one IP address?如何将 MySQL 服务器绑定到多个 IP 地址?
【发布时间】:2008-09-02 16:04:18
【问题描述】:

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

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

【问题讨论】:

标签: linux mysql ip configuration


【解决方案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

Relevant MySql documentation.

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

【讨论】:

【解决方案2】:

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

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

【讨论】:

  • 除非您的网络堆栈损坏,否则您无法将 TCP 端口绑定到地址 0.0.0.0。
  • 可以绑定到 0.0.0.0。你只是无法路由到它。如果您在 Linux 上(甚至在 Windows 上,只需为 windows 安装 netcat)尝试:在一个终端中:nc -l 0.0.0.0 4321 在第二个终端中:telnet 4321 And it将连接到它。
  • 如我所说,除非您的网络堆栈损坏...
  • @JohnGardeniers 这就是为什么它在特殊地址下定义的 linux ip(7) 手册页中:INADDR_ANY (0.0.0.0) means any address for binding;
  • 在 Debian 上,创建一个文件 /etc/mysql/conf.d/bindaddress.cnf 文件内容为 [mysqld] \n bind-address = 0.0.0.0
【解决方案3】:

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

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: Allow both remote AND local connections)。

修改绑定地址后,别忘了重启你的MySQL服务器:

sudo service mysql restart

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

阅读更多:

【讨论】:

  • 这很好用。请记住检查是否所有用户都可以从第二、第三、任何 IP 地址进行连接
【解决方案4】:

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

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

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

【讨论】:

    【解决方案5】:

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

    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 允许绑定到多个接口。
    • rinetd 将是一个类似的解决方案...
    【解决方案6】:

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

    从 MySQL 8.0.13 开始,--bind-address 只接受单个值 描述,或逗号分隔值的列表。 When the option names 多个值的列表,每个值必须指定一个 非通配符 IP 地址或主机名; none 可以指定通配符 地址格式(*、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
    【解决方案7】:

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

    【讨论】:

    • 从 2005 年开始的 MySQL 功能请求!
    【解决方案8】:

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

    bind-address                   = 127.0.0.1
    

    bind-address                   = 0.0.0.0
    

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-11-02
      • 2010-11-08
      • 2016-12-27
      • 1970-01-01
      • 2013-02-26
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多