1.c3p0连接池连接MySql数据库,当c3p0设置的最大连接数c3p0.max_size超过了MySQL设置的最大连接数max_connections,一旦系统使用的连接数超过了max_connections,就会报以下异常:
2012-9-15 12:00:26 com.mchange.v2.async.ThreadPoolAsynchronousRunner$DeadlockDetector run
警告: com.mchange.v2.async.ThreadPoolAsynchronousRunner$DeadlockDetector@1c5d81c -- APPARENT DEADLOCK!!! Creating emergency threads for unassigned pending tasks!
......
所以解决这个问题的方法就是修改MySQL的最大连接数,MySQL默认的最大连接数是100。
在mysql安装目录下的my.ini文件中的[mysqld]下加上:
max_connections=1000
2.mysql数据库连接超时(wait_timeout)问题
当系统与mysql数据库建立连接后,如果两次数据库操作的间隔时间超过了 8 小时(默认),数据库会自动断开连接,再次访问就会抛出异常。
一般的解决方法大多是在连接数据库的url后面加上“autoReconnect=true”自动重连,但是这只对 mysql4 以前的版本有效,在mysql5.0以上版本是无效的。
解决方法:
修改mysql数据库的系统变量wait_timeout和interactive_timeout。
MySQL5手册中对两个变量有如下的说明:
interactive_timeout:服务器关闭交互式连接前等待活动的秒数。交互式客户端定义为在mysql_real_connect()中使用CLIENT_INTERACTIVE选项的客户端。又见wait_timeout
wait_timeout:服务器关闭非交互连接之前等待活动的秒数。在线程启动时,根据全局wait_timeout值或全局interactive_timeout值初始化会话wait_timeout值,取决于客户端类型(由mysql_real_connect()的连接选项CLIENT_INTERACTIVE定义),又见interactive_timeout
两个变量是共同控制的,必须对它们都进行修改,wait_timeout的取值范围是1-2147483(Windows),1-31536000(linux),interactive_time取值随wait_timeout变动,它们的默认值都是28800。
在mysql安装目录下的my.ini文件中的[mysqld]下加上:
wait_timeout=2073600
interactive_timeout=2073600
重启数据库服务。
MySQL下mysql.sock丢失问题的解决[linux, mysqld.sock]
MySQL下mysql.sock丢失丢失的原因一般是因为配置文件不一致的原因,mysqld 错误启动,mysqld_safe 会清除一次mysql.sock 。解决方法是:
判断一般人解决故障时没有切换到mysql用户,造成权限有问题,无法创建mysql授权表,所以也就无法创建/tmp/mysql.sock 和hostname.pid文件。因此,总结解决方法如下(注: 使用root也可以):
#su mysql
$/usr/bin/mysql_install_db //重建授权表
$/usr/bin/mysqld_safe &
$/usr/bin/mysql //测试
mysq>bye;
$
文件已经解决,重新生成新的 /tmp/mysql.sock 和 hostname.pid
$su root
未完待续...