首頁  >  文章  >  資料庫  >  程式連不上mysql怎麼辦

程式連不上mysql怎麼辦

藏色散人
藏色散人原創
2020-11-04 10:32:205449瀏覽

程式連不上mysql的解決方法:1、確定mysql服務是否正常,並找運維確認網路問題;2、將「max_allowed_pa​​cket」值調大;3、將「net_read_timeout」值調大;4、將「connect_timeout」值調大等。

程式連不上mysql怎麼辦

推薦:《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,客戶端發起資料庫連接的時候由於co​​nnect_timeout設定時間太短而報錯,如果是由於這個原因引起的報錯可以透過SHOW GLOBAL STATUS LIKE 'Aborted_connects'查看這個值是否有增加

4,查詢有blob類型,超過了max_allowed_pa​​cket參數的限制

這四種情況對應的解決方案:

1,運維監控網路是否有問題

2,將net_read_timeout值調大

3,將connect_timeout值調大

4,將max_allowed_pa​​cket值調大

三: 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個小時,如果空閒連線超過這個值會被kill

2,dba手動kill

3,客戶端的帳號沒有權限連接mysql server

4,客戶端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_pa​​cket的限制

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,預設為60s

mysqli.reconnect,預設為off

2,DBA

a,確定mysql服務與連線數沒有異常

b,設定合理的wait_timeout值

c,設定在伺服器端合理的max_allowed_pa​​cket值

#d,確認帳號權限無誤

3,開發

a,建議使用mysqli替代mysql

b,盡量少用長連線######c,mysqli.ping ()可以在連線中斷後自動重連,mysql.ping()從mysql5.0.3後就不支援自動重連了######d,子程序之間不要共用一個資料庫連線#### ##以gamiss為例,我們來看max_allowed_pa​​cket和超時有關的參數: ###
>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_pa​​cket參數:max_allowed_pa​​cket的預設值為1M(1048576),最大值是1G( 1073741824),我們目前線上的值已經是上限值了.######從上面的配置可以看到這些參數的設置相對來說都很大了,數據庫正常情況下程序報連不上資料庫應該和資料庫本身的參數配置沒有關係.我們需要從其它方向來解決這個問題.###

以上是程式連不上mysql怎麼辦的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn