在使用Mysql的過程當中,你老是會遇到這樣那樣的問題,每次去網上查找也相對比較麻煩,因此在此整理一下(以linux ubantu16 系統爲例)。html
=====================================================================前端
安利一下個人開源項目: 前端監控系統
mysql
=====================================================================linux
1. mysql 鏈接數太多(SequelizeConnectionError: Too many connections)web
這個就是最多見的問題了。由於我作的這個是前端監控系統,日誌上報量比較大,因此常常會遇到鏈接數不夠用的狀況。 除了你要使用其餘技術來緩解併發量,還須要適當的設置mysql數據庫的最大鏈接數。那麼怎麼增長mysql的最大鏈接數呢,設置多大爲合適呢,這又是一個比較麻煩的問題了。下邊是個人一些淺見,僅供參考。sql
首先咱們須要登陸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)