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
未完待續...