程序連不上mysql怎么辦

程序連不上mysql的解決辦法:1、確定mysql服務(wù)是否正常,并找運維確認網(wǎng)絡(luò)問題;2、將“max_allowed_packet”值調(diào)大;3、將“net_read_timeout”值調(diào)大;4、將“connect_timeout”值調(diào)大等。

程序連不上mysql怎么辦

推薦:《mysql視頻教程

程序連不上mysql的問題總結(jié)

連不上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服務(wù)端沒有啟起來

2,網(wǎng)絡(luò)不通(iptables,selinux,網(wǎng)絡(luò)不穩(wěn)定)

對應(yīng)的解決方案:

1,dba先確定mysql服務(wù)是否正常

2,mysql服務(wù)正常的情況下找運維確認網(wǎng)絡(luò)問題

二: Lost connection to MySQL server

有四種情況可能會導(dǎo)致這樣的報錯:

1,網(wǎng)絡(luò)問題

2,查詢的結(jié)果集太大,比如一個查詢要返回幾百萬個結(jié)果

3,客戶端發(fā)起數(shù)據(jù)庫連接的時候由于connect_timeout設(shè)置時間太短而報錯,如果是由于這個原因引起的報錯可以通過SHOW GLOBAL STATUS LIKE ‘Aborted_connects’查看這個值是否有增加

4,查詢有blob類型,超過了max_allowed_packet參數(shù)的限制

這四種情況對應(yīng)的解決方案:

1,運維監(jiān)控網(wǎng)絡(luò)是否有問題

2,將 net_read_timeout值調(diào)大

3,將connect_timeout值調(diào)大

4,將max_allowed_packet值調(diào)大

三: Sorry, due to line fault, temporarily unable to browse, we are dealing with.

這個錯誤不是mysql原生的錯誤,在網(wǎng)上也沒有找到有類似的資料.目前發(fā)現(xiàn)有三種情況會有這種報錯:

1,網(wǎng)絡(luò)有問題

2,數(shù)據(jù)庫連接數(shù)過多

3,連數(shù)據(jù)庫的帳號密碼有誤

四: MySQL server has gone away

有以下12種情況可能會導(dǎo)致這樣的報錯:

1,默認的wait_timeout值為8個小時,如果空閑連接超過這個值會被kill

2,dba手動kill

3,客戶端的帳號沒有權(quán)限連接mysql server

4,客戶端TCP/IP連接超時,如使用mysql_options(…, MYSQL_OPT_READ_TIMEOUT,…)或者mysql_options(…, MYSQL_OPT_WRITE_TIMEOUT,…)函數(shù)

5,當客戶端禁用了自動重連接( automatic reconnection)

6,查詢語句不正確

7,查詢語句太長,超過了max_allowed_packet的限制

8,一條insert或者replace語句更新的行數(shù)過多

9,域名解析失敗

10,防火墻屏蔽了3306端口

11,一個線程fork了多個子進程,當多個子進程共用一個連接時會導(dǎo)致報錯

12,mysql服務(wù)端掛了

報MySQL server has gone away的錯誤原因比較多,我們可以從三個方面來應(yīng)對這個問題:

1,運維

a,確認防火墻規(guī)則

b,dns服務(wù)器無異常

d,合理配置php.ini中連接mysql的參數(shù)

connect_timeout,默認為60s

mysqli.reconnect,默認為off

2,DBA

a,確定mysql服務(wù)和連接數(shù)無異常

b,設(shè)置合理的wait_timeout值

c,設(shè)置在服務(wù)器端合理的max_allowed_packet值

d,確認帳號權(quán)限無誤

3,開發(fā)

a,建議使用mysqli替代mysql

b,盡量少用長連接

c,mysqli.ping()可以在連接斷開后自動重連,mysql.ping()從mysql5.0.3后就不支持自動重連了

d,子進程之間不要共用一個數(shù)據(jù)庫連接

以gamiss為例,我們來看一下max_allowed_packet和超時有關(guān)的參數(shù):?

>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?| +-----------------------------+----------+

來看一下這幾個與連不上數(shù)據(jù)庫相關(guān)的超時參數(shù):

connect_timeout:在獲取鏈接時,等待握手的超時時間,一般默認即可(10s),為了避免因為網(wǎng)絡(luò)不佳導(dǎo)致連接擁塞可以適當增大這個值.線上配置為60s

wait_timeout/interactive_timeout:連接狀態(tài)持續(xù)為sleep的超時時間,默認為28800(8小時),現(xiàn)上調(diào)整到了24小時

net_read_timeout:服務(wù)器端等待客戶端發(fā)送數(shù)據(jù)的超時時間,默認60s,線上為120s

net_write_timeout:服務(wù)器端寫數(shù)據(jù)到客戶端的超時時間,默認60s,線上為120s

再看一下max_allowed_packet參數(shù):max_allowed_packet的默認值是1M(1048576),最大值是1G(1073741824),我們目前線上的值已經(jīng)是上限值了.

從上面的配置可以看到這些參數(shù)的設(shè)置相對來說都很大了,數(shù)據(jù)庫正常情況下程序報連不上數(shù)據(jù)庫應(yīng)該和數(shù)據(jù)庫本身的參數(shù)配置沒有關(guān)系.我們需要從其它方向來解決這個問題.

以上就是程序連不上

? 版權(quán)聲明
THE END
喜歡就支持一下吧
點贊11 分享