无法连接到任何指定的 mysql 主机。 C# MySQL

Posted

技术标签:

【中文标题】无法连接到任何指定的 mysql 主机。 C# MySQL【英文标题】:Unable to connect to any of the specified mysql hosts. C# MySQL 【发布时间】:2013-08-02 08:27:39 【问题描述】:

执行代码时出现上述错误-

mysqlConnection mysqlConn=new MySqlConnection("server=127.0.0.1;uid=pankaj;port=3306;pwd=master;database=patholabs;");
        mysqlConn.Open();

我尝试将服务器设置为 localhost,将用户设置为 root,但出现以下错误-

Error: 0 : Unable to connect to any of the specified MySQL hosts.
System.Transactions Critical: 0 : <TraceRecord xmlns="http://schemas.microsoft.com/2004/10/E2ETraceEvent/TraceRecord" Severity="Critical"><TraceIdentifier>http://msdn.microsoft.com/TraceCodes/System/ActivityTracing/2004/07/Reliability/Exception/Unhandled</TraceIdentifier><Description>Unhandled exception</Description><AppDomain>DBSync.exe</AppDomain><Exception><ExceptionType>MySql.Data.MySqlClient.MySqlException, MySql.Data, Version=6.7.4.0, Culture=neutral, PublicKeyToken=c5687fc88969c44d</ExceptionType><Message>Unable to connect to any of the specified MySQL hosts.</Message><StackTrace>
at  MySql.Data.MySqlClient.NativeDriver.Open()
at MySql.Data.MySqlClient.Driver.Open()
at MySql.Data.MySqlClient.Driver.Create(MySqlConnectionStringBuilder settings)
at MySql.Data.MySqlClient.MySqlPool.CreateNewPooledConnection()
at MySql.Data.MySqlClient.MySqlPool.GetPooledConnection()
at MySql.Data.MySqlClient.MySqlPool.TryToGetDriver()
at MySql.Data.MySqlClient.MySqlPool.GetConnection()
at MySql.Data.MySqlClient.MySqlConnection.Open()
at DBSync.MainForm.BtnCalculateClick(Object sender, EventArgs e) in c:\Documents  and Settings\Test01\My Documents\SharpDevelop Projects\DBSync\DBSync\MainForm.cs:line 51
at System.Windows.Forms.Control.OnClick(EventArgs e)
at System.Windows.Forms.Button.OnClick(EventArgs e)
at System.Windows.Forms.Button.OnMouseUp(MouseEventArgs mevent)
at System.Windows.Forms.Control.WmMouseUp(Message&amp;amp; m, MouseButtons button, Int32 clicks)
at System.Windows.Forms.Control.WndProc(Message&amp;amp; m)
at System.Windows.Forms.ButtonBase.WndProc(Message&amp;amp; m)
at System.Windows.Forms.Button.WndProc(Message&amp;amp; m)
at System.Windows.Forms.Control.ControlNativeWindow.OnMessage(Message&amp;amp; m)
at System.Windows.Forms.Control.ControlNativeWindow.WndProc(Message&amp;amp; m)
at System.Windows.Forms.NativeWindow.DebuggableCallback(IntPtr hWnd, Int32 msg, IntPtr wparam, IntPtr lparam)
at System.Windows.Forms.UnsafeNativeMethods.DispatchMessageW(MSG&amp;amp; msg)
at System.Windows.Forms.Application.ComponentManager.System.Windows.Forms.UnsafeNativeMethods.IMsoComponentManager.FPushMessageLoop(IntPtr dwComponentID, Int32 reason, Int32 pvLoopData)
at System.Windows.Forms.Application.ThreadContext.RunMessageLoopInner(Int32 reason, ApplicationContext context)
at System.Windows.Forms.Application.ThreadContext.RunMessageLoop(Int32 reason, ApplicationContext context)
at System.Windows.Forms.Application.Run(Form mainForm)
at DBSync.Program.Main(String[] args) in c:\Documents and Settings\Test01\My Documents\SharpDevelop Projects\DBSync\DBSync\Program.cs:line 27</StackTrace><ExceptionString>MySql.Data.MySqlClient.MySqlException (0x80004005): 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(MySqlConnectionStringBuilder settings)
at MySql.Data.MySqlClient.MySqlPool.CreateNewPooledConnection()
at MySql.Data.MySqlClient.MySqlPool.GetPooledConnection()
at MySql.Data.MySqlClient.MySqlPool.TryToGetDriver()
at MySql.Data.MySqlClient.MySqlPool.GetConnection()
at MySql.Data.MySqlClient.MySqlConnection.Open()
at DBSync.MainForm.BtnCalculateClick(Object sender, EventArgs e) in c:\Documents and Settings\Test01\My Documents\SharpDevelop Projects\DBSync\DBSync\MainForm.cs:line 51
at System.Windows.Forms.Control.OnClick(EventArgs e)
at System.Windows.Forms.Button.OnClick(EventArgs e)
at System.Windows.Forms.Button.OnMouseUp(MouseEventArgs mevent)
at System.Windows.Forms.Control.WmMouseUp(Message&amp;amp; m, MouseButtons button, Int32 clicks)
at System.Windows.Forms.Control.WndProc(Message&amp;amp; m)
at System.Windows.Forms.ButtonBase.WndProc(Message&amp;amp; m)
at System.Windows.Forms.Button.WndProc(Message&amp;amp; m)
at System.Windows.Forms.Control.ControlNativeWindow.OnMessage(Message&amp;amp; m)
at System.Windows.Forms.Control.ControlNativeWindow.WndProc(Message&amp;amp; m)
at System.Windows.Forms.NativeWindow.DebuggableCallback(IntPtr hWnd, Int32 msg, IntPtr wparam, IntPtr lparam)
at System.Windows.Forms.UnsafeNativeMethods.DispatchMessageW(MSG&amp;amp; msg)
at System.Windows.Forms.Application.ComponentManager.System.Windows.Forms.UnsafeNativeMethods.IMsoComponentManager.FPushMessageLoop(IntPtr dwComponentID, Int32 reason, Int32 pvLoopData)
at System.Windows.Forms.Application.ThreadContext.RunMessageLoopInner(Int32 reason, ApplicationContext context)
at System.Windows.Forms.Application.ThreadContext.RunMessageLoop(Int32 reason, ApplicationContext context)
at System.Windows.Forms.Application.Run(Form mainForm)
at DBSync.Program.Main(String[] args) in c:\Documents and Settings\Test01\My Documents\SharpDevelop Projects\DBSync\DBSync\Program.cs:line 27</ExceptionString><DataItems><Data><Key>Server Error Code</Key><Value>1042</Value></Data></DataItems></Exception></TraceRecord>

