常规错误:2006 MySQL 服务器已消失。所有设置均正常

常规错误:2006 MySQL 服务器已消失。所有设置均正常

我有 2 台 Linux 服务器。1 台运行带有 PHP 应用程序的 apache2,另一台运行 mysql 5.7。(因此是到 DB 的远程连接)

PHP 应用程序尝试从文件 (90MB) 创建 BIGBLOB 并将其存储到 SQL 中。

但是我得到了这个错误:(这只发生在更大的BLOB上)PHP:

[PDOException] SQLSTATE[HY000]: General error: 2006 MySQL server has gone away

MYSQL:

2022-03-24T14:22:41.443626Z 268701 [Note] Aborted connection 268701 to db: 'bug' user: 'user' host: 'subdomain.hostname.com' (Got an error reading communication packets)

我搜索了整个互联网。我做了以下更新:将 max_allowed_pa​​cket 设置为 1GB,我检查了:wait_timeout 和 interactive_timeout 都没有问题(28880 秒)我添加了 SWAP 内存。但没有任何效果。有什么想法吗?

附言:似乎 30 秒后某处连接被切断。但我不能确定,也不知道原因。

这是 MySQL 设置:

mysql> show global variables like "%timeout%";
+-----------------------------+----------+
| Variable_name               | Value    |
+-----------------------------+----------+
| connect_timeout             | 10       |
| delayed_insert_timeout      | 300      |
| have_statement_timeout      | YES      |
| innodb_flush_log_at_timeout | 1        |
| innodb_lock_wait_timeout    | 50       |
| innodb_rollback_on_timeout  | OFF      |
| interactive_timeout         | 28800    |
| lock_wait_timeout           | 31536000 |
| net_read_timeout            | 120      |
| net_write_timeout           | 120      |
| rpl_stop_slave_timeout      | 31536000 |
| slave_net_timeout           | 60       |
| wait_timeout                | 28800    |
+-----------------------------+----------+

 max_allowed_packet                                   | 1073741824           |

内存:

              total        used        free      shared  buff/cache   available
Mem:           7976        1056         256           1        6663        6630
Swap:         10239           8       10231

答案1

“消失”通常是由一些非常长的查询超出某些设置引起的。然而,这听起来像是另一个问题。读取一行的默认大小只有几 MB。此外,我认为硬性限制为 16MB。也就是说,提高“..._size”是不够的。

您将如何处理 90MB 的 BLOB?考虑将其放在文件,并将元信息放入数据库中。即使对于 MB 大小的 jpeg,这也比将其放入数据库更实用、更高效。

进一步讨论 BLOB,并提供SHOW CREATE TABLE一些您计划使用的查询。然后我可能会有进一步的建议。

相关内容