允许远程登录MySQL,用IPv6连接MySQL,bind-address 笔记250701

259 阅读1小时+

允许远程登录MySQL,用IPv6连接MySQL,bind-address 笔记250701

bind-address = *bind-address = :: 可以允许任意IPv4或IPv6连接MySQL bind-address = * 是默认值,所以可以注释掉 bind-address属性

bind-address = *
bind-address = ::

IPv6的 :: 相当于IPv4的 0.0.0.0 , 但 0.0.0.0 只允许IPv4连接, :: 允许IPv4和IPv6连接

IPv6的 :: 相当于IPv4的 127.0.0.1 , 但 127.0.0.1 只允许IPv4本地连接, ::1 允许IPv4和IPv6本地连接




Ubuntu-18.04允许远程登录MySQL,用IPv6连接MySQL,bind-address 笔记250701

编辑 /etc/mysql/mysql.conf.d/mysqld.cnf

vi /etc/mysql/mysql.conf.d/mysqld.cnf

bind-address = *bind-address = :: 可以允许任意IPv4或IPv6连接MySQL bind-address = * 是默认值,所以可以注释掉 bind-address属性

bind-address = *
bind-address = ::

IPv6的 :: 相当于IPv4的 0.0.0.0 , 但 0.0.0.0 只允许IPv4连接, :: 允许IPv4和IPv6连接




bind-address

bind-address 官方文档

dev.mysql.com/doc/refman/… dev.mysql.com/doc/refman/… dev.mysql.com/doc/refman/… dev.mysql.com/doc/refman/… dev.mysql.com/doc/refman/…



MySQL5.7 的 bind-address 的官方文档翻译

bind_address(绑定地址)
命令行格式--bind-address=addr
系统变量bind_address
作用范围:全局
动态修改:否
类型:字符串
默认值*

MySQL 服务器通过单一网络套接字监听 TCP/IP 连接。该套接字绑定到单个地址,但一个地址可能映射多个网络接口。需在服务器启动时通过 bind_address=addr 指定地址,其中 addr 可为 IPv4/IPv6 地址或主机名。若使用主机名,服务器会将其解析为 IP 地址并绑定;若解析出多个 IP 地址,则优先使用第一个 IPv4 地址(若存在),否则使用第一个 IPv6 地址。


地址处理规则

