MySQL伺服器端 客戶端常見錯誤

2021-09-28 17:47:47 字數 4495 閱讀 9021

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)

ping一下要連線資料庫,看能否ping通;

使用mysql client嘗試連線一下,注意使用-h -u -p -p分別指定host、user、port,例如mysql -hdbxx -utest -p5002 -p,然後回車,輸入密碼;

強調一下,第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

mysql客戶端與伺服器端模型

當你要進入mysql是不是輸入命令 mysql uroot p 密碼 就進去了 但是難道不好奇它是怎麼實現的嗎?其實就是把ip 埠號 使用者名稱 密碼 在頁面上構成乙個鏈結串 然後傳送請求到目標 電腦 ip上 任意乙個重要因素缺失就連線不上 這就是最簡單的乙個模式 tcp ip tcp ip 這是大...

oracle客戶端訪問伺服器端

1.客戶端工具 可以使用sqlplus,oacle sql developer,pl sql developer 最近專案用到了oracle,使用的是oracle10g,因為小組內有多人使用資料庫,並且oracle資料庫很佔內 存,就放在單獨的一台伺服器上,所以最好每個人都裝乙個oracle10g的...

客戶端與伺服器端通訊

關係圖 傳送 邏輯管理器 處理邏輯傳送指令 指令解析管理器 根據協議xml解析指令成二進位制資料 把二進位制資料傳給伺服器 接收 伺服器傳送二進位制資料到客戶端 指令解析管理器 根據協議xml解析二進位制資料 根據解析資料對映到邏輯類來處理 2 1 3 20 2,2 21 1,1,2 指令名和指令名...