React Native连接远程MySQL数据库失败求助
Node.js MySQL 私有服务器连接无响应问题
问题描述
原本用本地phpMyAdmin测试应用,切换到私有服务器数据库后遇到连接异常:
- 已反复核对服务器地址、数据库名、用户名、密码、端口等信息,确认无误
- 尝试改用连接池替代单连接,问题仍未解决
- 执行
node index.js后,既无连接成功提示,也无错误输出 - 添加连接超时设置后,依旧没有任何反馈
- 数据库由Webserver托管,已查阅大量资料、咨询资深开发者仍无法解决
我的连接代码
const mysql = require('mysql'); const dbConn = mysql.createConnection({ host: 'xx.xxx.xxx.xx', database: 'ucha_txxxxxx', user: 'ucha_axxxxxx', password: 'txxxxxxxxxxxx', port: 8090, }); dbConn.connect(function (err) { if (err) { console.log("Error in connection request", err); return; } console.log("Connection Successful-----------------------"); }); module.exports = dbConn;
排查与解决步骤
1. 先验证网络连通性
在本地终端执行以下命令,测试服务器端口是否可访问:
telnet xx.xxx.xxx.xx 8090 # 或者用nc命令 nc -zv xx.xxx.xxx.xx 8090
- 如果命令无响应或提示连接失败,说明私有服务器的防火墙/安全组未开放8090端口,或服务器未监听该端口,联系托管方调整配置
- 如果能正常连通,再进行下一步排查
2. 给连接添加完整的错误与超时监听
原代码仅在connect回调中处理错误,部分连接异常可能无法触发该回调,需给连接对象添加额外监听:
const mysql = require('mysql'); const dbConn = mysql.createConnection({ host: 'xx.xxx.xxx.xx', database: 'ucha_txxxxxx', user: 'ucha_axxxxxx', password: 'txxxxxxxxxxxx', port: 8090, connectTimeout: 10000, // 设置10秒连接超时 }); dbConn.connect(function (err) { if (err) { console.log("Error in connection request", err); return; } console.log("Connection Successful-----------------------"); }); // 监听全局连接错误 dbConn.on('error', function(err) { console.log('Database connection error:', err); // 若为连接断开,可尝试重连 if (err.code === 'PROTOCOL_CONNECTION_LOST') { console.log('Attempting to reconnect...'); // 此处可重新创建连接实例 } else { throw err; } }); // 监听超时事件 dbConn.on('timeout', function() { console.log('Database connection timed out'); dbConn.destroy(); }); module.exports = dbConn;
3. 检查MySQL远程访问配置
- 确认服务器MySQL配置:查看
my.cnf(或my.ini)中的bind-address,需设置为0.0.0.0(允许所有IP访问)或你的客户端公网IP - 确认用户权限:登录服务器的MySQL,执行以下命令赋予用户远程访问权限:
GRANT ALL PRIVILEGES ON ucha_txxxxxx.* TO 'ucha_axxxxxx'@'%' IDENTIFIED BY 'txxxxxxxxxxxx'; FLUSH PRIVILEGES;
(%表示允许所有IP访问,也可指定你的客户端IP以提升安全性)
4. 替换为维护中的mysql2库
旧mysql库已停止维护,换成mysql2可能解决兼容性问题:
- 安装依赖:
npm install mysql2
- 修改连接代码:
const mysql = require('mysql2'); const dbConn = mysql.createConnection({ host: 'xx.xxx.xxx.xx', database: 'ucha_txxxxxx', user: 'ucha_axxxxxx', password: 'txxxxxxxxxxxx', port: 8090, connectTimeout: 10000, }); dbConn.connect(function (err) { if (err) { console.log("Error in connection request", err); return; } console.log("Connection Successful-----------------------"); }); dbConn.on('error', (err) => { console.log('DB error:', err); }); module.exports = dbConn;
5. 用极简脚本测试基础连接
编写独立测试脚本,排除其他业务代码干扰:
const mysql = require('mysql2'); const testConn = mysql.createConnection({ host: 'xx.xxx.xxx.xx', user: 'ucha_axxxxxx', password: 'txxxxxxxxxxxx', port: 8090, connectTimeout: 5000, }); testConn.connect((err) => { if (err) { console.error('Connect error:', err); return; } console.log('Connected successfully!'); testConn.end(); });
运行该脚本,观察是否有明确输出。
内容的提问来源于stack exchange,提问作者Dev Upadhyay
相关产品推荐
相关产品推荐