地址类型行为说明
*(默认值)监听所有 IPv4 接口的连接;若服务器支持 IPv6,则同时监听所有 IPv6 接口
0.0.0.0监听所有 IPv4 接口的连接
::监听所有 IPv4 和 IPv6 接口的连接
IPv4 映射地址
(如 ::ffff:127.0.0.1
同时接受 IPv4/IPv6 格式的连接
(例:客户端可通过 127.0.0.1::ffff:127.0.0.1 连接)
常规地址
(如 127.0.0.1::1
仅接受指定地址的连接

关键注意事项

  1. 启动失败
    若地址绑定失败,服务器将报错且无法启动。

  2. 权限配置要求

    • 若绑定到特定地址(如 ::1),必须确保 mysql.user 系统表中存在允许该地址的管理员账户(如 'root'@'::1')。
    • 否则无法关闭服务器(绑定 ::1 后仅允许该地址连接)。
    • 绑定 * 时可使用所有现有账户连接。

嵌入式服务器说明
此变量对嵌入式服务器 (libmysqld) 无效且不可见。


术语对照表

英文术语中文翻译
network socket网络套接字
IPv4-mapped addressIPv4 映射地址
administrative privileges管理员权限
embedded server嵌入式服务器



MySQL8.0 的 bind-address 的官方文档翻译

命令行格式--bind-address=addr
系统变量bind_address
作用范围:全局
动态修改:否
SET_VAR 提示适用:否
类型:字符串
默认值*

MySQL 服务器通过一个或多个网络套接字监听 TCP/IP 连接。每个套接字绑定到单个地址(一个地址可映射多个网络接口)。通过设置 bind_address 系统变量指定监听方式(另可通过 admin_address 在专用接口启用管理连接,详见章节 7.1.12.1)。


地址规范要求

MySQL 版本地址规则
< 8.0.13仅接受单个值:
• 非通配符 IP/主机名
• 通配符格式(*, 0.0.0.0, ::
≥ 8.0.13可接受逗号分隔的地址列表:
• 仅限非通配符 IP(IPv4/IPv6)或主机名
禁止通配符格式
≥ 8.0.22地址可包含网络命名空间标识符

说明

  • IP 地址支持 IPv4/IPv6 格式
  • 主机名会被解析为 IP 地址(多 IP 时优先选首个 IPv4,无 IPv4 则选首个 IPv6)

地址类型处理规则

地址格式行为说明多地址限制
* (默认值)监听所有 IPv4 接口;若支持 IPv6 则监听所有 IPv6 接口禁止用于列表
0.0.0.0监听所有 IPv4 接口禁止用于列表
::监听所有 IPv4/IPv6 接口禁止用于列表
IPv4 映射地址
(如 ::ffff:127.0.0.1)
同时接受 IPv4/IPv6 连接
(例:客户端可用 127.0.0.1::ffff:127.0.0.1
允许
常规地址
(如 127.0.0.1::1)
仅接受指定地址连接允许

网络命名空间规则 (≥8.0.22)

  1. 适用范围

    • 仅限 IP 地址/主机名(通配符地址不可用)
    • 通过 /ns 后缀指定(如 198.51.100.20/red
  2. 命名空间逻辑

    • 无后缀:使用主机全局命名空间(默认
    • 有后缀:使用指定命名空间(如 /red 使用 red 空间)
    • 前提:主机系统需支持网络命名空间,且命名空间已预先配置
  3. 多地址组合
    可混合包含全局命名空间和指定命名空间的地址

详见章节 7.1.14《网络命名空间支持》


关键注意事项

  1. 启动失败
    任一地址绑定失败将导致服务器报错中止启动。

  2. 权限配置

    • 绑定特定地址(如 ::1)时,必须mysql.user 中配置对应管理员账户(如 'root'@'::1'
    • 否则无法关闭服务器(绑定通配符 * 时无此限制)
  3. 多地址性能影响

    • 多地址监听时,每个地址创建独立套接字
    • 地址数量增加可能降低 TCP/IP 连接接受效率
  4. 文件描述符限制
    需根据情况调整 open_files_limit 系统变量(因监听套接字和命名空间文件需占用描述符)


示例说明

# 监听所有 IPv4/IPv6 地址(通配符模式)
bind_address=*

# 仅监听 198.51.100.20 (IPv4)
bind_address=198.51.100.20

# 多地址监听(IPv4 + IPv6)
bind_address=198.51.100.20,2001:db8:0:f101::1

# ⚠️ 错误示例(多地址列表中禁含通配符)
bind_address=198.51.100.20,*  

# 混合命名空间监听:
# - 198.51.100.20 (red 空间)
# - 2001:db8:0:f101::1 (blue 空间)
# - 192.0.2.50 (全局空间)
bind_address=198.51.100.20/red,2001:db8:0:f101::1/blue,192.0.2.50

术语对照表

英文术语中文翻译
network namespace网络命名空间
wildcard address通配符地址
administrative connection管理连接



MySQL8.4,9.2,9.3 的 bind-address 的官方文档相同, 以下是翻译

bind_address(绑定地址)
命令行格式--bind-address=addr
系统变量bind_address
作用范围:全局
动态修改:否
SET_VAR 提示适用:否
类型:字符串
默认值*

MySQL 服务器通过一个或多个网络套接字监听 TCP/IP 连接。每个套接字绑定到单个地址(一个地址可映射多个网络接口)。通过设置 bind_address 系统变量指定监听方式(另可通过 admin_address 在专用接口启用管理连接,详见章节 7.1.12.1)。


地址规范规则

  1. 基本格式

    • 支持单个地址或逗号分隔的地址列表
    • 每个地址可为:
      • 非通配符 IP(IPv4/IPv6)
      • 主机名
      单个地址时可额外使用通配符(*, 0.0.0.0, ::
  2. 网络命名空间(可选)

    • 通过 /ns 后缀指定(如 192.0.2.5/red
    • 不适用于通配符地址
  3. 主机名解析

    • 解析为多个 IP 时:优先使用首个 IPv4,无 IPv4 则用首个 IPv6

地址类型处理规则

地址格式监听范围多地址限制
* (默认值)所有 IPv4 接口 + 支持时的所有 IPv6 接口禁止
0.0.0.0所有 IPv4 接口禁止
::所有 IPv4/IPv6 接口禁止
IPv4 映射地址
(如 ::ffff:127.0.0.1)
同时接受 IPv4/IPv6 连接
(例:--host=127.0.0.1--host=::ffff:127.0.0.1
允许
常规地址
(如 127.0.0.1)
仅限指定地址允许

网络命名空间规范

  1. 后缀格式

    • 地址后添加 /ns(如 2001:db8::1/blue
    • 无后缀:使用全局命名空间(默认)
  2. 强制要求

    • 主机系统需支持网络命名空间
    • 命名空间必须预先配置(不存在则报错)
  3. 混合使用
    可同时包含全局命名空间和指定命名空间的地址

    详见章节 7.1.14《网络命名空间支持》


关键机制与注意事项

  1. 启动验证

    • 任一地址绑定失败 → 服务器报错中止启动
  2. 套接字分配

    地址类型套接字数量接口绑定
    通配符地址单个套接字多接口
    多地址列表每个地址独立套接字单接口/地址
  3. 性能影响

    • 地址数量增加 → 可能降低 TCP 连接接受效率
  4. 资源管理

    • 需根据情况调整 open_files_limit(套接字和命名空间文件占用描述符)
  5. 权限要求

    • 绑定特定地址(如 ::1)时,必须mysql.user 中配置对应管理员账户(如 'root'@'::1'
    • 否则无法关闭服务器(通配符地址 * 无此限制)

配置示例

# 通配监听所有地址
bind_address=*

# 单地址监听 (IPv4)
bind_address=198.51.100.20

# 多地址监听 (IPv4 + IPv6)
bind_address=198.51.100.20,2001:db8:0:f101::1

# ⚠️ 错误配置 (多地址含通配符)
bind_address=198.51.100.20,*  

# 混合命名空间:
# - 198.51.100.20 (red 命名空间)
# - 2001:db8:0:f101::1 (blue 命名空间)
# - 192.0.2.50 (全局命名空间)
bind_address=198.51.100.20/red,2001:db8:0:f101::1/blue,192.0.2.50

术语对照表

英文术语中文翻译
wildcard address通配符地址
network namespace网络命名空间
file descriptor文件描述符
administrative privileges管理员权限










1️⃣ 参考 1

要允许通过 IPv6 远程连接 MySQL,需同时配置 MySQL 服务绑定地址用户访问权限。以下是详细步骤:


1. 修改 MySQL 配置(bind-address

编辑 MySQL 配置文件(路径因系统而异):

  • Linux: /etc/mysql/mysql.conf.d/mysqld.cnf/etc/my.cnf
  • Windows: C:\ProgramData\MySQL\MySQL Server X.X\my.ini

[mysqld] 部分修改或添加:

bind-address = ::

或同时监听 IPv4 和 IPv6:

bind-address = 0.0.0.0
bind-address = ::

说明

  • :: 表示监听所有 IPv6 地址。
  • 0.0.0.0 表示监听所有 IPv4 地址(可选,按需添加)。
  • 保存后重启 MySQL 服务:
    sudo systemctl restart mysql   # Linux
    # 或在 Windows 服务管理器中重启 MySQL
    

2. 验证 MySQL 监听状态

执行命令检查端口是否监听 IPv6:

sudo netstat -tuln | grep 3306

期望输出:

tcp6       0      0 :::3306      :::*          LISTEN  # 出现 `tcp6``:::` 表示成功

3. 配置远程用户权限

登录 MySQL,授权用户从 IPv6 地址访问:

-- 允许用户从任意 IPv6 地址连接(使用 '%' 通配符)
CREATE USER 'remote_user'@'%' IDENTIFIED BY 'your_password';
GRANT ALL PRIVILEGES ON *.* TO 'remote_user'@'%' WITH GRANT OPTION;
FLUSH PRIVILEGES;

安全建议

  • 替换 remote_useryour_password 为实际值。
  • 如需限制特定 IPv6 地址,将 '%' 改为 '2001:db8::1'(示例地址)。

4. 开放防火墙端口(IPv6)

确保防火墙允许 IPv6 的 3306 端口:

# Linux (ufw)
sudo ufw allow from 2001:db8::/64 to any port 3306  # 按需替换子网

# Linux (iptables)
sudo ip6tables -A INPUT -p tcp --dport 3306 -j ACCEPT

# Windows 防火墙:
# 新建入站规则,允许 TCP 端口 3306,作用域选择特定 IPv6 地址。

5. 测试远程连接

使用客户端通过 IPv6 连接:

mysql -u remote_user -p -h 2400:cb00:2049:1::a83f:0  # 替换为服务器 IPv6 地址

如果失败,检查:

  • MySQL 错误日志(/var/log/mysql/error.log)。
  • 防火墙是否放行 IPv6 流量。
  • 网络路由是否支持 IPv6。

关键点总结

配置项推荐值作用
bind-address::监听所有 IPv6 接口
用户 Host 字段'%' 或具体地址允许 IPv6 远程连接
防火墙开放 3306/tcp允许 IPv6 流量通过

注意:开放远程访问需评估安全风险,建议结合 VPN 或 TLS 加密连接。










2️⃣ 参考 2

MySQL 配置文件中的 bind-address 详解

bind-address 是 MySQL 配置中控制网络访问的核心参数,决定了 MySQL 服务监听哪个网络接口的连接请求。


一、参数作用
  • 定义服务监听地址:指定 MySQL 服务器接受连接的 IP 地址
  • 控制访问来源:限制哪些网络接口可以接收客户端连接
  • 安全边界:是 MySQL 访问控制的第一道防线

二、参数值解析
含义典型应用场景
127.0.0.1仅监听本地回环接口
(localhost)
默认安全配置,禁止远程访问
0.0.0.0监听所有可用网络接口
(包括本地、公网、内网等所有IP)
需要开放远程访问时
192.168.1.100监听指定 IP 地址
(示例为内网 IP)
仅允许特定网卡接收连接
::1IPv6 的本地回环地址
(相当于 IPv4 的 127.0.0.1)
IPv6 环境下的本地访问

三、配置文件位置

在 Ubuntu 系统中:

# MySQL 5.7 主配置文件
/etc/mysql/mysql.conf.d/mysqld.cnf

# 配置段位置
[mysqld]
bind-address = 127.0.0.1  # 默认值

四、工作原理图解
客户端请求
    │
    ▼
[ 服务器网络接口 ]
    │
    ▼
bind-address 过滤 → 允许 → MySQL 服务处理
            │
            └→ 拒绝 → 连接失败

五、与其他配置的关系
  1. 用户权限

    • 即使设置 bind-address=0.0.0.0,用户仍需有 'user'@'%' 权限才能远程连接
    • 本地用户 'user'@'localhost' 始终可通过回环接口连接
  2. 防火墙

    # 即使 bind-address=0.0.0.0
    # 防火墙未开放3306端口仍会阻止连接
    sudo ufw deny 3306
    
  3. skip-networking

    • 如果启用此参数,MySQL 会完全禁用 TCP/IP 连接
    • 此时 bind-address 设置将无效

六、配置建议
  1. 开发环境

    bind-address = 0.0.0.0  # 方便测试
    
  2. 生产环境

    # 方案1:监听内网IP
    bind-address = 10.0.0.5
    
    # 方案2:配合防火墙白名单
    bind-address = 0.0.0.0
    # 防火墙限制:只允许特定IP访问3306
    
  3. 高安全环境

    bind-address = 127.0.0.1  # 默认安全
    # 通过SSH隧道访问:
    # ssh -L 3306:localhost:3306 user@dbserver
    

七、配置验证方法
  1. 检查监听端口

    sudo netstat -tuln | grep 3306
    
    • 正常输出示例:
      tcp6  0  0 :::3306  :::*  LISTEN  # 监听所有IP
      tcp6  0  0 127.0.0.1:3306  :::*  LISTEN  # 仅本地
      
  2. 远程连接测试

    telnet [服务器IP] 3306
    
    • 连接成功:显示 MySQL 版本信息
    • 连接失败:Connection refused

八、常见误区
  1. 错误认知:"设置了 bind-address=0.0.0.0 就代表允许远程登录"
    ✅ 实际:还需正确配置用户权限(GRANT)和防火墙

  2. 配置冲突:同时使用 bind-addressskip-networking
    ✅ 解决方案:skip-networking 优先级更高,需确保其被注释:

    # skip-networking  # 确保此行被注释
    
  3. IPv4/IPv6 混淆

    # 错误配置:试图同时监听IPv4和IPv6
    bind-address = 0.0.0.0
    bind-address = ::
    
    # 正确:单个配置监听所有
    bind-address = 0.0.0.0  # 实际会同时监听IPv4和IPv6
    

💡 最佳实践:在云服务器环境中,建议设置 bind-address=内网IP 配合安全组策略,避免直接暴露公网IP。










3️⃣ 参考 3 使用 IPv6 连接 MySQL 的完整指南

要使用 IPv6 连接 MySQL,需要完成以下关键步骤:

一、服务器端配置

1. 启用 IPv6 监听

修改 MySQL 配置文件(通常为 /etc/mysql/mysql.conf.d/mysqld.cnf):

[mysqld]
## 监听所有 IPv6 地址
bind-address = ::

## 或监听特定 IPv6 地址
## bind-address = 2001:db8::1
2. 重启 MySQL 服务
sudo systemctl restart mysql
3. 验证监听状态
sudo netstat -tuln | grep 3306

正常输出应包含:

tcp6       0      0 :::3306                 :::*                    LISTEN
4. 创建 IPv6 访问用户
-- 允许来自任何 IPv6 地址的连接
CREATE USER 'ipv6user'@'%' IDENTIFIED BY 'secure_password';

-- 或限制特定 IPv6 子网 (如 /64 子网)
CREATE USER 'ipv6user'@'2001:db8:abcd::/64' IDENTIFIED BY 'secure_password';

-- 授予权限
GRANT ALL PRIVILEGES ON *.* TO 'ipv6user'@'%' WITH GRANT OPTION;
FLUSH PRIVILEGES;
5. 配置防火墙
## 允许 IPv6 的 3306 端口
sudo ufw allow from any to any port 3306 proto tcp

## 或限制特定 IPv6 范围
sudo ufw allow from 2001:db8:abcd::/64 to any port 3306 proto tcp

二、客户端连接方式

1. 使用 IPv6 地址连接
mysql -h 2001:db8:abcd:1234::1 -u ipv6user -p
2. 使用带方括号的 IPv6 地址(必须)
## 正确格式(地址用方括号包裹)
mysql -h [2001:db8:abcd:1234::1] -u ipv6user -p

## 错误格式(会导致解析失败)
mysql -h 2001:db8:abcd:1234::1 -u ipv6user -p
3. 使用 IPv6 主机名连接

确保 DNS 有正确的 AAAA 记录:

mysql -h mysql6.example.com -u ipv6user -p

三、高级配置

1. 同时支持 IPv4 和 IPv6
[mysqld]
bind-address = 0.0.0.0  # 监听所有 IPv4 地址
bind-address = ::        # 监听所有 IPv6 地址
2. IPv6 特定子网授权
-- 允许 /64 子网的所有主机
GRANT SELECT ON dbname.* TO 'user'@'2001:db8:abcd::/64';

-- 允许特定 IPv6 地址
GRANT ALL ON *.* TO 'admin'@'2001:db8:abcd::1234';
3. 连接超时设置(适用于高延迟 IPv6 网络)
[mysqld]
interactive_timeout = 600
wait_timeout = 600

四、测试与验证

1. 服务器端验证
SHOW VARIABLES LIKE 'bind_address';

应显示 :: 或特定 IPv6 地址

2. 查看活动连接
SELECT user, host, connection_type 
FROM performance_schema.threads 
WHERE TYPE = 'FOREGROUND';

IPv6 连接会显示 TCP/IP 类型

3. 客户端测试连接
telnet [2001:db8:abcd::1] 3306

成功连接会显示 MySQL 的 banner 信息

五、常见问题解决

1. 连接超时
  • 检查防火墙规则:sudo ufw status verbose
  • 验证路由可达性:ping6 2001:db8:abcd::1
  • 检查网络 MTU 设置(IPv6 建议 1280+)
2. "Can't connect to MySQL server"
  • 确认 MySQL 监听 IPv6:sudo ss -tuln | grep 3306
  • 检查用户权限:SHOW GRANTS FOR 'ipv6user'@'%'
  • 验证 bind-address 配置
3. IPv6 地址格式错误

正确格式:

mysql -h [2001:db8:abcd::1] -u user -p

错误格式:

mysql -h 2001:db8:abcd::1 -u user -p  # 缺少方括号
4. DNS 解析问题
## 检查 IPv6 DNS 解析
dig AAAA mysql6.example.com +short
nslookup -query=AAAA mysql6.example.com

六、安全建议

  1. 使用 IP 限制:避免使用 '%' 通配符,改为具体子网

    CREATE USER 'secureuser'@'2001:db8:abcd::/64' IDENTIFIED BY 'password';
    
  2. 启用加密连接

    [mysqld]
    require_secure_transport = ON
    
  3. 使用 SSH 隧道

    ssh -L 3306:[2001:db8::1]:3306 user@gateway.example.com
    

    然后连接本地:

    mysql -h 127.0.0.1 -u user -p
    

七、IPv6 地址表示法示例

完整地址压缩形式MySQL 连接格式
2001:0db8:85a3:0000:0000:8a2e:0370:73342001:db8:85a3::8a2e:370:7334[2001:db8:85a3::8a2e:370:7334]
fe80:0000:0000:0000:0202:b3ff:fe1e:8329fe80::202:b3ff:fe1e:8329[fe80::202:b3ff:fe1e:8329]

注意:链接本地地址(以 fe80: 开头)需要指定接口,如 [fe80::1%eth0]

通过以上配置,您可以充分利用 IPv6 的优势连接 MySQL,包括更大的地址空间、更简单的网络管理和改进的路由效率。










4️⃣ 参考 4 MySQL 配置文件中的 bind-address 详解

bind-address 是 MySQL 配置中控制网络访问的核心参数,决定了 MySQL 服务监听哪个网络接口的连接请求。


一、参数作用
  • 定义服务监听地址:指定 MySQL 服务器接受连接的 IP 地址
  • 控制访问来源:限制哪些网络接口可以接收客户端连接
  • 安全边界:是 MySQL 访问控制的第一道防线

二、参数值解析
含义典型应用场景
127.0.0.1仅监听本地回环接口
(localhost)
默认安全配置,禁止远程访问
0.0.0.0监听所有可用网络接口
(包括本地、公网、内网等所有IP)
需要开放远程访问时
192.168.1.100监听指定 IP 地址
(示例为内网 IP)
仅允许特定网卡接收连接
::1IPv6 的本地回环地址
(相当于 IPv4 的 127.0.0.1)
IPv6 环境下的本地访问

三、配置文件位置

在 Ubuntu 系统中:

# MySQL 5.7 主配置文件
/etc/mysql/mysql.conf.d/mysqld.cnf

# 配置段位置
[mysqld]
bind-address = 127.0.0.1  # 默认值

四、工作原理图解
客户端请求
    │
    ▼
[ 服务器网络接口 ]
    │
    ▼
bind-address 过滤 → 允许 → MySQL 服务处理
            │
            └→ 拒绝 → 连接失败

五、与其他配置的关系
  1. 用户权限

    • 即使设置 bind-address=0.0.0.0,用户仍需有 'user'@'%' 权限才能远程连接
    • 本地用户 'user'@'localhost' 始终可通过回环接口连接
  2. 防火墙

    # 即使 bind-address=0.0.0.0
    # 防火墙未开放3306端口仍会阻止连接
    sudo ufw deny 3306
    
  3. skip-networking

    • 如果启用此参数,MySQL 会完全禁用 TCP/IP 连接
    • 此时 bind-address 设置将无效

六、配置建议
  1. 开发环境

    bind-address = 0.0.0.0  # 方便测试
    
  2. 生产环境

    # 方案1:监听内网IP
    bind-address = 10.0.0.5
    
    # 方案2:配合防火墙白名单
    bind-address = 0.0.0.0
    # 防火墙限制:只允许特定IP访问3306
    
  3. 高安全环境

    bind-address = 127.0.0.1  # 默认安全
    # 通过SSH隧道访问:
    # ssh -L 3306:localhost:3306 user@dbserver
    

七、配置验证方法
  1. 检查监听端口

    sudo netstat -tuln | grep 3306
    
    • 正常输出示例:
      tcp6  0  0 :::3306  :::*  LISTEN  # 监听所有IP
      tcp6  0  0 127.0.0.1:3306  :::*  LISTEN  # 仅本地
      
  2. 远程连接测试

    telnet [服务器IP] 3306
    
    • 连接成功:显示 MySQL 版本信息
    • 连接失败:Connection refused

八、常见误区
  1. 错误认知:"设置了 bind-address=0.0.0.0 就代表允许远程登录"
    ✅ 实际:还需正确配置用户权限(GRANT)和防火墙

  2. 配置冲突:同时使用 bind-addressskip-networking
    ✅ 解决方案:skip-networking 优先级更高,需确保其被注释:

    # skip-networking  # 确保此行被注释
    
  3. IPv4/IPv6 混淆

    # 错误配置:试图同时监听IPv4和IPv6
    bind-address = 0.0.0.0
    bind-address = ::
    
    # 正确:单个配置监听所有
    bind-address = 0.0.0.0  # 实际会同时监听IPv4和IPv6
    

💡 最佳实践:在云服务器环境中,建议设置 bind-address=内网IP 配合安全组策略,避免直接暴露公网IP。










5️⃣ 参考 5 如何使用ipv6连接mysql?

以下是使用IPv6连接MySQL的详细步骤,结合安全规范与生产环境实践整理:


一、配置MySQL支持IPv6

1. 修改MySQL配置文件
  • Linux系统:编辑/etc/mysql/mysql.conf.d/mysqld.cnf/etc/my.cnf

    [mysqld]
    # 启用IPv6监听(注释或删除 bind-address=127.0.0.1)
    # bind-address = 0.0.0.0       # IPv4监听(可选)
    bind-address = ::              # IPv6监听所有地址
    # 确保未启用 skip-networking
    # skip-networking             # 必须注释或删除
    
  • Windows系统:编辑C:\ProgramData\MySQL\MySQL Server 5.7\my.ini

    [mysqld]
    bind-address = ::
    
2. 重启MySQL服务
  • Linux

    sudo systemctl restart mysqld   # Systemd系统
    # 或
    sudo service mysql restart      # SysVinit系统
    
  • Windows:通过服务管理器重启MySQL服务。


二、创建支持IPv6的MySQL用户

1. 登录MySQL
mysql -u root -p
2. 创建用户并授权
  • 允许所有IPv6地址访问(不推荐生产环境直接使用root):

    CREATE USER 'ipv6_user'@'%' IDENTIFIED BY 'StrongPassword123!';
    GRANT ALL PRIVILEGES ON *.* TO 'ipv6_user'@'%' WITH GRANT OPTION;
    FLUSH PRIVILEGES;
    
  • 限制特定IPv6地址或网段(更安全):

    -- 允许单个IPv6地址
    CREATE USER 'limited_user'@'2001:db8:1234:5678::1' IDENTIFIED BY 'SecurePass456$';
    
    -- 允许IPv6网段(如2001:db8::/64)
    CREATE USER 'net_user'@'2001:db8::%' IDENTIFIED BY 'ComplexPass789#';
    
    -- 分配权限(示例:仅允许查询test_db)
    GRANT SELECT ON test_db.* TO 'net_user'@'2001:db8::%';
    FLUSH PRIVILEGES;
    

三、配置防火墙放行IPv6流量

1. Linux系统(firewalld)
# 添加IPv6端口放行规则
sudo firewall-cmd --permanent --add-rich-rule='rule family="ipv6" port port="3306" protocol="tcp" accept'
sudo firewall-cmd --reload
2. Windows系统
  • 打开“Windows Defender 防火墙” → 高级设置 → 入站规则 → 新建规则:
    • 规则类型:端口
    • 协议:TCP
    • 特定端口:3306
    • 作用域:选择IPv6地址范围(或留空表示所有IPv6地址)
    • 操作:允许连接
    • 配置文件:勾选所有配置文件(域、专用、公用)
    • 命名规则(如“MySQL_IPv6_3306”)
3. 云服务器安全组
  • 若部署在云端(如AWS/阿里云),需在控制台安全组中添加IPv6入站规则,开放3306端口。

四、测试IPv6连接

1. 本地测试(服务器端)
mysql -h ::1 -u ipv6_user -p
2. 远程测试(客户端)
  • 使用IPv6地址连接:

    mysql -h [2001:db8:1234:5678::1] -u ipv6_user -p
    
    • 若使用主机名,需确保DNS解析返回IPv6地址,或客户端支持IPv6优先。
  • 使用IPv6网段内地址:

    mysql -h [2001:db8::1234] -u net_user -p
    

五、安全加固建议

  1. 最小权限原则

    • 避免使用GRANT ALL PRIVILEGES,按需分配权限(如SELECT,INSERT)。
  2. 强制SSL加密

    • 配置MySQL要求SSL连接:
      ALTER USER 'ipv6_user'@'%' REQUIRE SSL;
      
    • 客户端连接时添加--ssl-mode=REQUIRED参数。
  3. 网络隔离

    • 将MySQL部署在私有子网,通过VPN或堡垒机访问。
  4. 日志审计

    • 启用MySQL通用查询日志,监控IPv6连接行为:
      SET GLOBAL general_log = 'ON';
      

常见问题排查

  • 连接超时

    • 检查防火墙是否放行IPv6的3306端口。
    • 使用netstat -tuln | grep 3306验证MySQL监听状态(应显示tcp6 0 0 :::3306 :::* LISTEN)。
  • 权限拒绝

    • 执行SELECT Host, User FROM mysql.user;确认用户权限。
    • 确保客户端IPv6地址在授权范围内(如2001:db8::%)。
  • DNS解析失败

    • 使用nslookupdig测试主机名的IPv6解析。
    • 直接使用IPv6地址连接绕过DNS问题。

完成上述步骤后,MySQL即可通过IPv6安全地接受远程连接。生产环境中建议结合VPN或跳板机使用,避免直接暴露数据库到公网。










6️⃣ 参考 6 设置mysql5.7允许远程登录

以下是设置MySQL 5.7允许远程登录的详细步骤,结合安全规范与生产环境最佳实践整理:

一、修改MySQL配置文件

  1. 定位配置文件

    • Linux系统:编辑/etc/mysql/mysql.conf.d/mysqld.cnf/etc/my.cnf
      sudo vim /etc/mysql/mysql.conf.d/mysqld.cnf
      
    • Windows系统:打开C:\ProgramData\MySQL\MySQL Server 5.7\my.ini
      (需以管理员权限编辑)
  2. 调整网络绑定

    • 找到bind-address = 127.0.0.1,修改为:
      bind-address = 0.0.0.0
      
    • 若存在skip-networking,需将其注释或删除。
  3. 重启MySQL服务

    • Linux
      sudo systemctl restart mysqld   # Systemd系统
      # 或
      sudo service mysql restart      # SysVinit系统
      
    • Windows:通过服务管理器重启MySQL服务。

二、创建远程访问专用账户

  1. 登录MySQL

    mysql -u root -p
    
  2. 创建用户并授权

    • 允许所有IP访问(不推荐生产环境直接使用root):
      CREATE USER 'remote_user'@'%' IDENTIFIED BY 'StrongPassword123!';
      GRANT ALL PRIVILEGES ON *.* TO 'remote_user'@'%' WITH GRANT OPTION;
      FLUSH PRIVILEGES;
      
    • 限制访问IP范围(更安全):
      CREATE USER 'limited_user'@'192.168.1.%' IDENTIFIED BY 'SecurePass456$';
      GRANT SELECT,INSERT,UPDATE ON mydb.* TO 'limited_user'@'192.168.1.%';
      FLUSH PRIVILEGES;
      

三、配置防火墙规则

  1. Linux系统(firewalld)

    sudo firewall-cmd --zone=public --add-port=3306/tcp --permanent
    sudo firewall-cmd --reload
    
  2. Windows系统

    • 打开“Windows Defender 防火墙” → 高级设置 → 入站规则 → 新建规则:
      • 选择“端口” → TCP 3306 → 允许连接 → 勾选所有配置文件 → 命名规则(如“MySQL_3306”)。
  3. 云服务器安全组

    • 若部署在云端(如AWS/阿里云),需在控制台安全组中放行3306端口。

四、验证远程连接

  1. 本地测试

    mysql -h 127.0.0.1 -u remote_user -p
    
  2. 远程测试

    mysql -h <服务器IP> -u remote_user -p
    

五、安全加固建议

  1. 最小权限原则

    • 避免使用GRANT ALL PRIVILEGES,按需分配权限(如SELECT,INSERT)。
  2. SSH隧道替代直接暴露

    • 高风险环境建议通过SSH端口转发访问:
      ssh -L 3307:localhost:3306 user@mysql_server
      
      本地连接127.0.0.1:3307即通过SSH隧道访问MySQL。
  3. 定期审计

    • 检查远程登录日志:
      SELECT * FROM mysql.general_log WHERE argument LIKE '%remote_user%';
      
  4. 启用SSL加密

    • 配置MySQL要求SSL连接:
      ALTER USER 'remote_user'@'%' REQUIRE SSL;
      

常见问题排查

  • 连接被拒绝

    • 检查防火墙是否放行3306端口。
    • 确认云服务器安全组规则。
    • 使用netstat -tuln | grep 3306验证MySQL监听状态。
  • 权限错误

    • 执行SELECT Host, User FROM mysql.user;确认用户权限。
    • 检查bind-address是否为0.0.0.0

完成上述步骤后,MySQL 5.7即可安全地接受远程连接。生产环境中建议结合VPN或跳板机使用,避免直接暴露数据库到公网。










7️⃣ 参考 7 讲解MySQL配置文件的 bind-address , 如何使用ipv6连接mysql?

MySQL 配置文件中的 bind-address 参数用于指定 MySQL 服务器监听的 IP 地址。这个设置直接影响哪些客户端可以连接到 MySQL 服务器,以及通过何种网络接口连接。

1. 基本作用

  • 限制监听范围:MySQL 默认只监听指定的 IP 地址,未指定的地址无法访问。
  • 单地址监听:例如 bind-address = 127.0.0.1 表示仅监听本地回环地址,拒绝所有远程连接
  • 多地址监听:MySQL 5.7 及以下版本仅支持单个 IP,如需监听多个地址,需通过多次配置实现(见下文)。

2. 常见配置示例

(1)仅允许本地连接
bind-address = 127.0.0.1
  • 效果:仅允许服务器本地的客户端(如 localhost)连接。
  • 用途:提高安全性,适用于仅本地应用访问的场景(如 Web 服务器与 MySQL 在同一主机)。
(2)允许所有 IPv4 远程连接
bind-address = 0.0.0.0
  • 效果:监听所有可用的 IPv4 地址,允许任何远程客户端连接(需配合用户权限设置)。
  • 风险:若未配置防火墙或用户权限,可能导致安全漏洞。
(3)仅允许特定 IPv4 地址连接
bind-address = 192.168.1.100
  • 效果:仅监听指定 IP(如服务器的内网 IP),允许同网段的客户端连接。
  • 用途:适用于局域网环境,拒绝公网访问。
(4)同时监听 IPv4 和 IPv6
bind-address = ::
  • :: 是 IPv6 的通配符,表示监听所有 IPv4 和 IPv6 地址。
  • 需确保 MySQL 配置中未禁用 IPv6(即 skip-ipv6 未启用)。
(5)监听多个特定地址(高级配置)

在 MySQL 5.7 及以下版本中,可通过启动多个 MySQL 实例并分别绑定不同地址实现。例如:

# 启动第二个实例,绑定到 192.168.1.101:3307
mysqld --defaults-file=/etc/mysql/my-second.cnf --bind-address=192.168.1.101 --port=3307

3. 与用户权限的关系

bind-address 控制网络层面的访问,而用户权限(如 GRANT 语句)控制授权层面的访问。两者需配合使用:

  • 示例:若 bind-address = 127.0.0.1,即使创建了 'user'@'%' 用户,远程客户端仍无法连接。
  • 正确配置:若需远程访问,需同时设置 bind-address = 0.0.0.0(或特定 IP)和 'user'@'%' 权限。

4. 安全注意事项

  • 公网暴露风险bind-address = 0.0.0.0 会暴露 MySQL 到公网,建议配合防火墙限制访问。
  • 防火墙配置
    # 仅允许特定 IP 访问 3306 端口
    sudo ufw allow from 192.168.1.0/24 to any port 3306
    
  • 最小权限原则:优先使用 bind-address = 127.0.0.1,仅在必要时开放远程访问。

5. 修改配置后的操作

修改 bind-address 后,需重启 MySQL 服务:

sudo systemctl restart mysql

总结

配置值效果适用场景
127.0.0.1仅本地访问安全要求高的环境
0.0.0.0所有 IPv4 远程访问测试环境、内部网络
::所有 IPv4 和 IPv6 远程访问支持 IPv6 的环境
特定 IP(如内网)仅特定网段可访问企业内部系统

合理配置 bind-address 是保障 MySQL 安全性的关键步骤。

要使用IPv6连接MySQL,需确保服务器和客户端均支持IPv6,并按以下步骤配置:

一、服务器端配置

1. 启用MySQL的IPv6支持

编辑MySQL配置文件(通常为 /etc/mysql/mysql.conf.d/mysqld.cnf),添加或修改以下行:

bind-address = ::          # 同时监听IPv4和IPv6
skip-ipv6                  # 确保此行被注释掉(删除或添加#)

重启MySQL服务:

sudo systemctl restart mysql
2. 创建支持IPv6连接的用户

登录MySQL并执行以下命令(将 usernamepassword::/0 替换为实际值):

CREATE USER 'username'@'::/0' IDENTIFIED BY 'password';
GRANT ALL PRIVILEGES ON *.* TO 'username'@'::/0' WITH GRANT OPTION;
FLUSH PRIVILEGES;

::/0 表示允许所有IPv6地址连接,生产环境建议限制为特定IPv6地址(例如 2001:db8::1/128)。

二、客户端配置

1. 使用IPv6地址连接

在客户端命令中,使用 [IPv6地址] 格式连接:

mysql -h [2001:db8::1] -u username -p

若服务器同时监听IPv4和IPv6,也可通过主机名连接(需DNS正确解析):

mysql -h example.com -u username -p
2. 验证连接

连接成功后,查看当前会话的客户端地址:

SELECT USER(), CURRENT_USER();

输出应显示类似 username@2001:db8::1

三、常见问题排查

  1. 防火墙限制
    确保服务器防火墙允许IPv6的3306端口:

    sudo ufw allow in on eth0 proto tcp to any port 3306  # 适用于ufw
    
  2. MySQL版本兼容性
    MySQL 5.7及以上版本默认支持IPv6,但需确认配置正确。

  3. 网络连通性
    使用 ping6telnet 测试IPv6连通性:

    ping6 [2001:db8::1]
    telnet [2001:db8::1] 3306
    

四、安全建议

  • 限制访问范围:仅允许受信任的IPv6地址连接(如 2001:db8:1234:5678::/64)。
  • 启用SSL加密:为IPv6连接配置SSL/TLS,增强安全性。
  • 监控连接日志:定期查看MySQL日志,检查异常IPv6连接尝试。

通过以上步骤,即可实现MySQL的IPv6远程连接。










8️⃣ 参考 8 mysq5.7的bind-address的官方手册翻译

mysq5.7的bind-address的官方手册翻译(1)

以下是英文内容的中文翻译:


bind_address 系统变量说明
  • 命令行格式--bind-address=addr
  • 系统变量bind_address
  • 作用域:全局
  • 动态变量:否
  • 类型:字符串
  • 默认值*

MySQL 服务器通过一个网络套接字监听 TCP/IP 连接。该套接字绑定到一个特定地址,但一个地址可能映射到多个网络接口。要指定监听地址,可在服务器启动时设置 bind_address=addr,其中 addr 可以是 IPv4/IPv6 地址或主机名。

  • 如果 addr 是主机名,服务器会将其解析为 IP 地址并绑定到该地址。
  • 如果主机名解析出多个 IP 地址,服务器会优先使用第一个 IPv4 地址(如果有),否则使用第一个 IPv6 地址。

不同地址类型的处理方式
地址类型行为说明
*接受所有 IPv4 接口的 TCP/IP 连接;若服务器支持 IPv6,则同时接受所有 IPv6 接口。此值为默认值,用于允许所有接口同时接收 IPv4 和 IPv6 连接。
0.0.0.0仅接受所有 IPv4 接口的 TCP/IP 连接。
::接受所有 IPv4 和 IPv6 接口的 TCP/IP 连接。
IPv4 映射地址(如 ::ffff:127.0.0.1接受 IPv4 或 IPv6 格式的连接请求。例如客户端可通过 --host=127.0.0.1--host=::ffff:127.0.0.1 连接。
普通 IPv4/IPv6 地址(如 127.0.0.1::1仅接受该地址的 TCP/IP 连接。

绑定失败与安全提示
  • 绑定失败:如果绑定地址失败,服务器会报错并停止启动。
  • 安全建议:若绑定到特定地址(如 ::1),请确保 mysql.user 系统表中存在具有管理权限的账户(如 'root'@'::1'),否则无法关闭服务器。
    • 示例:绑定到 * 时,所有现有账户均可连接;绑定到 ::1 时,必须确保存在对应账户。

嵌入式服务器限制
  • 此变量对嵌入式服务器(libmysqld)无效,且在嵌入式服务器中不可见。

示例说明
  • 若绑定到 192.168.1.100,服务器仅接受该 IP 所在网络接口的连接。
  • 若绑定到 127.0.0.1,仅允许本地回环接口访问,常用于开发环境。

通过以上翻译,您可清晰了解 bind_address 的配置逻辑及其对 MySQL 网络连接的影响。




mysq5.7的bind-address的官方手册翻译(2)

bind_address(绑定地址)

命令行格式--bind-address=addr
系统变量bind_address
作用范围:全局
动态修改:否
类型:字符串
默认值*

MySQL 服务器通过单一网络套接字监听 TCP/IP 连接。该套接字绑定到单个地址,但一个地址可能映射多个网络接口。需在服务器启动时通过 bind_address=addr 指定地址,其中 addr 可为 IPv4/IPv6 地址或主机名。若使用主机名,服务器会将其解析为 IP 地址并绑定;若解析出多个 IP 地址,则优先使用第一个 IPv4 地址(若存在),否则使用第一个 IPv6 地址。


地址处理规则
地址类型行为说明
*(默认值)监听所有 IPv4 接口的连接;若服务器支持 IPv6,则同时监听所有 IPv6 接口
0.0.0.0监听所有 IPv4 接口的连接
::监听所有 IPv4 和 IPv6 接口的连接
IPv4 映射地址
(如 ::ffff:127.0.0.1
同时接受 IPv4/IPv6 格式的连接
(例:客户端可通过 127.0.0.1::ffff:127.0.0.1 连接)
常规地址
(如 127.0.0.1::1
仅接受指定地址的连接

关键注意事项
  1. 启动失败
    若地址绑定失败,服务器将报错且无法启动。

  2. 权限配置要求

    • 若绑定到特定地址(如 ::1),必须确保 mysql.user 系统表中存在允许该地址的管理员账户(如 'root'@'::1')。
    • 否则无法关闭服务器(绑定 ::1 后仅允许该地址连接)。
    • 绑定 * 时可使用所有现有账户连接。

嵌入式服务器说明
此变量对嵌入式服务器 (libmysqld) 无效且不可见。


术语对照表
英文术语中文翻译
network socket网络套接字
IPv4-mapped addressIPv4 映射地址
administrative privileges管理员权限
embedded server嵌入式服务器




mysq5.7的bind-address的官方手册翻译(3)

原文: https://dev.mysql.com/doc/refman/5.7/en/server-system-variables.html#sysvar_bind_address

bind_address

命令行格式:--bind-address=addr
系统变量:bind_address
作用范围:全局
动态性:否
类型:字符串
默认值:*

MySQL 服务器通过单个网络套接字监听 TCP/IP 连接。该套接字绑定到单个地址,但一个地址可能映射到多个网络接口。若要在服务器启动时指定地址,需设置 bind_address=addr,其中 addr 可以是 IPv4 地址、IPv6 地址或主机名。若 addr 为主机名,服务器会将该名称解析为 IP 地址并绑定到该地址。若主机名解析为多个 IP 地址,服务器会优先使用第一个 IPv4 地址(若存在),否则使用第一个 IPv6 地址。

服务器对不同地址类型的处理方式如下:

  • 若地址为 *
    服务器接受来自服务器主机所有 IPv4 接口的 TCP/IP 连接;若服务器支持 IPv6,则同时接受所有 IPv6 接口的连接。此设置允许所有服务器接口支持 IPv4 和 IPv6 连接(默认值)。

  • 若地址为 0.0.0.0
    服务器仅接受来自所有 IPv4 接口的 TCP/IP 连接。

  • 若地址为 ::
    服务器接受来自所有 IPv4 和 IPv6 接口的 TCP/IP 连接。

  • 若地址为 IPv4 映射地址(如 ::ffff:127.0.0.1):
    服务器接受该地址的 IPv4 或 IPv6 格式连接。例如,若服务器绑定到 ::ffff:127.0.0.1,客户端可通过 --host=127.0.0.1--host=::ffff:127.0.0.1 连接。

  • 若地址为常规 IPv4/IPv6 地址(如 127.0.0.1::1):
    服务器仅接受来自该特定 IPv4 或 IPv6 地址的连接。

绑定失败处理
若地址绑定失败,服务器将报错并拒绝启动。

注意事项
若需将服务器绑定到特定地址,请确保 mysql.user 系统表中存在具有管理权限的账户,以便通过该地址连接服务器(否则无法关闭服务器)。例如:

  • 绑定到 * 时,所有现有账户均可连接。
  • 绑定到 ::1 时,仅允许通过该地址连接。此时需确保 mysql.user 表中存在 'root'@'::1' 账户,以便后续管理服务器。

嵌入式服务器限制
此变量对嵌入式服务器(libmysqld)无效,且在嵌入式服务器环境中不可见。




mysq5.7的bind-address的官方手册翻译(4)

bind_address

命令行格式 --bind-address=addr
系统变量 bind_address
作用域 全局
动态特性
类型 字符串
默认值 *

MySQL服务器通过单个网络套接字监听TCP/IP连接。该套接字绑定到单个地址,但一个地址可能映射到多个网络接口。若要指定地址,需在服务器启动时设置bind_address=addr,其中addr为IPv4/IPv6地址或主机名。若addr为主机名,服务器会将其解析为IP地址并绑定;若主机名解析为多个IP地址,服务器优先使用第一个IPv4地址(若存在),否则使用第一个IPv6地址。

不同地址类型的处理规则

  • 地址为*:服务器监听所有IPv4接口(若支持IPv6则同时监听所有IPv6接口),允许所有接口的IPv4/IPv6连接(默认行为)。
  • 地址为0.0.0.0:仅监听所有IPv4接口。
  • 地址为:::监听所有IPv4和IPv6接口。
  • 地址为IPv4映射地址:支持IPv4/IPv6格式连接。例如绑定::ffff:127.0.0.1时,客户端可通过--host=127.0.0.1--host=::ffff:127.0.0.1连接。
  • 地址为常规IP(如127.0.0.1或::1):仅监听该IP地址的连接。

异常处理与安全注意事项

  1. 绑定失败:若无法绑定指定地址,服务器将报错且无法启动。
  2. 管理账户要求:若绑定特定地址(如::1),需确保mysql.user表中存在对应地址的管理账户(如'root'@'::1'),否则无法通过该地址连接并关闭服务器。例如:
    • 绑定*时,可通过所有现有账户连接;
    • 绑定::1时,仅允许该地址的连接,需提前创建对应账户。

特殊说明

该变量对嵌入式服务器(libmysqld)无效,且在嵌入式服务器环境中不可见。




mysq5.7的bind-address的官方手册翻译(5)

bind_address

  • 命令行格式 :--bind-address=addr
  • 系统变量 :bind_address
  • 作用域 :全局
  • 动态变量 :否
  • 类型 :字符串
  • 默认值 :*

MySQL 服务器通过一个网络套接字监听 TCP/IP 连接。该套接字绑定到一个地址,但一个地址可以映射到多个网络接口。要指定一个地址,需在服务器启动时设置 bind_address=addr,其中 addr 可以是 IPv4 或 IPv6 地址,也可以是主机名。如果 addr 是主机名,服务器会将该主机名解析为 IP 地址并绑定到该地址。如果一个主机名解析到多个 IP 地址,服务器会优先选择第一个 IPv4 地址(如果有 IPv4 地址的话),否则会选择第一个 IPv6 地址。

服务器对不同类型的地址的处理方式如下:

  • 如果地址是 *,服务器会接受所有服务器主机 IPv4 接口的 TCP/IP 连接,如果服务器主机支持 IPv6,还会接受所有 IPv6 接口的连接。使用此地址可以允许所有服务器接口的 IPv4 和 IPv6 连接。这是默认值。
  • 如果地址是 0.0.0.0,服务器会接受所有服务器主机 IPv4 接口的 TCP/IP 连接。
  • 如果地址是 ::,服务器会接受所有服务器主机 IPv4 和 IPv6 接口的 TCP/IP 连接。
  • 如果地址是 IPv4 映射地址,服务器会接受该地址的 TCP/IP 连接,可以是 IPv4 或 IPv6 格式。例如,如果服务器绑定到 ::ffff:127.0.0.1,客户端可以使用 --host=127.0.0.1 或 --host=::ffff:127.0.0.1 进行连接。
  • 如果地址是普通的 IPv4 或 IPv6 地址(例如 127.0.0.1 或 ::1),服务器仅接受该 IPv4 或 IPv6 地址的 TCP/IP 连接。

如果绑定地址失败,服务器会产生错误并且不会启动。

如果你打算将服务器绑定到特定地址,请确保 mysql.user 系统表中有一个具有管理权限的账户,以便你可以连接到该地址。否则,你将无法关闭服务器。例如,如果你将服务器绑定到 *,你可以使用所有现有账户进行连接。但如果你将服务器绑定到 ::1,它只接受该地址的连接。在这种情况下,首先要确保 mysql.user 表中有 'root'@'::1' 账户,以便你仍然可以连接到服务器进行关闭操作。

此变量对嵌入式服务器(libmysqld)无效,在嵌入式服务器中也不可见。










9️⃣ 参考 9 mysq8.0的bind-address的官方手册翻译

mysq8.0的bind-address的官方手册翻译(1)

bind_address

命令行格式 --bind-address=addr 系统变量 bind_address 作用域 全局 动态特性 否 SET_VAR提示应用 否 类型 字符串 默认值 *

MySQL服务器通过一个或多个网络套接字监听TCP/IP连接。每个套接字绑定到一个地址,但一个地址可能映射到多个网络接口。若要指定服务器监听TCP/IP连接的方式,可在服务器启动时设置bind_address系统变量。服务器还有一个admin_address系统变量,可在专用接口上启用管理连接。参见7.1.12.1节"连接接口"。

若指定了bind_address,则其值必须满足以下要求:

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

从MySQL 8.0.13开始,bind_address既可以接受上述的单个值,也可以接受以逗号分隔的值列表。当该变量指定多个值的列表时,每个值必须是单个非通配符IP地址(IPv4或IPv6)或主机名。通配符地址格式(*、0.0.0.0或::)不允许出现在值列表中。

从MySQL 8.0.22开始,地址可以包含网络命名空间说明符。

IP地址可以指定为IPv4或IPv6地址。对于任何主机名值,服务器会将其解析为IP地址并绑定到该地址。若主机名解析为多个IP地址,服务器会优先使用第一个IPv4地址(如果有),否则使用第一个IPv6地址。

服务器对不同类型地址的处理方式如下:

若地址为*,服务器将在所有服务器主机IPv4接口上接受TCP/IP连接;若服务器主机支持IPv6,则在所有IPv6接口上接受连接。使用此地址可允许在所有服务器接口上同时进行IPv4和IPv6连接。此值为默认值。若变量指定多个值的列表,则不允许使用此值。

若地址为0.0.0.0,服务器将在所有服务器主机IPv4接口上接受TCP/IP连接。若变量指定多个值的列表,则不允许使用此值。

若地址为::,服务器将在所有服务器主机IPv4和IPv6接口上接受TCP/IP连接。若变量指定多个值的列表,则不允许使用此值。

若地址为IPv4映射地址,服务器将接受该地址的TCP/IP连接,格式可以是IPv4或IPv6。例如,若服务器绑定到::ffff:127.0.0.1,客户端可以使用--host=127.0.0.1或--host=::ffff:127.0.0.1进行连接。

若地址是"常规"IPv4或IPv6地址(如127.0.0.1或::1),服务器将仅接受该IPv4或IPv6地址的TCP/IP连接。

这些规则适用于为地址指定网络命名空间:

可以为IP地址或主机名指定网络命名空间。

不能为通配符IP地址指定网络命名空间。

对于给定地址,网络命名空间是可选的。若指定,必须作为/ns后缀紧跟在地址之后。

没有/ns后缀的地址使用主机系统全局命名空间。因此,全局命名空间是默认值。

带有/ns后缀的地址使用名为ns的命名空间。

主机系统必须支持网络命名空间,并且每个命名空间必须事先设置。指定不存在的命名空间将产生错误。

若变量值指定多个地址,它可以包含全局命名空间中的地址、命名命名空间中的地址或两者混合。

有关网络命名空间的更多信息,请参见7.1.14节"网络命名空间支持"。

若绑定到任何地址失败,服务器将产生错误且无法启动。

示例:

bind_address=*

服务器监听由*通配符指定的所有IPv4或IPv6地址。

bind_address=198.51.100.20

服务器仅监听198.51.100.20 IPv4地址。

bind_address=198.51.100.20,2001:db8:0:f101::1

服务器监听198.51.100.20 IPv4地址和2001:db8:0:f101::1 IPv6地址。

bind_address=198.51.100.20,*

这会产生错误,因为当bind_address指定多个值的列表时,不允许使用通配符地址。

bind_address=198.51.100.20/red,2001:db8:0:f101::1/blue,192.0.2.50

服务器监听红色命名空间中的198.51.100.20 IPv4地址、蓝色命名空间中的2001:db8:0:f101::1 IPv6地址以及全局命名空间中的192.0.2.50 IPv4地址。

当bind_address指定单个值(通配符或非通配符)时,服务器监听单个套接字,对于通配符地址,该套接字可能绑定到多个网络接口。当bind_address指定多个值的列表时,服务器为每个值监听一个套接字,每个套接字绑定到单个网络接口。套接字的数量与指定的值数量成线性关系。根据操作系统的连接接受效率,较长的值列表可能会在接受TCP/IP连接时产生性能损失。

由于会为监听套接字和网络命名空间文件分配文件描述符,因此可能需要增加open_files_limit系统变量的值。

若打算将服务器绑定到特定地址,请确保mysql.user系统表中包含具有管理权限的账户,以便可以使用该账户连接到该地址。否则,将无法关闭服务器。例如,若将服务器绑定到*,则可以使用所有现有账户连接到它。但如果将服务器绑定到::1,则它仅接受该地址的连接。在这种情况下,首先要确保mysql.user表中存在'root'@'::1'账户,以便仍能连接到服务器并关闭它。




mysq8.0的bind-address的官方手册翻译(2)

以下是英文内容的中文翻译:


bind_address 系统变量说明
  • 命令行格式--bind-address=addr
  • 系统变量bind_address
  • 作用域:全局
  • 动态变量:否
  • SET_VAR Hint 支持:否
  • 类型:字符串
  • 默认值*

MySQL 服务器通过一个或多个网络套接字监听 TCP/IP 连接。每个套接字绑定到一个特定地址,但一个地址可能映射到多个网络接口。要指定监听方式,可在服务器启动时设置 bind_address 系统变量。此外,服务器还有 admin_address 系统变量用于指定管理连接的专用接口(详见 7.1.12.1 节,连接接口)。


配置要求
  1. MySQL 版本差异

    • 8.0.13 之前bind_address 仅支持单个地址值,可以是单个非通配符 IP 地址/主机名,或通配符地址(*0.0.0.0::)。
    • 8.0.13 及之后:支持单个值或逗号分隔的地址列表。若为列表,每个值必须是具体的非通配符 IP 地址(IPv4/IPv6)或主机名,禁止使用通配符地址。
    • 8.0.22 及之后:地址可包含网络命名空间(Network Namespace)标识。
  2. IP 地址格式

    • 支持 IPv4 和 IPv6 地址。
    • 若值为 主机名,服务器会解析为主机的 IP 地址并绑定。若主机名解析出多个 IP 地址,优先使用第一个 IPv4 地址(若有),否则使用第一个 IPv6 地址。

不同地址类型的处理方式
地址类型行为说明
*接受所有 IPv4 接口的连接;若支持 IPv6,则同时接受所有 IPv6 接口。默认值,但 不允许多值列表
0.0.0.0仅接受所有 IPv4 接口的连接,不允许多值列表
::接受所有 IPv4 和 IPv6 接口的连接,不允许多值列表
IPv4 映射地址(如 ::ffff:127.0.0.1接受 IPv4 或 IPv6 格式的连接请求。例如客户端可通过 --host=127.0.0.1--host=::ffff:127.0.0.1 连接。
普通 IPv4/IPv6 地址(如 127.0.0.1::1仅接受该地址的连接请求。

网络命名空间(Network Namespace)规则
  1. 支持场景

    • 可为 IP 地址或主机名 指定网络命名空间。
    • 不可为通配符地址 指定命名空间。
  2. 配置格式

    • 命名空间通过 /ns 后缀指定(如 198.51.100.20/red)。
    • 无后缀:使用主机系统的全局命名空间(默认)。
    • 有后缀:使用指定命名空间(如 /red)。
  3. 限制条件

    • 主机需支持网络命名空间。
    • 指定的命名空间必须预先存在,否则报错。
    • 多值列表中可混合全局命名空间、指定命名空间地址。
  4. 性能影响

    • 每个地址绑定一个独立套接字,多值列表可能导致性能下降(依赖操作系统 TCP/IP 连接处理效率)。
    • 需增加 open_files_limit 系统变量值以支持更多文件描述符。

绑定失败与安全提示
  • 绑定失败:若绑定任意地址失败,服务器报错并停止启动。
  • 安全建议
    • 若绑定到特定地址(如 ::1),需确保存在具有管理权限的账户(如 'root'@'::1'),否则无法关闭服务器。
    • 例如:绑定到 * 时,所有现有账户均可连接;绑定到 ::1 时,需确保对应账户存在。

示例说明
bind_address=*
  • 监听所有 IPv4/IPv6 地址(通配符 *)。
bind_address=198.51.100.20
  • 仅监听 IPv4 地址 198.51.100.20
bind_address=198.51.100.20,2001:db8:0:f101::1
  • 监听 IPv4 地址 198.51.100.20 和 IPv6 地址 2001:db8:0:f101::1
bind_address=198.51.100.20,*
  • 报错:多值列表中禁止使用通配符地址。
bind_address=198.51.100.20/red,2001:db8:0:f101::1/blue,192.0.2.50
  • 监听:
    • 198.51.100.20 在命名空间 red
    • 2001:db8:0:f101::1 在命名空间 blue
    • 192.0.2.50 在全局命名空间。

其他注意事项
  • 单值 vs 多值
    • 单值(通配符或非通配符):绑定单个套接字(通配符可能关联多个接口)。
    • 多值列表:每个值绑定独立套接字,数量线性增长。
  • 网络命名空间文档:详见 7.1.14 节,网络命名空间支持

通过以上翻译,您可全面了解 bind_address 的配置逻辑、版本差异及网络命名空间支持等高级特性。




mysq8.0的bind-address的官方手册翻译(3)

bind_address

命令行格式:--bind-address=addr
系统变量:bind_address
作用范围:全局
动态性:否
SET_VAR 提示适用:否
类型:字符串
默认值:*

MySQL 服务器通过一个或多个网络套接字监听 TCP/IP 连接。每个套接字绑定到一个地址,但一个地址可能映射到多个网络接口。若要指定服务器监听 TCP/IP 连接的方式,需在服务器启动时设置 bind_address 系统变量。服务器还提供 admin_address 系统变量,用于在专用接口上启用管理连接(详见第 7.1.12.1 节“连接接口”)。

若指定 bind_address,其值需满足以下要求:

  • MySQL 8.0.13 之前
    bind_address 仅接受单个地址值,可以是单个非通配符 IP 地址、主机名,或允许监听多个网络接口的通配符格式(*0.0.0.0::)。

  • MySQL 8.0.13 及以上
    bind_address 可接受单个值(如前所述)或由逗号分隔的多个值组成的列表。若指定多个值,每个值必须为单个非通配符 IP 地址(IPv4 或 IPv6)或主机名,通配符格式(*0.0.0.0::)在列表中禁止使用

  • MySQL 8.0.22 及以上
    地址可包含网络命名空间标识符。

地址类型说明
  • IP 地址
    可指定为 IPv4 或 IPv6 地址。若值为主机名,服务器会将其解析为 IP 地址并绑定到该地址。若主机名解析为多个 IP 地址,服务器优先使用第一个 IPv4 地址(若存在),否则使用第一个 IPv6 地址。

  • 通配符地址

    • *:服务器接受来自所有 IPv4 接口(若支持 IPv6,则包括所有 IPv6 接口)的 TCP/IP 连接。此值为默认值,允许所有接口支持 IPv4 和 IPv6 连接。若指定多个值,此格式禁止使用
    • 0.0.0.0:服务器接受来自所有 IPv4 接口的连接。若指定多个值,此格式禁止使用
    • :::服务器接受来自所有 IPv4 和 IPv6 接口的连接。若指定多个值,此格式禁止使用
  • IPv4 映射地址
    若地址为 IPv4 映射地址(如 ::ffff:127.0.0.1),服务器接受 IPv4 或 IPv6 格式的连接。例如,若服务器绑定到 ::ffff:127.0.0.1,客户端可通过 --host=127.0.0.1--host=::ffff:127.0.0.1 连接。

  • 常规 IPv4/IPv6 地址(如 127.0.0.1::1):
    服务器仅接受来自该特定地址的连接。

网络命名空间支持
  • 可为 IP 地址或主机名指定网络命名空间(格式:地址/命名空间),但通配符地址不支持。
  • 若未指定命名空间(如 192.0.2.1),默认使用全局命名空间。
  • 主机系统需支持网络命名空间,且命名空间需预先配置。引用不存在的命名空间会报错。
  • 若指定多个地址,可混合使用全局命名空间和命名空间(如 192.0.2.1/red, 2001:db8::1/blue)。

详见第 7.1.14 节“网络命名空间支持”。

错误处理

若绑定任意地址失败,服务器报错并拒绝启动。

示例
  1. bind_address=*
    服务器监听所有 IPv4 和 IPv6 地址(通配符 *)。

  2. bind_address=198.51.100.20
    服务器仅监听 IPv4 地址 198.51.100.20

  3. bind_address=198.51.100.20,2001:db8:0:f101::1
    服务器同时监听 IPv4 地址 198.51.100.20 和 IPv6 地址 2001:db8:0:f101::1

  4. bind_address=198.51.100.20/red,2001:db8:0:f101::1/blue,192.0.2.50
    服务器监听:

    • IPv4 地址 198.51.100.20(位于 red 命名空间)
    • IPv6 地址 2001:db8:0:f101::1(位于 blue 命名空间)
    • IPv4 地址 192.0.2.50(全局命名空间)。
性能提示
  • 单值绑定:若绑定单个地址(通配符或非通配符),服务器通过单个套接字监听(通配符地址可能绑定到多个接口)。
  • 多值绑定:若绑定多个地址,服务器为每个地址创建独立套接字,套接字数量与地址数量成正比。根据操作系统接受连接的效率,长地址列表可能导致性能下降。
  • 文件描述符限制:若需增加监听套接字或网络命名空间文件,可能需要调整 open_files_limit 系统变量。
注意事项

若需将服务器绑定到特定地址,请确保 mysql.user 系统表中存在具有管理权限的账户,以便通过该地址连接服务器(否则无法关闭服务器)。例如:

  • 绑定到 * 时,所有现有账户均可连接。
  • 绑定到 ::1 时,仅允许通过该地址连接。此时需确保 mysql.user 表中存在 'root'@'::1' 账户,以便后续管理服务器。




mysq8.0的bind-address的官方手册翻译(4)

以下是 bind_address 系统变量的中文翻译:


bind_address
  • 命令行格式--bind-address=addr
  • 系统变量bind_address
  • 作用域:全局
  • 动态修改:否
  • 是否适用 SET_VAR 提示:否
  • 类型:字符串
  • 默认值*

MySQL 服务器通过一个或多个网络套接字监听 TCP/IP 连接。每个套接字绑定到一个地址,但一个地址可能映射到多个网络接口。要指定服务器如何监听 TCP/IP 连接,请在启动时设置 bind_address 系统变量。服务器还有一个 admin_address 系统变量,用于在专用接口上启用管理连接。详见《连接接口》章节。

如果指定了 bind_address,其值必须满足以下要求:

  • MySQL 8.0.13 之前bind_address 接受单个地址值,可以是单个非通配符 IP 地址或主机名,或允许在多个网络接口上监听的通配符地址格式(*0.0.0.0::)。
  • MySQL 8.0.13 及之后bind_address 可以是单个值(同上),也可以是逗号分隔的多个值列表。当变量包含多个值时,每个值必须是单个非通配符 IP 地址(IPv4 或 IPv6)或主机名。不允许在列表中使用通配符地址格式(如 *0.0.0.0::)。
  • MySQL 8.0.22 及之后:地址可以包含网络命名空间(network namespace)标识符。

IP 地址可以是 IPv4 或 IPv6 格式。对于主机名,服务器会将其解析为 IP 地址并绑定到该地址。如果主机名解析为多个 IP 地址,服务器会优先使用第一个 IPv4 地址(如果有),否则使用第一个 IPv6 地址。

服务器对不同地址类型的处理如下:

  • *:服务器在所有主机的 IPv4 接口上监听,并在支持 IPv6 的情况下监听所有 IPv6 接口。此值是默认值。如果变量指定多个值,则不允许使用此值。
  • 0.0.0.0:服务器在所有主机的 IPv4 接口上监听。如果变量指定多个值,则不允许使用此值。
  • :::服务器在所有主机的 IPv4 和 IPv6 接口上监听。如果变量指定多个值,则不允许使用此值。
  • IPv4 映射地址:服务器接受该地址的 IPv4 或 IPv6 连接。例如,若服务器绑定到 ::ffff:127.0.0.1,客户端可以通过 --host=127.0.0.1--host=::ffff:127.0.0.1 连接。
  • 常规 IPv4/IPv6 地址(如 127.0.0.1::1):服务器仅接受该特定地址的连接。

网络命名空间规则
  • 可以为 IP 地址或主机名指定网络命名空间。
  • 通配符地址不能指定网络命名空间
  • 对于给定地址,网络命名空间是可选的,需以 /ns 后缀立即跟随地址。
    • /ns 后缀的地址使用主机系统的全局命名空间(默认)。
    • /ns 后缀的地址使用命名空间 ns
  • 主机系统必须支持网络命名空间,且每个命名空间需预先配置。若指定不存在的命名空间会报错。
  • 若变量值包含多个地址,可以混合使用全局命名空间和命名的命名空间。

更多信息详见《网络命名空间支持》章节。


常见示例
## 示例 1: 监听所有 IPv4/IPv6 地址
bind_address=*

## 示例 2: 仅监听 IPv4 地址 198.51.100.20
bind_address=198.51.100.20

## 示例 3: 同时监听 IPv4 和 IPv6 地址
bind_address=198.51.100.20,2001:db8:0:f101::1

## 示例 4: 错误!通配符不能与多值列表共存
bind_address=198.51.100.20,*

## 示例 5: 使用网络命名空间
bind_address=198.51.100.20/red,2001:db8:0:f101::1/blue,192.0.2.50

注意事项
  • 如果绑定到某个地址失败,服务器会报错并无法启动。
  • bind_address 为单个值时,服务器在单个套接字上监听(通配符地址可能绑定到多个接口)。当为多值列表时,每个值对应一个套接字,绑定到单一接口。套接字数量与值的数量成线性关系,操作系统对连接接受效率的限制可能导致性能下降。
  • 由于需要为监听套接字和网络命名空间文件分配文件描述符,可能需要增加 open_files_limit 系统变量。
  • 绑定到特定地址时,需确保 mysql.user 系统表中存在可连接该地址的管理员账户。例如:
    • 若绑定到 *,所有现有账户均可连接。
    • 若绑定到 ::1,需确保存在 'root'@'::1' 账户,否则无法关闭服务器。

通过合理配置 bind_address,可以控制 MySQL 服务器的网络监听行为,实现安全性和灵活性的平衡。




mysq8.0的bind-address的官方手册翻译(5)

bind_address

命令行格式 --bind-address=addr
系统变量 bind_address
作用域 全局
动态特性
SET_VAR提示应用
类型 字符串
默认值 *

MySQL服务器通过一个或多个网络套接字监听TCP/IP连接。每个套接字绑定到一个地址,但一个地址可能映射到多个网络接口。若要指定服务器监听TCP/IP连接的方式,需在服务器启动时设置bind_address系统变量。服务器还包含admin_address系统变量,用于在专用接口上启用管理连接。参见7.1.12.1节“连接接口”。

配置规则

若指定bind_address,其值需满足以下规则:

  • MySQL 8.0.13之前:仅接受单个地址值,可为单个非通配符IP/主机名,或通配符格式(*、0.0.0.0、::)以监听多个接口。
  • MySQL 8.0.13及之后:可接受单个值或逗号分隔的列表。列表中的每个值必须为非通配符IP(IPv4/IPv6)或主机名,禁止使用通配符格式
  • MySQL 8.0.22及之后:地址可包含网络命名空间说明符(如192.168.1.1/ns1)。
地址解析规则
  1. IP地址格式:支持IPv4/IPv6。
  2. 主机名解析:若为主机名,服务器解析为IP并绑定。若解析为多个IP,优先使用第一个IPv4地址(若存在),否则取第一个IPv6地址。
不同地址类型的处理方式
  • 地址为*:监听所有IPv4接口(若支持IPv6则同时监听所有IPv6接口),允许全接口的IPv4/IPv6连接(默认值)。列表模式禁止使用*
  • 地址为0.0.0.0:仅监听所有IPv4接口。列表模式禁止使用0.0.0.0
  • 地址为:::监听所有IPv4和IPv6接口。列表模式禁止使用::
  • 地址为IPv4映射地址:支持IPv4/IPv6格式连接。例如绑定::ffff:127.0.0.1时,客户端可通过--host=127.0.0.1--host=::ffff:127.0.0.1连接。
  • 地址为常规IP(如127.0.0.1或::1):仅监听该IP的连接。
网络命名空间规则
  1. 格式:地址后可加/ns后缀指定命名空间(如192.168.1.1/red)。
  2. 限制:通配符地址禁止指定命名空间。
  3. 默认行为:未指定/ns的地址使用全局命名空间。
  4. 前提条件:主机系统需支持网络命名空间,且目标命名空间已创建,否则报错。
示例
  • bind_address=*:监听所有IPv4/IPv6地址(通配符模式)。
  • bind_address=198.51.100.20:仅监听该IPv4地址。
  • bind_address=198.51.100.20,2001:db8:0:f101::1:同时监听IPv4和IPv6地址。
  • bind_address=198.51.100.20,*报错(列表模式禁止通配符)。
  • bind_address=198.51.100.20/red,2001:db8:0:f101::1/blue,192.0.2.50:分别监听红色命名空间、蓝色命名空间和全局命名空间的地址。
性能与安全注意事项
  1. 套接字数量
    • 单地址(通配符/非通配符):使用单个套接字(通配符可能绑定多个接口)。
    • 多地址列表:每个地址对应一个套接字,数量与地址数成正比,长列表可能影响连接接受效率。
  2. 资源限制:可能需要增加open_files_limit系统变量以应对文件描述符消耗。
  3. 管理账户要求:若绑定特定地址(如::1),需确保mysql.user表中存在对应地址的管理账户(如'root'@'::1'),否则无法连接并关闭服务器。
关键说明

若绑定任意地址失败,服务器将报错且无法启动。配置时需结合用户权限(GRANT)和防火墙规则,避免安全风险。




mysq8.0的bind-address的官方手册翻译(6)

bind_address

  • 命令行格式 :--bind-address=addr
  • 系统变量 :bind_address
  • 作用域 :全局
  • 动态变量 :否
  • 是否适用 SET_VAR 提示 :否
  • 类型 :字符串
  • 默认值 :*

MySQL 服务器通过一个或多个网络套接字监听 TCP/IP 连接。每个套接字绑定到一个地址,但一个地址可以映射到多个网络接口。要指定服务器应如何监听 TCP/IP 连接,需在服务器启动时设置 bind_address 系统变量。服务器还有一个 admin_address 系统变量,用于在专用接口上进行管理连接。详见 7.1.12.1 节 “连接接口”。

如果指定了 bind_address,其值必须满足以下要求:

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

从 MySQL 8.0.13 开始,bind_address 可以接受上述单个值,也可以接受多个值的逗号分隔列表。当变量指定多个值时,每个值必须是一个单一的非通配符 IP 地址(IPv4 或 IPv6)或主机名,不允许使用通配符地址格式(*、0.0.0.0 或 ::)。

从 MySQL 8.0.22 开始,地址可以包含网络命名空间限定符。

IP 地址可以是 IPv4 或 IPv6 地址。对于任何主机名的值,服务器会将其解析为 IP 地址并绑定到该地址。如果主机名解析到多个 IP 地址,服务器会优先选择第一个 IPv4 地址(如果有),否则选择第一个 IPv6 地址。

服务器对不同类型的地址的处理方式如下:

  • 如果地址是 *,服务器接受所有服务器主机 IPv4 接口的 TCP/IP 连接,如果服务器主机支持 IPv6,也会接受所有 IPv6 接口的连接。此地址允许所有服务器接口的 IPv4 和 IPv6 连接,是默认值。如果变量指定多个值的列表,则不允许此值。
  • 如果地址是 0.0.0.0,服务器接受所有服务器主机 IPv4 接口的 TCP/IP 连接。如果变量指定多个值的列表,则不允许此值。
  • 如果地址是 ::,服务器接受所有服务器主机 IPv4 和 IPv6 接口的 TCP/IP 连接。如果变量指定多个值的列表,则不允许此值。
  • 如果地址是 IPv4 映射地址,服务器接受该地址的 TCP/IP 连接,可以是 IPv4 或 IPv6 格式。例如,如果服务器绑定到 ::ffff:127.0.0.1,客户端可以使用 --host=127.0.0.1 或 --host=::ffff:127.0.0.1 进行连接。
  • 如果地址是普通的 IPv4 或 IPv6 地址(如 127.0.0.1 或 ::1),服务器仅接受该 IPv4 或 IPv6 地址的 TCP/IP 连接。

以下是为地址指定网络命名空间的规则:

  • 可以为 IP 地址或主机名指定网络命名空间。
  • 不能为通配符 IP 地址指定网络命名空间。
  • 对于给定地址,网络命名空间是可选的。如果指定,必须作为地址后紧跟的 /ns 后缀。
  • 没有 /ns 后缀的地址使用主机系统的全局命名空间,默认使用全局命名空间。
  • 带 /ns 后缀的地址使用名为 ns 的命名空间。
  • 主机系统必须支持网络命名空间,且每个命名的命名空间必须已预先设置。命名一个不存在的命名空间会报错。

如果变量值指定多个地址,可以包含全局命名空间中的地址、命名命名空间中的地址或两者混合。

有关网络命名空间的更多信息,详见 7.1.14 节 “网络命名空间支持”。

如果绑定到任何地址失败,服务器会报错且无法启动。

示例:

bind_address=*

服务器监听所有 IPv4 或 IPv6 地址,如 * 通配符所指定。

bind_address=198.51.100.20

服务器仅监听 198.51.100.20 IPv4 地址。

bind_address=198.51.100.20,2001:db8:0:f101::1

服务器监听 198.51.100.20 IPv4 地址和 2001:db8:0:f101::1 IPv6 地址。

bind_address=198.51.100.20,*

这会报错,因为当 bind_address 指定多个值时,不允许使用通配符地址。

bind_address=198.51.100.20/red,2001:db8:0:f101::1/blue,192.0.2.50

服务器在 red 命名空间监听 198.51.100.20 IPv4 地址,在 blue 命名空间监听 2001:db8:0:f101::1 IPv6 地址,在全局命名空间监听 192.0.2.50 IPv4 地址。

当 bind_address 指定单一值(通配符或非通配符)时,服务器在一个套接字上监听,对于通配符地址,该套接字可能绑定到多个网络接口。当 bind_address 指定多个值的列表时,服务器每个值对应一个套接字进行监听,每个套接字绑定到一个网络接口。套接字数量与指定值的数量成正比。根据操作系统对连接接受的效率,过长的值列表可能会对接受 TCP/IP 连接造成性能损失。

由于监听套接字和网络命名空间文件会分配文件描述符,可能需要增加 open_files_limit 系统变量的值。

如果你打算将服务器绑定到特定地址,请确保 mysql.user 系统表中有具有管理权限的账户,以便连接到该地址。否则,你将无法关闭服务器。例如,如果将服务器绑定到 *,可以使用所有现有账户进行连接。但若将服务器绑定到 ::1,仅该地址可连接。此时需确保 mysql.user 表中有 'root'@'::1' 账户,以便仍能连接服务器进行关闭操作。




mysq8.0的bind-address的官方手册翻译(7)

bind_address(绑定地址)

命令行格式--bind-address=addr
系统变量bind_address
作用范围:全局
动态修改:否
SET_VAR 提示适用:否
类型:字符串
默认值*

MySQL 服务器通过一个或多个网络套接字监听 TCP/IP 连接。每个套接字绑定到单个地址(一个地址可映射多个网络接口)。通过设置 bind_address 系统变量指定监听方式(另可通过 admin_address 在专用接口启用管理连接,详见章节 7.1.12.1)。


地址规范要求
MySQL 版本地址规则
< 8.0.13仅接受单个值:
• 非通配符 IP/主机名
• 通配符格式(*, 0.0.0.0, ::
≥ 8.0.13可接受逗号分隔的地址列表:
• 仅限非通配符 IP(IPv4/IPv6)或主机名
禁止通配符格式
≥ 8.0.22地址可包含网络命名空间标识符

说明

  • IP 地址支持 IPv4/IPv6 格式
  • 主机名会被解析为 IP 地址(多 IP 时优先选首个 IPv4,无 IPv4 则选首个 IPv6)

地址类型处理规则
地址格式行为说明多地址限制
* (默认值)监听所有 IPv4 接口;若支持 IPv6 则监听所有 IPv6 接口禁止用于列表
0.0.0.0监听所有 IPv4 接口禁止用于列表
::监听所有 IPv4/IPv6 接口禁止用于列表
IPv4 映射地址
(如 ::ffff:127.0.0.1)
同时接受 IPv4/IPv6 连接
(例:客户端可用 127.0.0.1::ffff:127.0.0.1
允许
常规地址
(如 127.0.0.1::1)
仅接受指定地址连接允许

网络命名空间规则 (≥8.0.22)
  1. 适用范围

    • 仅限 IP 地址/主机名(通配符地址不可用)
    • 通过 /ns 后缀指定(如 198.51.100.20/red
  2. 命名空间逻辑

    • 无后缀:使用主机全局命名空间(默认
    • 有后缀:使用指定命名空间(如 /red 使用 red 空间)
    • 前提:主机系统需支持网络命名空间,且命名空间已预先配置
  3. 多地址组合
    可混合包含全局命名空间和指定命名空间的地址

详见章节 7.1.14《网络命名空间支持》


关键注意事项
  1. 启动失败
    任一地址绑定失败将导致服务器报错中止启动。

  2. 权限配置

    • 绑定特定地址(如 ::1)时,必须mysql.user 中配置对应管理员账户(如 'root'@'::1'
    • 否则无法关闭服务器(绑定通配符 * 时无此限制)
  3. 多地址性能影响

    • 多地址监听时,每个地址创建独立套接字
    • 地址数量增加可能降低 TCP/IP 连接接受效率
  4. 文件描述符限制
    需根据情况调整 open_files_limit 系统变量(因监听套接字和命名空间文件需占用描述符)


示例说明
## 监听所有 IPv4/IPv6 地址(通配符模式)
bind_address=*

## 仅监听 198.51.100.20 (IPv4)
bind_address=198.51.100.20

## 多地址监听(IPv4 + IPv6)
bind_address=198.51.100.20,2001:db8:0:f101::1

## ⚠️ 错误示例(多地址列表中禁含通配符)
bind_address=198.51.100.20,*  

## 混合命名空间监听:
## - 198.51.100.20 (red 空间)
## - 2001:db8:0:f101::1 (blue 空间)
## - 192.0.2.50 (全局空间)
bind_address=198.51.100.20/red,2001:db8:0:f101::1/blue,192.0.2.50

术语对照表
英文术语中文翻译
network namespace网络命名空间
wildcard address通配符地址
administrative connection管理连接










🔟 参考 10 mysq 8.4 , 9.2 , 9.3的bind-address的官方手册(相同)翻译

mysq 8.4 , 9.2 , 9.3的bind-address的官方手册(相同)翻译(1)

bind_address

命令行格式 --bind-address=addr
系统变量 bind_address
作用域 全局
动态特性
SET_VAR提示应用
类型 字符串
默认值 *

MySQL服务器通过一个或多个网络套接字监听TCP/IP连接。每个套接字绑定到一个地址,但一个地址可能映射到多个网络接口。若要指定服务器监听TCP/IP连接的方式,需在服务器启动时设置bind_address系统变量。服务器还包含admin_address系统变量,用于在专用接口上启用管理连接。参见7.1.12.1节“连接接口”。

配置规则

若指定bind_address,其值需满足以下规则:

  • 可接受一个或多个地址值的列表,每个值必须为单个非通配符IP地址或主机名。
  • 每个地址可包含网络命名空间说明符。
  • 若仅指定一个地址,可使用通配符格式(*、0.0.0.0或::)以监听多个网络接口;若指定多个地址(以逗号分隔),则每个值必须为非通配符IP地址(IPv4/IPv6)或主机名,禁止使用通配符格式

地址解析规则

  1. IP地址格式:可指定为IPv4或IPv6地址。
  2. 主机名解析:若为主机名,服务器会将其解析为IP地址并绑定。若主机名解析为多个IP地址,优先使用第一个IPv4地址(若存在),否则使用第一个IPv6地址。

不同地址类型的处理方式

  • 地址为*:服务器监听所有IPv4接口(若支持IPv6则同时监听所有IPv6接口),允许所有接口的IPv4/IPv6连接(默认值)。若配置多地址列表,禁止使用*
  • 地址为0.0.0.0:仅监听所有IPv4接口。若配置多地址列表,禁止使用0.0.0.0
  • 地址为:::监听所有IPv4和IPv6接口。若配置多地址列表,禁止使用::
  • 地址为IPv4映射地址:支持IPv4/IPv6格式连接。例如绑定::ffff:127.0.0.1时,客户端可通过--host=127.0.0.1--host=::ffff:127.0.0.1连接。
  • 地址为常规IP(如127.0.0.1或::1):仅监听该IP地址的连接。

网络命名空间规则

  1. 支持为IP/主机名指定命名空间,格式为地址/nsns为命名空间名称)。
  2. 通配符地址禁止指定命名空间
  3. 未指定/ns后缀的地址使用全局命名空间(默认行为)。
  4. 主机系统需提前创建命名空间,否则会报错。
  5. 多地址列表可混合全局命名空间和命名命名空间的地址。

示例

  • bind_address=*:监听所有IPv4/IPv6地址(通配符模式)。
  • bind_address=198.51.100.20:仅监听该IPv4地址。
  • bind_address=198.51.100.20,2001:db8:0:f101::1:同时监听IPv4和IPv6地址。
  • bind_address=198.51.100.20,*报错(多地址列表禁止通配符)。
  • bind_address=198.51.100.20/red,2001:db8:0:f101::1/blue,192.0.2.50:分别监听红色命名空间、蓝色命名空间和全局命名空间的地址。

性能与安全注意事项

  1. 单地址 vs 多地址
    • 单地址(通配符或非通配符):使用单个套接字(通配符可能绑定多个接口)。
    • 多地址列表:每个地址对应一个套接字,套接字数量与地址数成正比,长列表可能影响TCP/IP连接接受效率。
  2. 文件描述符限制:可能需要增加open_files_limit系统变量的值。
  3. 管理账户要求:若绑定特定地址(如::1),需确保mysql.user表中存在对应地址的管理账户(如'root'@'::1'),否则无法关闭服务器。




mysq 8.4 , 9.2 , 9.3的bind-address的官方手册(相同)翻译(2)

命令行格式:--bind-address=addr 系统变量:bind_address 作用域:全局 动态变量:否 是否适用 SET_VAR 提示:否 类型:字符串 默认值:*

MySQL 服务器通过一个或多个网络套接字监听 TCP/IP 连接。每个套接字绑定一个地址,但一个地址可以映射到多个网络接口。要指定服务器应如何监听 TCP/IP 连接,需在服务器启动时设置 bind_address 系统变量。服务器还有一个 admin_address 系统变量,用于在专用接口上进行管理连接。详见 7.1.12.1 节 “连接接口”。

如果指定了 bind_address,它接受一个或多个地址值组成的列表,每个值可以是一个单一的非通配符 IP 地址或主机名。每个地址可以包含网络命名空间限定符。如果只指定一个地址,可以使用允许监听多个网络接口的通配符地址格式(、0.0.0.0 或 ::)。多个地址用逗号分隔。当列出多个值时,每个值必须指定一个单一的非通配符 IP 地址(IPv4 或 IPv6)或主机名,不允许使用通配符地址格式(、0.0.0.0 或 ::)。

IP 地址可以是 IPv4 或 IPv6 地址。对于任何主机名的值,服务器会将主机名解析为 IP 地址并绑定到该地址。如果主机名解析到多个 IP 地址,服务器会使用第一个 IPv4 地址(如果有),否则使用第一个 IPv6 地址。

服务器对不同类型的地址的处理方式如下:

  • 如果地址是 *,服务器接受所有服务器主机 IPv4 接口的 TCP/IP 连接,如果服务器主机支持 IPv6,则也接受所有 IPv6 接口的连接。使用此地址允许所有服务器接口的 IPv4 和 IPv6 连接。这是默认值。如果变量指定多个值的列表,则不允许此值。
  • 如果地址是 0.0.0.0,服务器接受所有服务器主机 IPv4 接口的 TCP/IP 连接。如果变量指定多个值的列表,则不允许此值。
  • 如果地址是 ::,服务器接受所有服务器主机 IPv4 和 IPv6 接口的 TCP/IP 连接。如果变量指定多个值的列表,则不允许此值。
  • 如果地址是 IPv4 映射地址,服务器接受该地址的 TCP/IP 连接,格式可以是 IPv4 或 IPv6。例如,如果服务器绑定到 ::ffff:127.0.0.1,客户端可以使用 --host=127.0.0.1 或 --host=::ffff:127.0.0.1 进行连接。
  • 如果地址是普通的 IPv4 或 IPv6 地址(例如 127.0.0.1 或 ::1),服务器仅接受该 IPv4 或 IPv6 地址的 TCP/IP 连接。

为地址指定网络命名空间的规则如下:

  • 可以为 IP 地址或主机名指定网络命名空间。
  • 不能为通配符 IP 地址指定网络命名空间。
  • 对于给定地址,网络命名空间是可选的。如果指定,必须作为地址后紧跟的 /ns 后缀。
  • 没有 /ns 后缀的地址使用主机系统的全局命名空间。因此,全局命名空间是默认的。
  • 带 /ns 后缀的地址使用名为 ns 的命名空间。
  • 主机系统必须支持网络命名空间,且每个命名的命名空间必须已预先设置。命名一个不存在的命名空间会报错。

如果变量值指定多个地址,可以包含全局命名空间中的地址、命名命名空间中的地址或两者的混合。

有关网络命名空间的更多信息,详见 7.1.14 节 “网络命名空间支持”。

如果绑定到任何地址失败,服务器会报错且无法启动。

示例:

bind_address=*

服务器监听所有 IPv4 或 IPv6 地址,如 * 通配符所指定。

bind_address=198.51.100.20

服务器仅监听 198.51.100.20 IPv4 地址。

bind_address=198.51.100.20,2001:db8:0:f101::1

服务器监听 198.51.100.20 IPv4 地址和 2001:db8:0:f101::1 IPv6 地址。

bind_address=198.51.100.20,*

这会报错,因为当 bind_address 指定多个值时不允许使用通配符地址。

bind_address=198.51.100.20/red,2001:db8:0:f101::1/blue,192.0.2.50

服务器在 red 命名空间监听 198.51.100.20 IPv4 地址,在 blue 命名空间监听 2001:db8:0:f101::1 IPv6 地址,在全局命名空间监听 192.0.2.50 IPv4 地址。

当 bind_address 指定单一值(通配符或非通配符)时,服务器在一个套接字上监听,对于通配符地址,该套接字可能绑定到多个网络接口。当 bind_address 指定多个值的列表时,服务器每个值对应一个套接字进行监听,每个套接字绑定到一个网络接口。套接字数量与指定值的数量成正比。根据操作系统对连接接受的效率,过长的值列表可能会对接受 TCP/IP 连接造成性能损失。

由于监听套接字和网络命名空间文件会分配文件描述符,可能需要增加 open_files_limit 系统变量的值。

如果你打算将服务器绑定到特定地址,请确保 mysql.user 系统表中有一个具有管理权限的账户,以便你可以连接到该地址。否则,你将无法关闭服务器。例如,如果你将服务器绑定到 *,你可以使用所有现有账户进行连接。但如果你将服务器绑定到 ::1,它只接受该地址的连接。这种情况下,首先要确保 mysql.user 表中有 'root'@'::1' 账户,以便你仍然可以连接到服务器进行关闭操作。