MySQL查询大表报错
MySQL执行select操作时候,如果执行查询的表的数据量比较大,就会报错error code 2013。或者报错已杀死,并直接退出MySQL客户端。如下所示:
mysql> select * from test; /usr/local/mysql/bin/mysqld_safe: line 198: 4535 Killed nohup /usr/local/mysql/bin/mysqld --basedir=/usr/local/mysql --datadir=/data/3306/data --plugin-dir=/usr/local/mysql/lib/plugin --user=mysql --log-error=/data/3306/tmp/error.log --pid-file=/data/3306/data//mysql.pid --socket=/data/3306/mysql.sock --port=3306 < /dev/null > /dev/null 2>&1 ERROR 2013 (HY000): Lost connection to MySQL server during query
MySQL的错误日志如下:
2019-01-23T20:17:00.305460Z 4 [Note] Aborted connection 4 to db: 'test' user: 'root' host: 'localhost' (Got an error writing communication packets)
linux的系统日志如下 cat /var/log/messages:
mysql kernel: Out of memory: Kill process 5453 (mysql) score 545 or sacrifice child mysql kernel: Killed process 5453, UID 0, (mysql) total-vm:2117292kB, anon-rss:1947792kB, file-rss:52kB
这个问题的主要原因是:服务器内存不足,服务器是Linux的,由于内存不足,mysql服务就被kill掉了,因为Linux服务器在检测到一个占内存的服务,而内存又不够用的情况下,就把那个服务给干掉,这就是Linux常见的OOM killer(Out Of Memory killer)机制。
解决方法:
1、更换大内存的服务器
2、客户端使用分页查询,使用limit控制查询数量