MySQL 的网络命名空间支持,真挺实用的,是你在搞容器化或者虚拟化的时候。它的思路其实不复杂:让每个命名空间都有自己的网络配置,互不干扰。举个常见场景,比如你把 MySQL 跑在 Docker 里,客户端连上来,但 IP 显示不对,授权就尴尬了。这时候就能用它搞定。

MySQL 8.0.22+开始支持这功能,服务器端(mysqld)、X 插件、客户端工具(mysqlmysqlxtest)都能用。不过注意,普通客户端不支持,只能从命名空间里调用。小坑别踩。

配置也不麻烦,用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 比较稳。

如果你平时爱折腾容器或者多网络环境,强烈推荐你试试这个功能,真的能少踩不少坑。