我可以通过mysql workbench连接mysql服务器,查询数据库。只有代码不起作用。 编辑:我注意到当我使用sharpdevelop而不是使用Visual Studio时会出现错误。

【问题讨论】:

【参考方案1】:

有时连接字符串中参数的间距和顺序很重要(基于个人经验和漫长的夜晚:S)

所以坚持标准格式here

服务器=我的服务器地址;端口=1234;数据库=我的数据库; uid=我的用户名;密码=我的密码;

【讨论】:

文档声明 "If you do not specify a server, localhost is assumed." 我曾经依赖此默认设置,但当它停止工作时,我必须明确说明。仍然没有必要指定默认端口 3306。 发现一个漫长的夜晚!【参考方案2】:

我在本地网络上的计算机上运行 mysql。 MySQL Workbench 可以连接到该服务器,但不能连接到我的 c# 代码。我通过断开与正在运行的 *** 客户端的连接解决了我的问题。

【讨论】:

有趣。我又遇到了同样的问题,做了谷歌搜索,找到了我自己的帖子(不注意是谁发的)。它再次解决了我的问题。打算投票:) 代表您投票。我已经这样做了好几次了。谢谢你。 哈哈!感谢现任约书亚。 阅读您的评论并没有给它机会..然后尝试它并且它有效,脱帽.. 我已经知道了,但是今天我忘记了,我不得不寻找答案。女儿此时会对我说什么:你这个笨蛋! :)【参考方案3】:

