You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C#调用MySqlConnector执行conn.Open()出现SSL连接错误及解决方法

C# MySqlConnector 连接MySQL出现SSL连接错误解决记录

问题描述

过去3天一直在排查C#中MySQL连接器的相关问题:按照MySqlConnector官方教程配置连接,尝试打开数据库连接写入数据,但执行到MySqlConnection.Open()方法时,代码会抛出SSL连接错误。先后尝试使用域名echstreme.de和对应的IP地址建立连接,二者均返回类似报错。

问题复现代码

public async void SQLInsert()
{
    string connStr = "Server=echstreme.de;User=c1Look;Database=c1Look;Port=3306;Password=redacted;";
    MySqlConnection conn = new MySqlConnection(connStr);

    try
    {
        await SendEmbedMessage("MySQL", "Attempting to connect to database");
        conn.Open();
        await SendEmbedMessage("MySQL", "Connection to Database Successful");
        MySqlCommand cmd = new MySqlCommand(sqlQuery, conn);

        cmd.ExecuteNonQuery();


        conn.Close();
    }
    catch (Exception ex)
    {
        Console.WriteLine(ex.ToString());
    }
}

完整报错信息

MySql.Data.MySqlClient.MySqlException (0x80004005): SSL Connection error.
 ---> System.AggregateException: One or more errors occurred. (The handshake failed due to an unexpected packet format.)
 ---> System.IO.IOException: The handshake failed due to an unexpected packet format.
   at System.Net.Security.SslStream.StartReadFrame(Byte[] buffer, Int32 readBytes, AsyncProtocolRequest asyncRequest)
   at System.Net.Security.SslStream.PartialFrameCallback(AsyncProtocolRequest asyncRequest)
--- End of stack trace from previous location where exception was thrown ---
   at System.Net.Security.SslStream.ThrowIfExceptional()
   at System.Net.Security.SslStream.InternalEndProcessAuthentication(LazyAsyncResult lazyResult)
   at System.Net.Security.SslStream.EndProcessAuthentication(IAsyncResult result)
   at System.Net.Security.SslStream.EndAuthenticateAsClient(IAsyncResult asyncResult)
   at System.Net.Security.SslStream.<>c.<AuthenticateAsClientAsync>b__64_2(IAsyncResult iar)
   at System.Threading.Tasks.TaskFactory`1.FromAsyncCoreLogic(IAsyncResult iar, Func`2 endFunction, Action`1 endAction, Task`1 promise, Boolean requiresSynchronization)
   --- End of inner exception stack trace ---
   at System.Threading.Tasks.Task.ThrowIfExceptional(Boolean includeTaskCanceledExceptions)
   at System.Threading.Tasks.Task.Wait(Int32 millisecondsTimeout, CancellationToken cancellationToken)
   at MySql.Data.Common.Ssl.StartSSL(Stream& baseStream, Encoding encoding, String connectionString)
   at MySql.Data.Common.Ssl.StartSSL(Stream& baseStream, Encoding encoding, String connectionString)
   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 Bot.Admins.AdminCommands.SQLInsert() in C:\Users\Owner\source\repos\Bot\Bot\Admins\AdminCommands.cs:line 71

修复方案

修改数据库连接字符串,添加SSL Mode =None配置即可,修改后完整连接字符串如下:
"Server=echstreme.de;Port=3306;Database=c1Look;Uid=c1Look;Pwd=;SSL Mode =None"

出现该问题的原因是MySQL连接器默认会尝试使用SSL和服务端建立连接,若目标数据库服务端未开启SSL支持,就会出现握手失败的SSL连接错误,显式关闭SSL连接模式即可正常建立连接。

内容的提问来源于stack exchange,提问作者Luke

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.07 11:57:03