我正在尝试使用NodeJs mysql库连接到我的RDS(AWS MySQL数据库)。
const mysql = require('mysql');
var connection;
connection = mysql.createConnection({
host: 'xxx.us-east-1.rds.amazonaws.com',
port: 3306,
user: "username",
password: "MyPassword",
database: "DbName",
});
我也在尝试mysql2和续集。他们都给了我相同的结果:
{
error: ER_ACCESS_DENIED_ERROR: Access denied for user 'username'@'myhost,
code: 'ER_ACCESS_DENIED_ERROR',
errno: 1045,
sqlState: '28000'
}
但是,此远程数据库设置为public,我可以使用mysql命令连接到它:
mysql -u username -pMyPassowrd -h xxx.us-east-1.rds.amazonaws.com
我还可以使用MySQL Workbench连接到它。
此外,问题不在NodeJ中,因为我能够连接到本地数据库:
connection = mysql.createConnection({
host: 'localhost',
user: 'root',
password: 'root',
database: 'test',
});
最后,我的AWS数据库是公开可用的,我可以连接到它,只是出于某种原因不使用NodeJ。
我还没有找到有用的答案。有人遇到这个问题吗?
更新:
尝试使用简单的Connection在Java中进行连接也会返回相同的结果:
final Connection con = DriverManager.getConnection("jdbc:mysql:/xxx.us-east-1.rds.amazonaws.com:3306/DbName", "username", "MyPassword");
更新2:
我没有为Java代码添加一个斜线。我需要使用jdbc:mysql://
而不是jdbc:mysql:/
。但是NodeJs的实现仍然是一个大谜团。
答案 0 :(得分:0)
答案很简单,只需添加具有 true 值的 ssl 选项
connection = mysql.createConnection({
host: 'xxx.us-east-1.rds.amazonaws.com',
port: 3306,
user: "username",
password: "MyPassword",
database: "DbName",
ssl: true //this does the trick
});