【发布时间】:2020-10-30 15:21:11
【问题描述】:
我正在尝试使用 C# 和 SSH.Net 连接到在 Ubuntu 上运行的 MySQL DB。
我们的 MySQL 数据库只允许来自网络服务器的连接,通过我从下面的代码中可以看到,客户端对象连接到网络服务器,然后我打开一个端口映射到数据库服务器上的 3306。最后,MySQLConnection 对象打开了与 MySQL 数据库的连接。
但是我在sql.Open() 声明中遇到了异常:
无法连接到任何指定的 MySQL 主机
我检查了有关同一主题的其他线程并尝试了他们的建议,但似乎没有一个对我有帮助。
还有更多。
这是我正在使用的一些测试代码 -
var ci =
new ConnectionInfo(
"server", "userid", new PasswordAuthenticationMethod("userid", "userpwd"));
using (var client = new SshClient(ci))
{
client.Connect();
if (client.IsConnected) //This part works fine - I can connect to my Webserver.
{
//not sure if this is correct in our context.
var local = new ForwardedPortDynamic("127.0.0.1",3306);
client.AddForwardedPort(local);
try
{
local.Start();
}
catch (SocketException se)
{
}
string connStr =
"Server = dbserver;Port = 3306;Database = dbname;Uid = dbuserid;Pwd = dbpwd;";
MySqlConnection sql = new MySqlConnection(connStr);
try
{
sql.Open();
local.Stop();
}
catch (MySqlException se)
{
}
}
}
我在代码中放入的所有凭据均已从与 MySQL 数据库的有效 MySQLWorkbench 连接中删除。
我只在 Windows 环境中工作,所以如果您希望我检查 Ubuntu 服务器上的某些内容,请告诉我(如果可能)如何检查。
【问题讨论】:
-
请检查并确认以下内容:服务器名称是否正确?服务器是否可以通过主机名访问(即可以解析主机)?端口是否正确?防火墙是否打开?服务器在运行吗?用户名是否有效?密码有效吗?
-
那么,当您使用
ssh -L 3306:dbHostName:3306 sshuser@sshhostnameorip直接连接ssh 然后尝试连接到localhost:3306 时会发生什么? -
可能有很多问题,你检查过 dbserver 防火墙吗?
-
我使用 SQLWorkbench 连接到 MySQLDB,我插入代码的所有数据都基于我的 SQLWorkbench 连接。我可以使用 SQLWorkbench 连接到数据库。