因为这是 Google 上的最高结果:

如果您的连接最初可以正常工作,但在多次成功连接后您开始看到此错误,则可能是this issue。

总而言之:如果您打开和关闭连接,Windows 会出于某些愚蠢的原因保留 TCP 端口以供将来使用。多次执行此操作后,可用端口耗尽。

这篇文章提供了一个注册表黑客来解决这个问题...

这是我在 XP/2003 上的注册表设置:

HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters\MaxUserPort 0xFFFF (DWORD)
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters\MaxUserPort\TcpTimedWaitDelay 60 (DWORD)

您需要创建它们。默认情况下它们不存在。

在 Vista/2008 上,您可以使用 netsh 将其更改为:

netsh int ipv4 set dynamicport tcp start=10000 num=50000

...但真正的解决方案是使用连接池,以便“打开”连接真正重用现有连接。大多数框架会自动执行此操作,但在我的情况下,应用程序出于某种原因手动处理连接。

【讨论】:

这正是我的问题。你知道你应该如何做连接池吗? (我应该手动实现还是使用框架) 更新:似乎默认启用连接池:***.com/questions/26089420/…【参考方案4】:

如下所示更新您的连接字符串(也没有port 变量):

MysqlConn.ConnectionString = 
    "Server=127.0.0.1;Database=patholabs;Uid=pankaj;Pwd=master;"

希望这会有所帮助...

【讨论】:

【参考方案5】:

有时问题可能出在您的 Windows 防火墙上,请确保您的服务器允许访问与您的 mysql 数据库关联的所有端口。

【讨论】:

【参考方案6】:

在我的例子中,主机有一个远程连接到 MySql 的白名单。尝试将您的 IP 添加到托管管理面板的白名单中。

【讨论】:

【参考方案7】:

我找到了解决问题的方法,我遇到了同样的问题。以前我有我的连接字符串,因为此通知端口 :3306 需要像 127.0.0.1:3306 那样连接到服务器,或者从像 Server=127.0.0.1;Port=3306 这样的服务器中删除,具体取决于您的 .NET 环境:

"Server=127.0.0.1:3306;Uid=username;Pwd=password;Database=db;"

它运行良好,直到发生了我不确定它到底是什么的事情,可能是我的 .NET 应用程序包的最新更新。看起来连接字符串的格式和间距很重要。无论如何,以下格式似乎对我有用:

"Server=127.0.0.1;Port=3306;Uid=username;Pwd=password;Database=db;"

尝试任一版本,看看哪一个适合您。

我还注意到您没有使用驼色套管,这可能是它。确保您的属性名称采用大写形式

Server
Port
Uid
Pwd
Database

【讨论】:

【参考方案8】:

使用SqlConnectionStringBuilder简化连接

System.Data.SqlClient.SqlConnectionStringBuilder builder = new System.Data.SqlClient.SqlConnectionStringBuilder();
builder["Initial Catalog"] = "Server";
builder["Data Source"] = "db";
builder["integrated Security"] = true;
string connexionString = builder.ConnectionString;
SqlConnection connexion = new SqlConnection(connexionString);
try  connexion.Open(); return true; 
catch  return false; 

【讨论】:

到底是什么问题? 相同。无法连接到任何指定的 mysql 主机。【参考方案9】:

刚刚遇到了同样的问题。在目标机器上安装 .NET 框架解决了这个问题。

更好的是,确保所有必需的依赖项都存在于运行代码的机器中。

