在程序中使用了mysql_stmt系列预处理函数,发现mysql_stmt_execute出现错误,但错误号为0;
调整参数
show global status like "open%";
show global variables like '%open%';
flush tables;
SHOW GLOBAL STATUS LIKE 'Opened_tables'
set global table_open_cache = 200;(table_cache)
set global max_connections = 100;
open_files = 2048
ulimit -n 2048
wait_timeout = 600
察看mysql的进程数
show processlist;
察看sleep进程的信息
netstat -ntp | grep :端口号
根据以上命令可以查到与mysql连接的程序的名称
netstat -ntp | grep 进程号
调试程序:strace -p
重新运行程序,发现没有了。晕。。。
总结:mysql中有个超时重连机制,由参数wait_timeout决定,缺省时28800秒;如果这个参数设置太小,就会导致客户端老是重连,从而预处理句柄实效,数据无法处理。解决方法,使用缺省值,客户端不使用重连机制。