MySQL 的网络命名空间支持,真挺实用的,是你在搞容器化或者虚拟化的时候。它的思路其实不复杂:让每个命名空间都有自己的网络配置,互不干扰。举个常见场景,比如你把 MySQL 跑在 Docker 里,客户端连上来,但 IP 显示不对,授权就尴尬了。这时候就能用它搞定。
MySQL 8.0.22+开始支持这功能,服务器端(mysqld
)、X 插件、客户端工具(mysql
和 mysqlxtest
)都能用。不过注意,普通客户端不支持,只能从命名空间里调用。小坑别踩。
配置也不麻烦,用ip netns
命令加几个虚拟网卡就行。像下面这样:
ip netns add red
ip link add veth-red type veth peer name vpeer-red
ip link set vpeer-red netns red
ip addr add 192.0.2.1/24 dev veth-red
ip link set veth-red up
别忘了启用回环接口:
ip netns exec red ip link set lo up
你还得给mysqld
加上CAP_SYS_ADMIN
权限,不然它切不了命名空间。这权限挺敏感的,安全上要留个心眼。
小提醒:别指望/etc/netns/red/hosts
里定义的主机名能自动解析,MySQL 不吃这一套,直接用 IP 比较稳。
如果你平时爱折腾容器或者多网络环境,强烈推荐你试试这个功能,真的能少踩不少坑。