程式連不上mysql的解決方法:1、確定mysql服務是否正常,並找運維確認網路問題;2、將「max_allowed_packet」值調大;3、將「net_read_timeout」值調大;4、將「connect_timeout」值調大等。
推薦:《mysql影片教學》
程式連不上mysql的問題總結
連不上mysql時一般有以下四種報錯:
1:Can't connect to MySQL server 2:Lost connection to MySQL server 3:Sorry, due to line fault, temporarily unable to browse, we are dealing with. 4:MySQL server has gone away
一:Can't connect to MySQL server
可能的原因:
# #1,mysql服務端沒有啟動2,網路不通(iptables,selinux,網路不穩定)對應的解決方案:1,dba先確定mysql服務是否正常2,mysql服務正常的情況下找運維確認網路問題二: Lost connection to MySQL server有四種情況可能會導致這樣的報錯:1,網路問題2,查詢的結果集太大,例如一個查詢要回傳數百萬個結果3,客戶端發起資料庫連接的時候由於connect_timeout設定時間太短而報錯,如果是由於這個原因引起的報錯可以透過SHOW GLOBAL STATUS LIKE 'Aborted_connects'查看這個值是否有增加4,查詢有blob類型,超過了max_allowed_packet參數的限制這四種情況對應的解決方案:1,運維監控網路是否有問題2,將net_read_timeout值調大3,將connect_timeout值調大4,將max_allowed_packet值調大三: Sorry, due to line fault, temporarily unable to browse, we are dealing with.這個錯誤不是mysql原生的錯誤,在網路上也沒有找到有類似的資料.目前發現有三種情況會有這種報錯:1,網路有問題2,資料庫連線數過多3,連資料庫的帳號密碼有誤四: MySQL server has gone away有以下12種情況可能會導致這樣的報錯:1,預設的wait_timeout值為8個小時,如果空閒連線超過這個值會被kill2,dba手動kill3,客戶端的帳號沒有權限連接mysql server4,客戶端TCP/IP連線逾時,如使用mysql_options(..., MYSQL_OPT_READ_TIMEOUT,...)或mysql_options(..., MYSQL_OPT_WRITE_TIMEOUT,...)或mysql_options(..., MYSQL_OPT_WRITE_TIMEOUT,...)函數5,當客戶端禁用了自動重連接( automatic reconnection)#6,查詢語句不正確7,查詢語句太長,超過了max_allowed_packet的限制8,一條insert或replace語句更新的行數過多9,網域解析失敗10,防火牆屏蔽了3306埠# 11,一個執行緒fork了多個子程序,當多個子程序共用一個連線時會導致報錯12,mysql服務端掛了報MySQL server has gone away的錯誤原因比較多,我們可以從三個面向來處理這個問題:1,維運a,確認防火牆規則b,dns伺服器無異常d,合理配置php.ini連接mysql的參數connect_timeout,預設為60smysqli.reconnect,預設為off2,DBAa,確定mysql服務與連線數沒有異常b,設定合理的wait_timeout值c,設定在伺服器端合理的max_allowed_packet值#d,確認帳號權限無誤3,開發a,建議使用mysqli替代mysqlb,盡量少用長連線######c,mysqli.ping ()可以在連線中斷後自動重連,mysql.ping()從mysql5.0.3後就不支援自動重連了######d,子程序之間不要共用一個資料庫連線#### ##以gamiss為例,我們來看max_allowed_packet和超時有關的參數: ###
>show variables like 'max_allowed_packet'; +--------------------+------------+ | Variable_name | Value | +--------------------+------------+ | max_allowed_packet | 1073741824 | +--------------------+------------+ >show variables like '%timeout%'; +-----------------------------+----------+ | Variable_name | Value | +-----------------------------+----------+ | connect_timeout | 60 | | delayed_insert_timeout | 300 | | have_statement_timeout | YES | | innodb_flush_log_at_timeout | 1 | | innodb_lock_wait_timeout | 120 | | innodb_rollback_on_timeout | OFF | | interactive_timeout | 86400 | | lock_wait_timeout | 31536000 | | net_read_timeout | 120 | | net_write_timeout | 120 | | rpl_stop_slave_timeout | 31536000 | | slave_net_timeout | 3600 | | thread_pool_idle_timeout | 60 | | wait_timeout | 86400 | +-----------------------------+----------+###來看一下這幾個與連不上資料庫相關的超時參數:#######connect_timeout:在取得連結時,等待握手的超時時間,一般預設即可(10s),為了避免因為網路不佳導致連線擁塞可以適當增大這個值.線上配置為60s######wait_timeout/interactive_timeout:連接狀態持續為sleep的超時時間,預設為28800(8小時),現上調整到了24小時######net_read_timeout:伺服器端等待客戶端發送資料的超時時間,預設60s,線上為120s## ####net_write_timeout:伺服器端寫資料到客戶端的逾時時間,預設60s,線上為120s######再看一下max_allowed_packet參數:max_allowed_packet的預設值為1M(1048576),最大值是1G( 1073741824),我們目前線上的值已經是上限值了.######從上面的配置可以看到這些參數的設置相對來說都很大了,數據庫正常情況下程序報連不上資料庫應該和資料庫本身的參數配置沒有關係.我們需要從其它方向來解決這個問題.###
以上是程式連不上mysql怎麼辦的詳細內容。更多資訊請關注PHP中文網其他相關文章!