MariaDB 10.3. - 在PHP循环中进行一定数量的查询后出现错误2006服务器已关闭。有什么想法吗?
- 论坛
- MariaDB 10.3. - 在PHP循环中进行一定数量的查询后出现错误2006服务器已关闭。有什么想法吗?
16 浏览
MariaDB 10.3. - 在PHP循环中进行一定数量的查询后出现错误2006服务器已关闭。有什么想法吗?
编辑:在我看来,这不是一个重复的问题,因为没有一个提到的答案能够解决这个问题。
我们在一个Synology服务器上运行了MariaDB 10.3,几乎一切正常。但是,在一个PHP连接(mysqli)中的一定数量的查询后,服务器不再响应,因此PHP在一段时间后会抛出2006 server has gone away的错误。
直到错误出现之前的查询次数取决于查询本身。例如,在PHP循环中执行"SELECT RAND()"会返回3714个结果,然后出现错误;"SELECT RAND() * $i"(其中$i是PHP循环索引)会返回2718个结果,然后出现错误。这两个例子都是可复现的,与内置的PHP循环延迟或服务器负载无关。对于真实的复杂查询,错误出现之前的查询次数会减少到100到200次之间,这就是问题所在。
所有的缓冲和时间设置似乎都是正确的。例如,wait_timeout = 28800,interactive_timeout = 28800和max_allowed_packed = 128M。
我在stackoverflow和互联网上搜索了很久,没有结果,也向Synology服务提出了问题,没有结果,我在mySql或MariaDB文档中没有找到任何相关的系统变量。
在每个查询之后(或每N个查询之后)关闭PHP连接并打开一个新的PHP连接是一个可能的解决方法,直到您需要last_insert_id或使用事务或需要更新数百条记录为止。我们需要所有这些功能。