MySQL查询被杀 - 如何防止?

时间:2014-01-28 21:14:48

标签: mysql sql linux bash

我正在从bash shell运行mysql-query,它应该将结果写入文件。这个东西看起来像这样(简化了一下):

   mysql -uname -ppwd wmap -e "select netpoints.bssid,netpoints.lat,netpoints.lon from netpoints,users WHERE ((users.flags & 1 = 1) AND users.idx=netpoints.userid) OR (netpoints.source=5);" >db/db.csv

查询本身没问题且工作正常,但直到某段时间脚本的执行失败

   line 1: 11427 Killed 

那么......我怎么能避免查询以这种方式终止?结果将是一个大量的数据,并且查询需要很长时间才能执行,但只要会有结果就可以。

(将命令和错误消息添加到代码标记中)

3 个答案:

答案 0 :(得分:6)

默认情况下,整个结果集将在内存中获取。如果这变得太多,mysql客户端将被杀死。您可以使用--quick选项启动mysql客户端以防止这种情况:

   mysql --quick -uname -ppwd wmap -e  ... 

答案 1 :(得分:1)

您可能在MySQL中遇到超时。您可能需要检查MySQL慢查询日志以查看是否是这种情况。如果是这样,您可能希望在可能的情况下查看优化查询,或者可能增加MySQL中的超时(http://www.rackspace.com/knowledge_center/article/how-to-change-the-mysql-timeout-on-a-server以获取有关如何执行此操作的信息)。

答案 2 :(得分:0)

在这种情况下,您应该使用LIMIT来拆分查询结果。

您的查询应该返回多少行?

它似乎会导致数十万(或数百万)行,消耗太多内存。您可以使用SELECT count(1) FROM netpoints WHERE <suppressed>;

进行检查

如果这不是问题,那么您与MySQL的连接可能会变得空闲,因此被mysqld自动关闭。要解决此问题,您可以更改脚本以发出定期命令,或者增加MySQL wait_timeout配置。