【讨论】:

这个答案没有任何意义。【参考方案10】:

对于运行 VS2013 的用户

在 Windows 10 中。

检查 apache 服务是否正在运行。因为它被万维网服务取代。

运行 netstat -n 来检查。

停止服务。启动阿帕奇。重启服务。

【讨论】:

因为我注意到该服务是持久的,所以每次重启时我都必须在命令提示符下运行它,直到找到更好的解决方案 net stop w3SVC net start apache2.4(取决于版本)【参考方案11】:

试试这个:

MySqlConnectionStringBuilder conn_string = new MySqlConnectionStringBuilder();
conn_string.Server = "127.0.0.1";
conn_string.Port = 3306;
conn_string.UserID = "root";
conn_string.Password = "myPassword";
conn_string.Database = "myDB";



MySqlConnection MyCon = new MySqlConnection(conn_string.ToString());

try

    MyCon.Open();
    MessageBox.Show("Open");
    MyCon.Close();
    MessageBox.Show("Close");

catch (Exception ex)

    MessageBox.Show(ex.Message);

【讨论】:

【参考方案12】:

我遇到了完全相同的错误。

这是你需要做的:

如果您使用的是 MAMP,请关闭您的服务器。然后在您再次打开 MAMP 时单击首选项按钮(当然是在重新启动服务器之前)。

然后您需要单击端口选项卡,然后单击“将 Web 和 MySQL 端口设置为 80 和 3306”按钮。

【讨论】:

【参考方案13】:

如果您使用 localhost URL 访问实时数据库,则它将无法正常工作。 请在 IIS 上部署您的服务或网站并创建 URL,然后使用新的 URL 访问数据库,它将起作用。

【讨论】:

【参考方案14】:

在我的情况下,删除部分“port=3306;”从连接字符串解决了这个问题。

【讨论】:

【参考方案15】:

试试这个:

    try
             //run something

catch (MySqlException ex)
            
                MessageBox.Show(ex.Message, "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
            

【讨论】:

【参考方案16】:

如果这对某人有帮助,尽管这可能是一个非常具体的用例......今天我们在 docker swarm 环境中遇到了这个问题。连接字符串在环境变量中看起来没问题,我们能够从 Workbench 等进行连接。事实证明,我们以某种方式将 docker 映像从开发环境推送到了 swarm 环境,并且开发映像的代码更改会破坏连接字符串。我们所要做的就是重新运行管道以将正确的图像推送到 swarm 环境中。

【讨论】:

【参考方案17】:
using System;
using System.Linq;
using MySql.Data.MySqlClient;

namespace ConsoleApplication1

    class Program
    
        static void Main(string[] args)
        

            // add here your connection details
            String connectionString = "Server=localhost;Database=database;Uid=username;Pwd=password;";
            try
            
                MySqlConnection connection = new MySqlConnection(connectionString);
                connection.Open();

                Console.WriteLine("MySQL version: " + connection.ServerVersion);
                connection.Close();
            
            catch (Exception ex)
            
                Console.WriteLine(ex);
            
            Console.ReadKey();
        
    

确保您的数据库服务器正在运行,如果它没有运行,那么它无法建立连接,并且默认情况下 mysql 在 3306 上运行,所以如果端口号不同,则不需要提及端口,那么我们需要提及端口

【讨论】:

以上是关于无法连接到任何指定的 mysql 主机。 C# MySQL的主要内容,如果未能解决你的问题,请参考以下文章

无法连接到任何指定的 MySql 主机

连接远程 mysql 数据库,收到错误“无法连接到任何指定的 MySQL 主机”

出现错误:“无法连接到任何指定的 MySQL 主机。”在不使用 MySQL 的应用程序中

使用 C# 建立 MySQL 连接的 SSH 隧道

与 MySQL 的连接在调试模式下工作,而不是在发布模式下工作

Visual Studio 2010无法连接到MySql服务器