You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.14 11:20:28