无法远程连接MariaDB服务器求助:Ubuntu VPS连接超时问题
无法远程连接MariaDB服务器(连接超时)
环境信息
- 两台Ubuntu Server 20.04 LTS VPS
- VPS #1(MariaDB服务器):MariaDB 10.3.34,无本地防火墙(iptables/ufw未启用)
- 核心配置(
/etc/mysql/mariadb.conf.d/50-server.cnf):# # * Basic Settings # user = mysql pid-file = /run/mysqld/mysqld.pid socket = /run/mysqld/mysqld.sock port = 3306 basedir = /usr datadir = /var/lib/mysql tmpdir = /tmp lc-messages-dir = /usr/share/mysql #skip-external-locking # Instead of skip-networking the default is now to listen only on # localhost which is more compatible and is not less secure. bind-address = 0.0.0.0 - 端口监听状态(
netstat -ant | grep 3306):tcp 0 0 0.0.0.0:3306 0.0.0.0:* LISTEN tcp 0 0 127.0.0.1:3306 127.0.0.1:46154 TIME_WAIT tcp 0 0 127.0.0.1:3306 127.0.0.1:59448 TIME_WAIT tcp 0 0 127.0.0.1:3306 127.0.0.1:46174 TIME_WAIT tcp 0 0 127.0.0.1:3306 127.0.0.1:46184 TIME_WAIT tcp 0 0 127.0.0.1:3306 127.0.0.1:59432 TIME_WAIT tcp 0 0 127.0.0.1:3306 127.0.0.1:59442 TIME_WAIT tcp 0 0 127.0.0.1:46162 127.0.0.1:3306 TIME_WAIT - 已创建远程访问用户并授权:
MariaDB [(none)]> CREATE DATABASE xxxdb; MariaDB [(none)]> CREATE USER 'xxxuser'@'%' IDENTIFIED BY 'password'; MariaDB [(none)]> GRANT ALL ON *.* to 'xxxuser'@'%' IDENTIFIED BY 'password' WITH GRANT OPTION; MariaDB [(none)]> FLUSH PRIVILEGES; MariaDB [(none)]> EXIT;
- 核心配置(
- VPS #2(客户端):已安装mariadb-client和telnet,连接测试结果:
- MariaDB客户端连接:
mariadb -u xxxuser -h SERVERIP -P 3306 -p Enter password: ERROR 2003 (HY000): Can't connect to MySQL server on 'SERVERIP' (110 "Connection timed out") - Telnet连接:
telnet SERVERIP 3306 Trying SERVERIP... telnet: Unable to connect to remote host: Connection timed out
- MariaDB客户端连接:
排查与解决建议
- 检查VPS提供商的安全组/防火墙规则:绝大多数云服务商(如DigitalOcean、AWS、阿里云等)都会提供独立的安全组/防火墙配置,即使VPS本地未启用防火墙,服务商层面可能默认拦截3306端口。登录服务商控制台,确保已添加允许VPS #2的IP(或所有IP,测试用)访问3306端口的入站规则。
- 验证基础网络连通性:在VPS #2上执行
ping SERVERIP,确认两台VPS之间网络可达。如果ping不通,优先排查VPS的网络路由、IP是否正确配置;如果ping通但连接超时,说明端口被拦截。 - 确认MariaDB服务状态:在VPS #1上执行
systemctl status mariadb,检查服务是否正常运行,有无启动失败或配置错误的日志提示。若服务异常,重启服务并查看/var/log/mysql/error.log定位问题。 - 核实用户权限配置:在VPS #1的MariaDB中执行以下命令,确认用户的远程访问权限是否正确生效:
确保返回的SELECT user, host FROM mysql.user WHERE user='xxxuser';host字段为%,而非特定IP或localhost。 - 抓包验证数据包到达情况:在VPS #1上执行
tcpdump -i any port 3306,然后在VPS #2上发起连接请求。如果VPS #1未捕获到相关数据包,说明数据包在传输途中被拦截;如果捕获到数据包,查看MariaDB错误日志(/var/log/mysql/error.log)是否有拒绝连接的具体原因。
内容的提问来源于stack exchange,提问作者DooMFeaR
相关产品推荐
相关产品推荐

