在 /etc/mysql/my.cnf 中加上的max_connections的設定
/etc/mysql/my.cnf[mysqld]
max_connections=10000
但在查看實際的設定值仍然是214。
mysql> show global variables like '%max_connecti%';
+-----------------+-------+
| Variable_name | Value |
+-----------------+-------+
| max_connections | 214 |
+-----------------+-------+
1 row in set (0.01 sec)
造成這個問題是有兩個原因,一是系統的「一個process最大可開起的檔案數」的值預設是1024,可以使用 ulimit -a,或是從mysql下面的指令看到這個值:
mysql> show global variables like '%open_files_limit%';
+------------------+-------+
| Variable_name | Value |
+------------------+-------+
| open_files_limit | 1024 |
+------------------+-------+
1 row in set (0.00 sec)
這個值會限定MySQL同時連線的數量,所以要先改這個數值。這是linux系統本身的設定,所以必須使用sudo將下面的設定加入到/etc/security/limits.conf這個檔案。
/etc/security/limits.conf* soft nofile 65536
* hard nofile 65536
當設定完成,可以重啟系統讓設定值生效。第二個原因是在啟動mysql的時候要解除open file的限制,方法是在啟動mysql的service檔裡加上LimitNOFILE=65535的設定:
/lib/systemd/system/mysql.serviceLimitNOFILE=65535
當這兩步做完,重啟mysql之後,就可以看到正確的連線數設定了。
mysql> show global variables like '%max_connecti%';
+-----------------+-------+
| Variable_name | Value |
+-----------------+-------+
| max_connections | 10000 |
+-----------------+-------+
1 row in set (0.01 sec)
mysql> show global variables like '%open_files_limit%';
+------------------+-------+
| Variable_name | Value |
+------------------+-------+
| open_files_limit | 65535 |
+------------------+-------+
1 row in set (0.00 sec)