MySQL問題集錦

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

未完待續...


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章