我刚刚将我的网站转移到Linode,目前我正在使用其1 GB RAM计划。默认情况下,mysql用户数设置为100.这会导致Too many connections
错误。
我借助此功能再次编辑了mysql设置。但是,现在数据库几乎每天都在崩溃!
以下是我当前的mysql设置: -
key_buffer = 100M
max_allowed_packet = 1M
thread_stack = 128K
thread_cache_size = 8
myisam-recover = BACKUP
max_connections = 150
table_cache = 1024
query_cache_limit = 300M
query_cache_size = 300M
max_allowed_packet = 16M
key_buffer = 100M
有人可以建议我进行一些更改或我的数据库频繁崩溃的原因吗?我还可以根据需要添加有关我的服务器的更多详细信息。
修改
我已经在任何地方添加了mysql_close($ con),但这会进一步增加我网站的问题。连接在下面显示的结果中呈指数级增长: -
mysql> show status like '%onn%';
+--------------------------+-------+
| Variable_name | Value |
+--------------------------+-------+
| Aborted_connects | 48 |
| Connections | 1634 |
| Max_used_connections | 8 |
| Ssl_client_connects | 0 |
| Ssl_connect_renegotiates | 0 |
| Ssl_finished_connects | 0 |
| Threads_connected | 4 |
+--------------------------+-------+
7 rows in set (0.00 sec)
谢谢!
答案 0 :(得分:0)
如果你没有关闭连接,那么显然这会导致数据库最终崩溃。重新启动将刷新所有连接,这就是服务器可能正在重新启动的原因。
所以修复你的应用程序并关闭连接。同时你可以使用这个脚本来杀死在你的进程列表中停留的已打开的连接。该脚本将杀死进程列表中停滞500秒的所有内容。您可以根据需要更改时间。
SECONDS_TOO_LONG=500
QUERIES_RUNNING_TOO_LONG=`/mysql/bin/mysql -u user -p'password' -ANe"SELECT COUNT(1) FROM information_schema.processlist WHERE user<>'system user' AND time >= ${SECONDS_TOO_LONG}"`
if [ ${QUERIES_RUNNING_TOO_LONG} -gt 0 ]
then
KILLPROC_SQLSTMT="SELECT GROUP_CONCAT(CONCAT('KILL QUERY ',id,';') SEPARATOR ' ') KillQuery FROM information_schema.processlist WHERE user<>'system user' AND time >= ${SECONDS_TOO_LONG}"
/mysql/bin/mysql -u user -p'pass' -ANe"${KILLPROC_SQLSTMT}" | /mysql/bin/mysql -u user -p'pass'
fi;
答案 1 :(得分:0)
实际上,增加指数连接的主要来源是我的表本身。我正在使用MYISAM数据库。它实际上在进行任何更新之前锁定整个表。因此,如果有太多用户访问我的网站,那就会造成麻烦。
解决方案: -
我将数据库更改为InnoDB。它仅锁定所需的各行。这限制为一次没有连接到低到一位数。 Here是另一个帮助我完全解决问题的问题。