【问题标题】:MySQL - Authentication (but only some of the time)MySQL - 身份验证(但仅在某些时候)
【发布时间】:2014-09-09 11:32:39
【问题描述】:

我不时收到以下错误。

使用方法“mysql_native_password”对用户“root”的主机“localhost”进行身份验证失败,并显示消息:从流中读取失败。

我知道连接字符串是正确的 - 首先在应用程序启动后对其进行测试,如果失败,应用程序会给出一条消息并退出。

其次,报告它的功能也在大多数时间使用它来正确连接,它只是时不时地发生。

我尝试更改为 127.0.0.1,但似乎没有什么不同。

它在 Windows Server 2012 64 位上。

我已将 127.0.0.1 localhost 添加到主机文件中。

应用程序在 99% 的情况下正确运行并连接到数据库,只是时不时会出现此错误。

除此之外,我还检查了 show full processlist 命令,但我在任何时候都只有几个连接。

我无法解释这一点,无法弄清楚如何解决它。

谢谢, 吉姆

【问题讨论】:

    标签: mysql authentication login windows-server-2012


    【解决方案1】:

    这是很老了,但是因为我刚刚找到了解决这个问题的方法,所以我会分享它以防万一有人还在寻找它(据我所知,这也是当前 Mysql 版本的问题) .

    此类问题记录在this bug report

    我在这里引用该错误报告中最重要的答案:

    [2014 年 5 月 21 日 15:40] 弗朗西斯科·阿尔贝托·蒂拉多·扎瓦拉

    你好乔治。

    当您使用客户端-服务器应用程序时,所有 连接由套接字执行,当您创建连接时,您 在您的客户端和服务器之间打开一个 Socket,以及一个 Id/ProccesId 在服务器中为请求的连接分配/保留 客户。如果服务器重新启动,则提供给客户端的 Id 丢失, 所以你需要创建一个新的有效连接打开一个新的套接字 从服务器获取有效的 ID。

    您还必须考虑到服务器可以终止或关闭一个 如果连接在一段时间后处于非活动状态,则连接。如果你有 您打开的连接也可能会影响您的连接池,因为 连接打开意味着池的连接更少:有 10 个 同时连接的客户端从 服务器可用连接。

    如果您无法更改应用程序中的设计(具有全局 连接),作为一种解决方法,您可以有一种方法来验证 连接有效,例如下面的方法 ping 服务器,如果 ping 失败,它会再次打开连接:

    ....
    MySqlConnection _conn = new MySqlConnection("MyConnectionString");
    private void CheckConnection()
    {
       if(!_conn.Ping())
       {
         _conn.Open();
       }
    }
    ....
    

    如您所见,代码非常简单,它在以下情况下工作 方式:连接时尝试ping服务器,如果连接正常 无效,内部有套接字信息的流将是 终止,连接将设置为关闭状态以及 无效连接将从连接池中删除,如果 存在,然后再次打开连接将创建一个新连接 这意味着一个新的有效套接字。如果 ping 成功,那么您将 继续使用相同的连接。

    要使用它,您可以在尝试对 数据库,连接无效时会重新打开:

    ....
    private void button1_Click(object sender, EventArgs e)
    {
      //assuming that the connection is already open
      CheckConnectionState();
      var cmd = new MySqlCommand("select 1", _conn);
      cmd.ExecuteNonQuery();
    }
    ....
    

    这只是一种解决方法,据我所知,所有与 任何数据库服务器都会有相同的行为:如果服务器是 重新启动任何连接都会丢失,服务器也会 清理所有未使用的连接。

    感谢您的宝贵时间。

    【讨论】:

      猜你喜欢
      • 2016-11-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-01-06
      • 1970-01-01
      • 2018-01-15
      • 1970-01-01
      相关资源
      最近更新 更多