使用 1panel 搭建的MySQL远程连接不上了,记录一下排查的过程。

排查端口
本机中使用命令行是3306端口是运行着的,然后其他机器使用端口扫描软件扫描本机的3306发现并没有开启端口。一开始以为是mysql没有配置远程连接,所以先排查是否有配置远程连接。
配置远程连接
information_schema 、 mysql 、 performance_schema 、 sys这四个数据库是MySQL的系统数据库,存放着很多重要的信息。
# 名为mysql的数据库中的 user表
use mysql
select host, user, authentication_string from user;
# 一般来说会有host为%的一条(远程访问的host),没有的话用下面的命令创建一个
CREATE USER 'root'@'%' IDENTIFIED BY 'password';
--赋予任何主机访问权限:
GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY 'password' WITH GRANT OPTION;
--允许指定主机(IP地址)访问权限:
GRANT ALL PRIVILEGES ON *.* TO 'myuser'@'192.168.1.3' IDENTIFIED BY 'root' WITH GRANT OPTION;
-- 刷新权限
FLUSH PRIVILEGES;
也有说在my.cnf里面添加bind-address = 0.0.0.0
,我在mysql:8.4.2试过了并没有影响。虽然配置了远程连接,但是照样远程连接不上。
排查composer
1panel默认创建的composer中ports部分代码
ports:
- ${HOST_IP}:${PANEL_APP_PORT_HTTP}:3306
这样就只有环境变量中的ip对应的端口才能够访问,其他的ip发送的请求都会被丢弃。因该是为了安全起见,如果想要远程访问可以通过反向代理的方式来,但是我一开始并不是很清楚composer是这样配置的。