Mysql ER_ACCESS_DENIED_错误:当我尝试连接到远程服务器上的数据库时-Node.js
尝试连接到远程服务器上的数据库时出现问题 我的代码:Mysql ER_ACCESS_DENIED_错误:当我尝试连接到远程服务器上的数据库时-Node.js,mysql,node.js,database,database-connection,Mysql,Node.js,Database,Database Connection,尝试连接到远程服务器上的数据库时出现问题 我的代码: const mysql = require('mysql'); const database = mysql.createPool({ host: 'localhost', user: 'user', password: 'pass', database: 'db' }); database.getConnection(function (err, connection) { if (!err) {
const mysql = require('mysql');
const database = mysql.createPool({
host: 'localhost',
user: 'user',
password: 'pass',
database: 'db'
});
database.getConnection(function (err, connection) {
if (!err) {
console.log('Database is connected ...');
} else {
console.log('Error connecting database ...');
}
});
代码中连接的凭据是伪造的。使用我拥有的正确凭据,我成功登录到远程服务器上的phpMyAdmin,登录到我要连接的数据库上。证书很好
运行脚本时,返回以下错误:
另外,当我输入连接本地数据库的凭据时,一切都正常。正如Luuk所指出的,您需要用远程数据库服务器的实际IP地址和数据库服务器运行的端口替换
localhost
例如—
const database = mysql.createPool({
host: '123.234.121.234',
port : '3306',
user: 'user',
password: 'pass',
database: 'db'
});
此外,请确保该端口已列入白名单,并且可以通过网络访问。这里有一个小小的图表来解释
phpmyadmin与MySQL服务器在同一台机器上运行,因此它可以使用通用主机名
localhost
连接到服务器
我猜,从你的问题来看,你的nodejs程序运行在其他机器上(可能是你的个人机器?)。这需要一些特殊用途的设置来完成
host:
属性中使用服务器的实际主机名,而不是localhost
解决这个问题的最简单方法是在您自己的机器上使用一些MyQSL客户机程序(如MySQL Workbench或HeidiSQL)。当你把它连接起来时,你可以在你的
createPool()
调用中使用相同的凭据。你认为这行是干什么的:host:'localhost'
?是的,我犯了一个问题。我知道这一行是针对本地主机(本地ip)的。在我的createPool()调用中,我放入了主机的远程ip地址。顺便说一句,我曾经连接过一个远程服务器(apache),并且没有连接问题。现在数据库已经移动到另一台服务器(nginx),我的连接出现了问题。