允许远程登录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),必须确保mysql.user系统表中存在允许该地址的管理员账户(如'root'@'::1')。 - 否则无法关闭服务器(绑定
::1后仅允许该地址连接)。 - 绑定
*时可使用所有现有账户连接。
- 若绑定到特定地址(如
嵌入式服务器说明
此变量对嵌入式服务器 (libmysqld) 无效且不可见。
术语对照表
| 英文术语 | 中文翻译 |
|---|---|
| network socket | 网络套接字 |
| IPv4-mapped address | IPv4 映射地址 |
| 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)
-
适用范围
- 仅限 IP 地址/主机名(通配符地址不可用)
- 通过
/ns后缀指定(如198.51.100.20/red)
-
命名空间逻辑
- 无后缀:使用主机全局命名空间(默认)
- 有后缀:使用指定命名空间(如
/red使用red空间) - 前提:主机系统需支持网络命名空间,且命名空间已预先配置
-
多地址组合
可混合包含全局命名空间和指定命名空间的地址
详见章节 7.1.14《网络命名空间支持》
关键注意事项
-
启动失败
任一地址绑定失败将导致服务器报错中止启动。 -
权限配置
- 绑定特定地址(如
::1)时,必须在mysql.user中配置对应管理员账户(如'root'@'::1') - 否则无法关闭服务器(绑定通配符
*时无此限制)
- 绑定特定地址(如
-
多地址性能影响
- 多地址监听时,每个地址创建独立套接字
- 地址数量增加可能降低 TCP/IP 连接接受效率
-
文件描述符限制
需根据情况调整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)。
地址规范规则
-
基本格式
- 支持单个地址或逗号分隔的地址列表
- 每个地址可为:
• 非通配符 IP(IPv4/IPv6)
• 主机名
• 单个地址时可额外使用通配符(*,0.0.0.0,::)
-
网络命名空间(可选)
- 通过
/ns后缀指定(如192.0.2.5/red) - 不适用于通配符地址
- 通过
-
主机名解析
- 解析为多个 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) | 仅限指定地址 | 允许 |
网络命名空间规范
-
后缀格式
- 地址后添加
/ns(如2001:db8::1/blue) - 无后缀:使用全局命名空间(默认)
- 地址后添加
-
强制要求
- 主机系统需支持网络命名空间
- 命名空间必须预先配置(不存在则报错)
-
混合使用
可同时包含全局命名空间和指定命名空间的地址详见章节 7.1.14《网络命名空间支持》
关键机制与注意事项
-
启动验证
- 任一地址绑定失败 → 服务器报错中止启动
-
套接字分配
地址类型 套接字数量 接口绑定 通配符地址 单个套接字 多接口 多地址列表 每个地址独立套接字 单接口/地址 -
性能影响
- 地址数量增加 → 可能降低 TCP 连接接受效率
-
资源管理
- 需根据情况调整
open_files_limit(套接字和命名空间文件占用描述符)
- 需根据情况调整
-
权限要求
- 绑定特定地址(如
::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_user和your_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) | 仅允许特定网卡接收连接 |
::1 | IPv6 的本地回环地址 (相当于 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 服务处理
│
└→ 拒绝 → 连接失败
五、与其他配置的关系
-
用户权限:
- 即使设置
bind-address=0.0.0.0,用户仍需有'user'@'%'权限才能远程连接 - 本地用户
'user'@'localhost'始终可通过回环接口连接
- 即使设置
-
防火墙:
# 即使 bind-address=0.0.0.0 # 防火墙未开放3306端口仍会阻止连接 sudo ufw deny 3306 -
skip-networking:
- 如果启用此参数,MySQL 会完全禁用 TCP/IP 连接
- 此时
bind-address设置将无效
六、配置建议
-
开发环境:
bind-address = 0.0.0.0 # 方便测试 -
生产环境:
# 方案1:监听内网IP bind-address = 10.0.0.5 # 方案2:配合防火墙白名单 bind-address = 0.0.0.0 # 防火墙限制:只允许特定IP访问3306 -
高安全环境:
bind-address = 127.0.0.1 # 默认安全 # 通过SSH隧道访问: # ssh -L 3306:localhost:3306 user@dbserver
七、配置验证方法
-
检查监听端口:
sudo netstat -tuln | grep 3306- 正常输出示例:
tcp6 0 0 :::3306 :::* LISTEN # 监听所有IP tcp6 0 0 127.0.0.1:3306 :::* LISTEN # 仅本地
- 正常输出示例:
-
远程连接测试:
telnet [服务器IP] 3306- 连接成功:显示 MySQL 版本信息
- 连接失败:
Connection refused
八、常见误区
-
错误认知:"设置了
bind-address=0.0.0.0就代表允许远程登录"
✅ 实际:还需正确配置用户权限(GRANT)和防火墙 -
配置冲突:同时使用
bind-address和skip-networking
✅ 解决方案:skip-networking优先级更高,需确保其被注释:# skip-networking # 确保此行被注释 -
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
六、安全建议
-
使用 IP 限制:避免使用
'%'通配符,改为具体子网CREATE USER 'secureuser'@'2001:db8:abcd::/64' IDENTIFIED BY 'password'; -
启用加密连接
[mysqld] require_secure_transport = ON -
使用 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:7334 | 2001:db8:85a3::8a2e:370:7334 | [2001:db8:85a3::8a2e:370:7334] |
| fe80:0000:0000:0000:0202:b3ff:fe1e:8329 | fe80::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) | 仅允许特定网卡接收连接 |
::1 | IPv6 的本地回环地址 (相当于 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 服务处理
│
└→ 拒绝 → 连接失败
五、与其他配置的关系
-
用户权限:
- 即使设置
bind-address=0.0.0.0,用户仍需有'user'@'%'权限才能远程连接 - 本地用户
'user'@'localhost'始终可通过回环接口连接
- 即使设置
-
防火墙:
# 即使 bind-address=0.0.0.0 # 防火墙未开放3306端口仍会阻止连接 sudo ufw deny 3306 -
skip-networking:
- 如果启用此参数,MySQL 会完全禁用 TCP/IP 连接
- 此时
bind-address设置将无效
六、配置建议
-
开发环境:
bind-address = 0.0.0.0 # 方便测试 -
生产环境:
# 方案1:监听内网IP bind-address = 10.0.0.5 # 方案2:配合防火墙白名单 bind-address = 0.0.0.0 # 防火墙限制:只允许特定IP访问3306 -
高安全环境:
bind-address = 127.0.0.1 # 默认安全 # 通过SSH隧道访问: # ssh -L 3306:localhost:3306 user@dbserver
七、配置验证方法
-
检查监听端口:
sudo netstat -tuln | grep 3306- 正常输出示例:
tcp6 0 0 :::3306 :::* LISTEN # 监听所有IP tcp6 0 0 127.0.0.1:3306 :::* LISTEN # 仅本地
- 正常输出示例:
-
远程连接测试:
telnet [服务器IP] 3306- 连接成功:显示 MySQL 版本信息
- 连接失败:
Connection refused
八、常见误区
-
错误认知:"设置了
bind-address=0.0.0.0就代表允许远程登录"
✅ 实际:还需正确配置用户权限(GRANT)和防火墙 -
配置冲突:同时使用
bind-address和skip-networking
✅ 解决方案:skip-networking优先级更高,需确保其被注释:# skip-networking # 确保此行被注释 -
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
五、安全加固建议
-
最小权限原则
- 避免使用
GRANT ALL PRIVILEGES,按需分配权限(如SELECT,INSERT)。
- 避免使用
-
强制SSL加密
- 配置MySQL要求SSL连接:
ALTER USER 'ipv6_user'@'%' REQUIRE SSL; - 客户端连接时添加
--ssl-mode=REQUIRED参数。
- 配置MySQL要求SSL连接:
-
网络隔离
- 将MySQL部署在私有子网,通过VPN或堡垒机访问。
-
日志审计
- 启用MySQL通用查询日志,监控IPv6连接行为:
SET GLOBAL general_log = 'ON';
- 启用MySQL通用查询日志,监控IPv6连接行为:
常见问题排查
-
连接超时:
- 检查防火墙是否放行IPv6的3306端口。
- 使用
netstat -tuln | grep 3306验证MySQL监听状态(应显示tcp6 0 0 :::3306 :::* LISTEN)。
-
权限拒绝:
- 执行
SELECT Host, User FROM mysql.user;确认用户权限。 - 确保客户端IPv6地址在授权范围内(如
2001:db8::%)。
- 执行
-
DNS解析失败:
- 使用
nslookup或dig测试主机名的IPv6解析。 - 直接使用IPv6地址连接绕过DNS问题。
- 使用
完成上述步骤后,MySQL即可通过IPv6安全地接受远程连接。生产环境中建议结合VPN或跳板机使用,避免直接暴露数据库到公网。
6️⃣ 参考 6 设置mysql5.7允许远程登录
以下是设置MySQL 5.7允许远程登录的详细步骤,结合安全规范与生产环境最佳实践整理:
一、修改MySQL配置文件
-
定位配置文件
- Linux系统:编辑
/etc/mysql/mysql.conf.d/mysqld.cnf或/etc/my.cnfsudo vim /etc/mysql/mysql.conf.d/mysqld.cnf - Windows系统:打开
C:\ProgramData\MySQL\MySQL Server 5.7\my.ini
(需以管理员权限编辑)
- Linux系统:编辑
-
调整网络绑定
- 找到
bind-address = 127.0.0.1,修改为:bind-address = 0.0.0.0 - 若存在
skip-networking,需将其注释或删除。
- 找到
-
重启MySQL服务
- Linux:
sudo systemctl restart mysqld # Systemd系统 # 或 sudo service mysql restart # SysVinit系统 - Windows:通过服务管理器重启MySQL服务。
- Linux:
二、创建远程访问专用账户
-
登录MySQL
mysql -u root -p -
创建用户并授权
- 允许所有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;
- 允许所有IP访问(不推荐生产环境直接使用root):
三、配置防火墙规则
-
Linux系统(firewalld)
sudo firewall-cmd --zone=public --add-port=3306/tcp --permanent sudo firewall-cmd --reload -
Windows系统
- 打开“Windows Defender 防火墙” → 高级设置 → 入站规则 → 新建规则:
- 选择“端口” → TCP 3306 → 允许连接 → 勾选所有配置文件 → 命名规则(如“MySQL_3306”)。
- 打开“Windows Defender 防火墙” → 高级设置 → 入站规则 → 新建规则:
-
云服务器安全组
- 若部署在云端(如AWS/阿里云),需在控制台安全组中放行3306端口。
四、验证远程连接
-
本地测试
mysql -h 127.0.0.1 -u remote_user -p -
远程测试
mysql -h <服务器IP> -u remote_user -p
五、安全加固建议
-
最小权限原则
- 避免使用
GRANT ALL PRIVILEGES,按需分配权限(如SELECT,INSERT)。
- 避免使用
-
SSH隧道替代直接暴露
- 高风险环境建议通过SSH端口转发访问:
本地连接ssh -L 3307:localhost:3306 user@mysql_server127.0.0.1:3307即通过SSH隧道访问MySQL。
- 高风险环境建议通过SSH端口转发访问:
-
定期审计
- 检查远程登录日志:
SELECT * FROM mysql.general_log WHERE argument LIKE '%remote_user%';
- 检查远程登录日志:
-
启用SSL加密
- 配置MySQL要求SSL连接:
ALTER USER 'remote_user'@'%' REQUIRE SSL;
- 配置MySQL要求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并执行以下命令(将 username、password 和 ::/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。
三、常见问题排查
-
防火墙限制
确保服务器防火墙允许IPv6的3306端口:sudo ufw allow in on eth0 proto tcp to any port 3306 # 适用于ufw -
MySQL版本兼容性
MySQL 5.7及以上版本默认支持IPv6,但需确认配置正确。 -
网络连通性
使用ping6和telnet测试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),必须确保mysql.user系统表中存在允许该地址的管理员账户(如'root'@'::1')。 - 否则无法关闭服务器(绑定
::1后仅允许该地址连接)。 - 绑定
*时可使用所有现有账户连接。
- 若绑定到特定地址(如
嵌入式服务器说明
此变量对嵌入式服务器 (libmysqld) 无效且不可见。
术语对照表
| 英文术语 | 中文翻译 |
|---|---|
| network socket | 网络套接字 |
| IPv4-mapped address | IPv4 映射地址 |
| 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),需确保
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 节,连接接口)。
配置要求
-
MySQL 版本差异:
- 8.0.13 之前:
bind_address仅支持单个地址值,可以是单个非通配符 IP 地址/主机名,或通配符地址(*、0.0.0.0、::)。 - 8.0.13 及之后:支持单个值或逗号分隔的地址列表。若为列表,每个值必须是具体的非通配符 IP 地址(IPv4/IPv6)或主机名,禁止使用通配符地址。
- 8.0.22 及之后:地址可包含网络命名空间(Network Namespace)标识。
- 8.0.13 之前:
-
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)规则
-
支持场景:
- 可为 IP 地址或主机名 指定网络命名空间。
- 不可为通配符地址 指定命名空间。
-
配置格式:
- 命名空间通过
/ns后缀指定(如198.51.100.20/red)。 - 无后缀:使用主机系统的全局命名空间(默认)。
- 有后缀:使用指定命名空间(如
/red)。
- 命名空间通过
-
限制条件:
- 主机需支持网络命名空间。
- 指定的命名空间必须预先存在,否则报错。
- 多值列表中可混合全局命名空间、指定命名空间地址。
-
性能影响:
- 每个地址绑定一个独立套接字,多值列表可能导致性能下降(依赖操作系统 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 节“网络命名空间支持”。
错误处理
若绑定任意地址失败,服务器报错并拒绝启动。
示例
-
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/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(全局命名空间)。
- IPv4 地址
性能提示
- 单值绑定:若绑定单个地址(通配符或非通配符),服务器通过单个套接字监听(通配符地址可能绑定到多个接口)。
- 多值绑定:若绑定多个地址,服务器为每个地址创建独立套接字,套接字数量与地址数量成正比。根据操作系统接受连接的效率,长地址列表可能导致性能下降。
- 文件描述符限制:若需增加监听套接字或网络命名空间文件,可能需要调整
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)。
地址解析规则
- IP地址格式:支持IPv4/IPv6。
- 主机名解析:若为主机名,服务器解析为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的连接。
网络命名空间规则
- 格式:地址后可加
/ns后缀指定命名空间(如192.168.1.1/red)。 - 限制:通配符地址禁止指定命名空间。
- 默认行为:未指定
/ns的地址使用全局命名空间。 - 前提条件:主机系统需支持网络命名空间,且目标命名空间已创建,否则报错。
示例
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:分别监听红色命名空间、蓝色命名空间和全局命名空间的地址。
性能与安全注意事项
- 套接字数量:
- 单地址(通配符/非通配符):使用单个套接字(通配符可能绑定多个接口)。
- 多地址列表:每个地址对应一个套接字,数量与地址数成正比,长列表可能影响连接接受效率。
- 资源限制:可能需要增加
open_files_limit系统变量以应对文件描述符消耗。 - 管理账户要求:若绑定特定地址(如::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)
-
适用范围
- 仅限 IP 地址/主机名(通配符地址不可用)
- 通过
/ns后缀指定(如198.51.100.20/red)
-
命名空间逻辑
- 无后缀:使用主机全局命名空间(默认)
- 有后缀:使用指定命名空间(如
/red使用red空间) - 前提:主机系统需支持网络命名空间,且命名空间已预先配置
-
多地址组合
可混合包含全局命名空间和指定命名空间的地址
详见章节 7.1.14《网络命名空间支持》
关键注意事项
-
启动失败
任一地址绑定失败将导致服务器报错中止启动。 -
权限配置
- 绑定特定地址(如
::1)时,必须在mysql.user中配置对应管理员账户(如'root'@'::1') - 否则无法关闭服务器(绑定通配符
*时无此限制)
- 绑定特定地址(如
-
多地址性能影响
- 多地址监听时,每个地址创建独立套接字
- 地址数量增加可能降低 TCP/IP 连接接受效率
-
文件描述符限制
需根据情况调整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)或主机名,禁止使用通配符格式。
地址解析规则
- IP地址格式:可指定为IPv4或IPv6地址。
- 主机名解析:若为主机名,服务器会将其解析为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地址的连接。
网络命名空间规则
- 支持为IP/主机名指定命名空间,格式为
地址/ns(ns为命名空间名称)。 - 通配符地址禁止指定命名空间。
- 未指定
/ns后缀的地址使用全局命名空间(默认行为)。 - 主机系统需提前创建命名空间,否则会报错。
- 多地址列表可混合全局命名空间和命名命名空间的地址。
示例
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:分别监听红色命名空间、蓝色命名空间和全局命名空间的地址。
性能与安全注意事项
- 单地址 vs 多地址:
- 单地址(通配符或非通配符):使用单个套接字(通配符可能绑定多个接口)。
- 多地址列表:每个地址对应一个套接字,套接字数量与地址数成正比,长列表可能影响TCP/IP连接接受效率。
- 文件描述符限制:可能需要增加
open_files_limit系统变量的值。 - 管理账户要求:若绑定特定地址(如::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' 账户,以便你仍然可以连接到服务器进行关闭操作。