最近在提交新的代码之后,MySQL偶尔会抛出异常:
(2006, 'MySQL server has gone away')
这两天情况变得更糟糕,除了这个异常还有:
thread.error: can't start new thread
重新检查了一遍代码之后,发现了两个问题:
(1)根目录/ 下的空间已经被用光了,对应的mysql错误日志会有相关提示:
2013-11-30 21:10:06 17202 [ERROR] /usr/local/mysql/bin/mysqld: Error writing file '/usr/local/mysql/mysql.pid' (Errcode: 28 - No space left on device) 2013-11-30 21:10:06 17202 [ERROR] Can't start server: can't create PID file: No space left on device
解决方法:清掉该目录下一些冗余的数据,腾出足够的空间就OK了。
(2)单个进程里创建了过多的MySQL连接,而又没有及时关闭,导致这些线程数超过了配置(thread_stack)的最大值。
解决方法:在单进程中缓存一个连接的线程,在进程创建时建立连接,在进程退出时关闭;而不是每次或几次有数据操作时就打开/关闭一次,开销太多了。