小皮面板配置远程 MySQL 连接只需要做三件事:给 MySQL 账号授权允许从非本机 IP 登录、把 MySQL 监听从 127.0.0.1 改成 0.0.0.0、在系统防火墙和云服务器安全组放行 3306 端口。三项缺一项,远程连接都会报“Can't connect to MySQL server”或“Host is not allowed to connect”。
小皮面板配置远程 MySQL 连接的完整步骤是什么
结论:三步顺序不能乱——先授权、再改监听、最后放行端口,改完必须重启 MySQL 生效。
第一步,在面板「数据库」页找到目标数据库,把访问权限切换为“所有人可访问”(不同版本入口名称略有差异,通常在数据库列表的操作列里);同时确认 root 密码,后面远程连接要用。第二步,SSH 登录服务器,用命令行给账号补授权。第三步,改 my.cnf 里的 bind-address,再放行端口。小皮面板的 MySQL 默认安装在 /xp/server/mysql(自定义安装目录按实际路径替换),配置文件通常位于 /xp/server/mysql/etc/my.cnf,可以用 mysql --help | grep my.cnf 或 ps -ef | grep mysql 确认实际读取的配置路径。
怎么给 MySQL 账号授权远程登录
结论:MySQL 5.7 和 8.0 的授权语法不同,8.0 必须先 CREATE USER 再 GRANT,否则报语法错误。
登录 MySQL:
mysql -uroot -p
先查现有账号的 host 字段,host 是 localhost 就只能在服务器本机登录:
SELECT user, host FROM mysql.user;
MySQL 5.7 用一条命令即可:
GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY '你的密码' WITH GRANT OPTION;
FLUSH PRIVILEGES;
MySQL 8.0 要拆成两条:
CREATE USER 'root'@'%' IDENTIFIED BY '你的密码';
GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' WITH GRANT OPTION;
FLUSH PRIVILEGES;
生产环境不建议直接开 root@%。更稳的做法是单独建一个账号并限定来源 IP 段,例如 CREATE USER 'dev'@'203.0.113.%' IDENTIFIED BY '密码';,只授予业务库权限:GRANT SELECT,INSERT,UPDATE,DELETE ON 库名.* TO 'dev'@'203.0.113.%';。另外 MySQL 8.0 默认认证插件是 caching_sha2_password,Navicat 等老客户端会报 2059 认证错误,需要执行 ALTER USER 'dev'@'%' IDENTIFIED WITH mysql_native_password BY '密码'; 切回兼容插件。
bind-address 为什么要改成 0.0.0.0
结论:MySQL 默认只监听 127.0.0.1,即使账号授权了 %,外部请求也进不来,必须把监听地址改为 0.0.0.0。
编辑配置文件 /xp/server/mysql/etc/my.cnf,在 [mysqld] 段落下确认或添加:
[mysqld]
bind-address = 0.0.0.0
同时检查有没有 skip-networking 这一行,有就注释掉(前面加 #),它会让 MySQL 完全关闭 TCP 监听,只保留 socket 连接。改完重启服务:
/etc/init.d/mysqld restart
或者直接用面板的“重启 MySQL”按钮。重启后用 netstat -tlnp | grep 3306 看监听地址,显示 0.0.0.0:3306 才算成功,显示 127.0.0.1:3306 说明配置没生效或读错了配置文件。
3306 端口怎么放行
结论:本机防火墙和云厂商安全组是两道独立的墙,两层都要放,只放一层等于没放。
CentOS 7 及以上用 firewalld:
firewall-cmd --permanent --add-port=3306/tcp
firewall-cmd --reload
Ubuntu / Debian 用 ufw:
ufw allow 3306/tcp
然后登录云服务器控制台,在实例的“安全组”入方向规则里添加一条:协议 TCP、端口 3306、授权对象填你自己的公网 IP 或公司出口 IP(不要图省事填 0.0.0.0/0)。阿里云、腾讯云、华为云的安全组生效是实时的,但规则要选“入方向”。
远程连不上怎么快速排查
结论:按“端口通不通 → 账号授权 → 认证插件”三步倒查,90% 的问题能在 3 分钟内定位。
在本地电脑执行 telnet 服务器IP 3306 或 nc -zv 服务器IP 3306。连不通就是防火墙或安全组问题,回到上一节检查;能连通但提示 “Host 'x.x.x.x' is not allowed to connect”,说明 mysql.user 表里没有对应 host 的记录,重新执行 GRANT;提示 2059 或 “Authentication plugin cannot be loaded”,就是认证插件问题,执行 ALTER USER 切换。还查不出原因就看错误日志,小皮面板的 MySQL 日志一般在 /xp/server/mysql/data/ 目录下以主机名命名的 .err 文件,tail -f 跟踪一下,连接被拒的具体原因都会写在那里。
最后补一条安全约定:远程 MySQL 别长期开 root@% 加 3306 全放行,改成非默认端口、限定来源 IP、业务账号最小权限,这三条做完再上线。配置过程中遇到小皮面板版本差异导致路径对不上的情况,可以把 my.cnf 内容和 mysql.user 查询结果贴到 GJ 站长论坛的问答版块,一般 24 小时内有回复。