我正在从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
那么......我怎么能避免查询以这种方式终止?结果将是一个大量的数据,并且查询需要很长时间才能执行,但只要会有结果就可以。
(将命令和错误消息添加到代码标记中)
答案 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
配置。