2014-11-24 164 views
2

我有Mysql DB连接到.NET MVC。当我远程连接它有时工作正常,有时我有这个错误信息:身份验证mysql到.net

MySql.Data.MySqlClient.MySqlException(0X80004005):身份验证 主机“服务器名”用户“用户名”的使用方法 'mysql_native_password'失败,显示消息:从流 读取失败。 ---> MySql.Data.MySqlClient.MySqlException(0X80004005): 从流读取失败。 ---> System.IO.IOException:无法 读取从传输连接数据:一个已建立的连接 被您的主机中的软件放弃了。 ---> System.Net.Sockets.SocketException:一个建立的连接被 由

请我怎样才能验证中止?任何想法来解决它?

+0

如果你给一些代码示例这将有助于。 – Xeidos 2014-11-24 14:04:53

回答

1

这是一个常见的错误,当某种僵局更常见的连接已经开了很长时间的数据库上发生,并在即使它仍然在使用Web应用程序的数据库,最终被关闭。

在我的代码,我用微软的建议,即重试数据库命令,如果它失败。链接位于:http://social.technet.microsoft.com/wiki/contents/articles/4235.retry-logic-for-transient-failures-in-windows-azure-sql-database.aspx其他使用RetryPolicy的非Azure问题也存在类似的情况。

这意味着在一个简单的(Azure在我的情况)有什么例子是:

private static RetryPolicy<SqlAzureTransientErrorDetectionStrategy> retryPolicy = new RetryPolicy<SqlAzureTransientErrorDetectionStrategy>(new Incremental(3, TimeSpan.FromSeconds(1), TimeSpan.FromSeconds(1))); 


// Inside your database function 
retryPolicy.ExecuteAction(() => 
{ 
    db.ExecuteStoredProc("procRecordMetric", cmd); 
}); 
0

在我而言,这是通过SSL导致MySQL服务器上被启用。

这里是my.cnf中

#ssl-ca   = /etc/ssl/mysql/ca-cert.pem 
#ssl-cert  = /etc/ssl/mysql/server-cert.pem 
#ssl-key   = /etc/ssl/mysql/server-key.pem 

谈到这3条线路的固定问题,我的一个片段。