我被类似于你的MySQL日志条目所惊讶,@Isaac,这使我找到了你的问题,尽管我没有使用Docker。以下是我认为我已经学到的和我所做的事情。
MySQL的“X插件”扩展了MySQL,使其能够作为文档存储库运行。请参见
MySQL手册中的服务器插件部分,
文档存储功能部分和
2018年4月文档存储可用性公告。
默认情况下,MySQL的X插件功能监听端口33060,并绑定到所有IP地址。请参见
X插件选项和系统变量的手册部分(指示“mysqlx_port”和“mysqlx_bind_address”的默认值),以及
X插件选项和变量参考。对于其传统功能,MySQL仍然默认使用
端口3306。
我认为您发布的日志条目反映了默认的X插件端口和网络地址。特别是,我相信摘录
X Plugin ... bind-address: '::'
表示MySQL默认使用通配符IP地址绑定X插件连接。
如果您想使用X插件的功能,但不希望监听所有IP地址,可以使用
mysqlx_bind_address option指定它监听TCP/IP连接的地址。命令行格式如下:
--mysqlx-bind-address=addr
。或者,您可以在MySQL选项文件中设置该系统变量,例如:
[mysqld]
<... other mysqld option group settings>
mysqlx_bind_address = 127.0.0.1
MySQL手册提供了有关在命令行或选项文件中指定选项的有用一般信息
(链接1)。这里有一些关于在Docker容器中设置MySQL选项的信息
(链接3),虽然我从未尝试过。
似乎对于MySQL的X插件启用功能和MySQL的传统功能,有不同的网络地址设置。您可以使用
bind_address选项设置传统功能的网络地址。因此,如果您想将两组功能都限制为仅从localhost监听TCP/IP连接,则可以例如将此放入您的MySQL选项文件中,这是我刚刚在我的选项文件中尝试的:
[mysqld]
bind_address = 127.0.0.1
mysqlx_bind_address = 127.0.0.1
相比之下,似乎你可以设置一个单一的系统变量
skip_networking,仅允许传统和X插件功能使用本地的非TCP/IP连接(例如Unix套接字、Windows命名管道或共享内存)。
如果你根本不想使用X插件功能,你可以像@alx建议的那样
禁用它们。
要验证MySQL正在监听哪些网络地址和端口,你有
多种选项。在我的非Docker Linux环境中,我发现
netstat -l | grep tcp
并且
sudo lsof -i | grep mysql
有帮助的。
docker
。那么我该如何验证“该端口号未公开”? - Isaac