MySQL服務器端&客戶端常見錯誤


客戶端

1.ERROR 2013 (HY000) at line 1: Lost connection to MySQL server during query

使用select 一個大表,query的過程中被主庫kill掉會出現下面錯誤

2.ERROR 2006 (HY000): MySQL server has gone away

如果超過wait_timeout或者interactive_timeout時,再使用這個連接時
admin>show databases;

insert values()()如果數據量的大小超過了max_allow_packets的大小,也會報
ERROR 2006 (HY000): MySQL server has gone away

服務器端error log中報錯:
141111 19:30:16 [Warning] Aborted connection 1280 to db: 'deal' user: 'admin' host: '10.0.0.0' (Got timeout reading communication packets)

3.ERROR 1045 (28000): Access denied for user 'test'@'10.0.0.0' (using password: YES)

  1. ping一下要連接數據庫,看能否ping通;
  2. 使用mysql client嘗試連接一下,注意使用-h -u -P -p分別指定host、user、port,例如mysql -hdbxx -utest -P5002 -p,然后回車,輸入密碼;
  3. 強調一下,第2步的時候使用-p之后回車,然后輸入密碼,而不是把密碼作為參數直接輸入,這樣一個安全,二是避免了密碼中轉義字符引起的問題;

4.ERROR 2003 (HY000): Can't connect to MySQL server on '192.168.1.1' (111)

這種情況下,說明還沒有連接上mysql,嘗試ping下數據庫,看是否能ping通;其次看下mysql server是否啟動;

5.ERROR 1040 (HY000): Too many connections

當前服務器端的連接數超過了設置的最大連接數max_connections

6.Host 'host_name' is blocked because of many connection errors.Unblock with 'mysqladmin flush-hosts'

如果client在連接server的時候,出錯次數超過server設置的max_connect_errors(不包括錯誤的密碼嘗試),則會報這個錯誤;這個一般是網絡存在問題,如果確認網絡存在偶爾性的,可以增大max_connect_errors並執行flush-hosts

7.Communications link failure,The last packet successfully received from the server was *** millisecond ago.The last packet successfully sent to the server was ***  millisecond ago。

 1) mysql服務器默認的“wait_timeout”是8小時(也就是默認的值默認是28800秒),也就是說一個connection空閑超過8個小時,mysql將自動斷開該connection,通俗的講就是一個連接在8小時內沒有活動,就會自動斷開該連接。而連接池卻認為該連接還是有效的(因為並未校驗連接的有效性),當應用申請使用該連接時,就會導致上面的報錯。

2) 如果客戶端連接設置了socketTimeout=1000(即1s), 當客戶端連接發送一個慢查詢(超過1s)時,客戶端連接socket會斷開,同樣會報“Communications link failure” 錯誤

8.Could not create connection to database server. Attempted reconnect 3 times. Giving up

 1)如上錯誤常見情況是后端mysql服務不可用,請確認后端mysql服務正常以及連接使用的配置參數正確;

 2)還有一種情況是業務使用了Atlas,業務連接串中配置了重連(autoReconnect=true),當連接池中連接損壞(如上7中描述了可能損壞的情況),業務再次使用該損壞連接的時候會發起重連(JDBC內部機制)並嘗試三次,但是報如上錯誤(確認連接參數無問題)。這是由於jdbc內部重連上后會發送“SET SESSION TRANSACTION ISOLATION LEVEL REPEATABLE READ” 請求,而該請求在0.0.2版本的Atlas中不支持(可升級0.1解決),只會影響當前請求,不影響這個連接下一次的使用。

服務器端

 

1. [Warning] Aborted connection 104566 to db: 'test' user: 'root' host: 'localhost' (Got an error reading communication packets)

    很明顯, MySQL認為讀到了一個錯誤的包,並將該連接Aborted了, 在errlog中記下這個warning, 通過show global status like '%Aborted_clients%' 可以看到Aborted_clients 值的增加。

    出現該warning主要是因為客戶端沒有正常調用mysql_close()退出。我們針對php、python、perl做測試如下:

    1) python 代碼如下:

    

    運行該程序, 在另一個Term中kill  或者 kill -9 該進程, 在MySQL errlog中均會出現如上warning

    運行該程序, 然后按下 crtl + c 中斷該程序, 在MySQL errlog中沒有出現如上waring

    2)php 代碼如下:

    

    運行該程序,在另一個Term中kill  或者 kill -9 該進程, 在MySQL errlog中均會出現如上warning

    運行該程序, 然后按下 crtl + c 中斷該程序, 在MySQL errlog中出現如上waring

    3)perl 代碼如下:

    

    運行該程序,在另一個Term中kill  或者 kill -9 該進程, 在MySQL errlog中均會出現如上warning

    運行該程序, 然后按下 crtl + c 中斷該程序, 在MySQL errlog中出現如上waring

    注: 通過測試,發現python、php、perl 對 crtl + c (同 kill -2) 處理方式不同,僅python 對 kill -2 信號處理調用了 mysql_close() 正常關閉MySQL連接。 


2.[Warning] Access denied for user 'test'@'localhost' (using password: YES)

   服務器端報此錯誤,主要是客戶端連接的時候使用了錯誤的密碼。

   創建測試用test, 並賦予test庫的增刪改查權限:

   

   1) 在終端使用錯誤的密碼連接MySQL結果如下:

   

   可以看到此時客戶端報用戶無權限連接 ERROR, 而此時服務器端errlog中會出現如上的warning

   2) 在終端連接沒有權限的database 結果如下:

    

   此時客戶端報沒有權限連接MySQL庫, 而服務器端errlog中沒有任何warning出現

 

3.[Warning] Aborted connection 104643 to db: 'test' user: 'root' host: 'localhost' (Got timeout reading communication packets)

   主要是客戶端連接在wait_timeout 時間范圍內都無操作,服務器端會斷開此連接

   1)首先我們設置wait_timeout值為10秒

    

    2)  等待超過10s后服務器端報錯如下:

    

    3)  再在MySQL客戶端中發起操作會報ERROR : MySQL server has gone  away 

    

    

4.[Warning] Aborted connection 104660 to db: 'test' user: 'root' host: 'localhost' (Got a packet bigger than 'max_allowed_packet' bytes)

    此warning主要是因為客戶端向服務器端傳送了大於max_allowed_packet 指定大小的包所導致。測試如下:

  1) 首先將數據通過mysqldump命名將數據導出

     

     默認mysqldump會將數據導出成多個insert into語句, 每個語句大小接近1M

  2)設置max_allowed_packet = 524288

     

  3) 再使用MySQL命令將hostname.sql 導入結果如下:

    

     服務器errlog中會報如上warning


轉自meituan wk



免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM