mysql查询被杀死 - 如何防止这种情况



我正在从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 

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

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

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

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

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

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

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

看来,这将导致数十万(或数百万)行,消耗过多的记忆。您可以使用SELECT count(1) FROM netpoints WHERE <suppressed>;

检查此

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

相关内容

  • 没有找到相关文章

最新更新