mySQL在插入大blob时断开连接

本文关键字:断开 连接 blob 插入 mySQL | 更新日期: 2023-09-27 18:06:26

我使用这个方法插入一个大blob到我的mySQL数据库(blob大小~40MB)大约15秒后,它抛出一个异常。

protected override int internalExecuteInt(string SQL, byte[] Blob)
{
    using (MySqlCommand cmd = new MySqlCommand(SQL, connection))
    {
        if (Blob != null)
        {
            cmd.CommandTimeout = 600;
            cmd.Parameters.AddWithValue("@blob", Blob);
        }
        return cmd.ExecuteNonQuery();
    }
}
...
internalExecuteInt("INSERT INTO images (image) VALUES (@blob)", myLargeBlob);
...
异常:

MySqlException: Fatal error during command execution.

内部例外:

SocketException:已存在的连接被远程主机强制关闭

我已经修改了net_read_timeout (600), net_write_timeout (600), wait_timeout (28800), slave_net_timeout(3600)和interactive_timeout(28800)。

"image"列是一个LONGBLOB

mySQL在插入大blob时断开连接

我也遇到过同样的问题。
设置以下变量对我很有帮助。

set global bulk_insert_buffer_size=99999744;

尝试将列更改为LONGBLOB

我曾经遇到过类似的问题,增加日志文件有所帮助。请参阅my.ini中的"innodb_log_file_size"变量-它通常需要是blob的两倍大。尽管在某些情况下(比如200MB以上)它可能仍然没有帮助…