Mysql連接數過多、Mysql連接錯誤過多的問題處理、mysql常見錯誤集錦


在使用Mysql的過程中,你總是會遇到這樣那樣的問題,每次去網上查找也相對比較麻煩,所以在此整理一下(以linux ubantu16 系統為例)。

=====================================================================

 由 www.webfunny.cn 前端監控提供只需要簡單幾步就可以搭建一套屬於自己的前端監控系統,快來試試吧 ^ _ ^

=====================================================================

1. mysql 連接數太多(SequelizeConnectionError: Too many connections)

這個就是最常見的問題了。因為我做的這個是前端監控系統,日志上報量比較大,所以經常會遇到連接數不夠用的情況。 除了你要使用其他技術來緩解並發量,還需要適當的設置mysql數據庫的最大連接數。那么怎么增加mysql的最大連接數呢,設置多大為合適呢,這又是一個比較麻煩的問題了。下邊是我的一些淺見,僅供參考。

首先我們需要登錄mysql, 進入mysql的命令行:

查看當前mysql的連接數:

mysql> show global status like 'Max_used_connections';
+----------------------+-------+
| Variable_name        | Value |
+----------------------+-------+
| Max_used_connections | 403   |
+----------------------+-------+
1 row in set (0.00 sec)

如何設置mysql的最大連接數呢?

第一種方法:通過mysql命令設置(這種方法是臨時性的,重啟mysql以后就會失效)

mysql> set GLOBAL max_connections=2000;
Query OK, 0 rows affected (0.00 sec)

第二種方法:進入mysql目錄(/usr/local/mysql)找到my.cnf文件,添加如下配置(注意:最大連接數不要設置過大,有可能會在啟動的時候爆掉哦),然后執行命令$: service mysql restart 

[mysqld]
max_connections=1000

Mysql的最大連接數設置多少合適呢?

對照阿里雲的TCP連接數來看一下,阿里雲的TCP連接數可以看出瞬間並發量的多少,然后跟我們的數據庫連接數做個對比。正常情況下TCP連接數為1K左右的時候,MySQL的連接數為400左右。本來瞬間的並發量能達到9K, 但是我將一部分流量導入到其他服務器上,所以現在最高的並發量能夠達到3.4K。當最大3.4K並發量的時候,有兩台服務器同時訪問mysql,我的數據庫連接數是1153個左右。

 

所以,如何設置mysql最大連接數,可以參考一下我的這個數值。

2. Mysql連接錯誤太多(SequelizeConnectionError: Host 'xx.xx.xx.xx' is blocked because of many connection errors; unblock with 'mysqladmin flush-hosts')

這個問題並不常見,因為一般mysql的默認值是100。只有當同一個IP對mysql訪問出現100次連接錯誤的時候,mysql就會拒絕這個ip的請求訪問。因為我的日志服務和數據庫是分離的,所以,經常會在量大的時候出現這個問題。

查看連接報錯配置:

mysql> show variables like '%max_connect_errors%';
+--------------------+-------+
| Variable_name      | Value |
+--------------------+-------+
| max_connect_errors | 100   |
+--------------------+-------+
1 row in set (0.01 sec)

單個ip連接報錯查詢:

select SUM_CONNECT_ERRORS as count from performance_schema.host_cache where ip='xxx.xxx.xxx.xxx'

設置連接數報錯最大數量:

mysql> set GLOBAL max_connect_errors=1000;
Query OK, 0 rows affected (0.00 sec)

 

 3. mysql字符集配置錯誤,導致無法插入數據庫(Illegal mix of collations (latin1_swedish_ci,IMPLICIT) and (utf8mb4_general_ci,COERCIBLE) for operation)

  在數據庫執行查找的命令,判斷條件含有特殊字符,再執行的時候報了以上錯誤;

  查看字段編碼發現是 latin1 字符集的latin1_german1_ci排序規則,而數據庫是utf-8編碼,確定錯誤是編碼導致。

  修改數據庫字段為utf-8編碼  再次執行 順利查出結果

  


免責聲明!

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



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