我有一个连接到远程MySQL服务器(Ubuntu)的ASP.NET MVC Web应用程序。我从来没有在自己的Windows Server或本地主机上遇到任何问题,但是当我最近将应用程序移至Azure应用程序服务时,我得到了随机连接错误(有时它可以工作,有时不能):

Unable to connect to any of the specified MySQL hosts.
at MySql.Data.MySqlClient.NativeDriver.Open()
at MySql.Data.MySqlClient.Driver.Open()
at MySql.Data.MySqlClient.Driver.Create(MySqlConnectionStringBuildersettings)
at MySql.Data.MySqlClient.MySqlConnection.Open()


没有内在的例外。我的代码看起来像:

using(var con = new MySqlConnection(connectionString))
{
  con.Open();
  using(var cmd = CreateCommand(sql, con))
  {
    cmd.Execute();
  }
  con.Close();
}


连接字符串如下所示:


  服务器= x.x.x.x; uid = xxx; pwd = xxx;数据库= xxx;连接
  超时= 10;缓冲=假;协议=套接字;端口= 3306;


本主题描述了相同的问题:


https://serverfault.com/questions/362216/mysql-completely-random-unable-to-connect


它与Ubuntu服务器上的防火墙无关,当连接失败时,我什至看不到防火墙中的传入请求。我还尝试在连接字符串中使用其他设置。有任何想法吗?

最佳答案

protocol=socket告诉您的点网实例尝试使用UNIX域套接字连接到本地MySQL服务器。但是您显然正在尝试使用TCP / IP连接到远程服务器。从您的连接字符串中省略protocol=socket可能会有所帮助。

您的Ubuntu服务器有主机名吗?如果是这样,请使用它代替IP地址。从Azure到Ubuntu服务器的IP路由稳定吗?如果从Azure主机ping Ubuntu服务器会怎样?

注意:请考虑使用tls(ssl)进行此连接。没有tls的MySQL协议不是很安全。

09-30 15:26
查看更多