小編給大家分享一下程序連不上mysql的解決方法,希望大家閱讀完這篇文章后大所收獲,下面讓我們一起去探討吧!
程序連不上mysql的解決辦法:1、確定mysql服務是否正常,并找運維確認網(wǎng)絡問題;2、將“max_allowed_packet”值調大;3、將“net_read_timeout”值調大;4、將“connect_timeout”值調大等。
程序連不上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,網(wǎng)絡不通(iptables,selinux,網(wǎng)絡不穩(wěn)定)
對應的解決方案:
1,dba先確定mysql服務是否正常
2,mysql服務正常的情況下找運維確認網(wǎng)絡問題
二: Lost connection to MySQL server
有四種情況可能會導致這樣的報錯:
1,網(wǎng)絡問題
2,查詢的結果集太大,比如一個查詢要返回幾百萬個結果
3,客戶端發(fā)起數(shù)據(jù)庫連接的時候由于connect_timeout設置時間太短而報錯,如果是由于這個原因引起的報錯可以通過SHOW GLOBAL STATUS LIKE 'Aborted_connects'查看這個值是否有增加
4,查詢有blob類型,超過了max_allowed_packet參數(shù)的限制
這四種情況對應的解決方案:
1,運維監(jiān)控網(wǎng)絡是否有問題
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原生的錯誤,在網(wǎng)上也沒有找到有類似的資料.目前發(fā)現(xiàn)有三種情況會有這種報錯:
1,網(wǎng)絡有問題
2,數(shù)據(jù)庫連接數(shù)過多
3,連數(shù)據(jù)庫的帳號密碼有誤
四: 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,...)函數(shù)
5,當客戶端禁用了自動重連接( automatic reconnection)
6,查詢語句不正確
7,查詢語句太長,超過了max_allowed_packet的限制
8,一條insert或者replace語句更新的行數(shù)過多
9,域名解析失敗
10,防火墻屏蔽了3306端口
11,一個線程fork了多個子進程,當多個子進程共用一個連接時會導致報錯
12,mysql服務端掛了
報MySQL server has gone away的錯誤原因比較多,我們可以從三個方面來應對這個問題:
1,運維
a,確認防火墻規(guī)則
b,dns服務器無異常
d,合理配置php.ini中連接mysql的參數(shù)
connect_timeout,默認為60s
mysqli.reconnect,默認為off
2,DBA
a,確定mysql服務和連接數(shù)無異常
b,設置合理的wait_timeout值
c,設置在服務器端合理的max_allowed_packet值
d,確認帳號權限無誤
3,開發(fā)
a,建議使用mysqli替代mysql
b,盡量少用長連接
c,mysqli.ping()可以在連接斷開后自動重連,mysql.ping()從mysql5.0.3后就不支持自動重連了
d,子進程之間不要共用一個數(shù)據(jù)庫連接
以gamiss為例,我們來看一下max_allowed_packet和超時有關的參數(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ù)庫相關的超時參數(shù):
connect_timeout:在獲取鏈接時,等待握手的超時時間,一般默認即可(10s),為了避免因為網(wǎng)絡不佳導致連接擁塞可以適當增大這個值.線上配置為60s
wait_timeout/interactive_timeout:連接狀態(tài)持續(xù)為sleep的超時時間,默認為28800(8小時),現(xiàn)上調整到了24小時
net_read_timeout:服務器端等待客戶端發(fā)送數(shù)據(jù)的超時時間,默認60s,線上為120s
net_write_timeout:服務器端寫數(shù)據(jù)到客戶端的超時時間,默認60s,線上為120s
再看一下max_allowed_packet參數(shù):max_allowed_packet的默認值是1M(1048576),較大值是1G(1073741824),我們目前線上的值已經(jīng)是上限值了.
從上面的配置可以看到這些參數(shù)的設置相對來說都很大了,數(shù)據(jù)庫正常情況下程序報連不上數(shù)據(jù)庫應該和數(shù)據(jù)庫本身的參數(shù)配置沒有關系.我們需要從其它方向來解決這個問題.
看完了這篇文章,相信你對程序連不上mysql的解決方法有了一定的了解,想了解更多相關知識,歡迎關注創(chuàng)新互聯(lián)行業(yè)資訊頻道,感謝各位的閱讀!
文章題目:程序連不上mysql的解決方法-創(chuàng)新互聯(lián)
當前鏈接:http://chinadenli.net/article20/dechjo.html
成都網(wǎng)站建設公司_創(chuàng)新互聯(lián),為您提供App設計、手機網(wǎng)站建設、云服務器、網(wǎng)頁設計公司、品牌網(wǎng)站制作、自適應網(wǎng)站
聲明:本網(wǎng)站發(fā)布的內容(圖片、視頻和文字)以用戶投稿、用戶轉載內容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內容未經(jīng)允許不得轉載,或轉載時需注明來源: 創(chuàng)新互聯(lián)