我有一个连接到远程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协议不是很安全。