MySQL通用“Killed”错误在PHP脚本中
如果您经常使用MySQL和PHP进行开发,您可能会遇到一个通用的错误消息:
Killed
在phpMyAdmin中执行较大的SQL查询时可能会出现此错误,或者在使用PHP试图从MySQL数据库中检索较多数据时也可能会出现此错误。但是,这个错误消息并没有提供任何有用的信息,导致你难以排查问题。
阅读更多:MySQL 教程
原因
MySQL默认具有一个查询执行时间限制,如果任何查询运行时间超过这个限制,MySQL会自动终止查询并显示 “Killed” 错误消息。
解决方案
- 增加timeout
可以通过以下两种方式来增加PHP脚本连接MySQL的时间限制:
- 在
php.ini文件中修改max_execution_time的值。 - 在PHP脚本中使用
set_time_limit()函数。
需要注意的是,增加timeout仅治标不治本,当查询运行时间超过 timeout 值时,它仍可能依然回报 “Killed” 错误消息。
- 分批查询
当查询过大时,可以采用分批查询的方式实现。例如,你可能能够将查询细分为较小的部分,以便 MySQL 可以更好地处理查询。
具体做法是,将一个大查询分割为一系列有序的子查询,之后按顺序逐个执行子查询。例如,你可以使用以下代码:
// offset 表示从哪条数据开始查询
//limit 代表查多少条
sql = "SELECT * FROM tbl_name LIMIToffset, limit";result = mysqli_query(conn,sql);
while (row = mysqli_fetch_array(result)) {
// 处理数据记录
}
- 优化查询
优化查询是一种更本质的解决方案,如下操作或许能解决问题:
- 缩小查询范围:提筛选条件,如用到关联查询可以加上索引。
- 更新MySQL配置:增加内存缓冲区、查询缓存等。
总结
当见到MySQL通用“Killed”错误时,我们有很多解决方案可以尝试,如增加timeout、分批查询以及优化查询等。根据情况,需要采用合适的方法来解决问题,以确保良好的开发体验。
极客教程