眾所周知,目前數據庫在超過設置最大連接數時,會報too many connections,把新的連接拒之門外,而在MariaDB 10.0和Percona5.6版本中,有個參數extra_port可以額外登陸到數據庫解決這個連接問題。
MySQL官方終於在8.0.14這個版本也推出了相關參數。
主要包含幾個配置參數:admin_address: 用於指定管理員發起tcp連接的主機地址,可以是ipv4,ipv6, 或者Host name等等,他類似bind-address,但不同的是只能接受一個ip地址
admin_port: 顧名思義,就是管理員用來連接的端口號,注意如果admin_address沒有設置的話,這個端口號是無效的
create_admin_listener_thread: 是否創建一個單獨的listener線程來監聽admin的鏈接請求,默認值是關閉的,facebook的建議是打開,否則其會使用已有的監聽線程去監聽admin連接。該參數同樣需要admin_address打開, 否則沒有任何影響
注意必須要有權限service_connection_admin才能登陸該端口,否則會報錯
根據文檔描述,admin port的連接個數不受max_connection或者Max_user_connection的限制。
基於此特性,做了一些測試:
根據官方文檔要求,調整了一下參數

將數據庫連接打滿,然后通過admin_port連接數據庫,


通過線程表查看,正常root用戶連接數據庫的方式和通過admin_port連接數據庫的方式不同:


一個是走本地socket,而另一個是走SSL/TLS,8.0版本中加密方式也做了增強,默認都是以caching_sha2_password插件來做的,還以原來方式連接數據庫就會報以下錯誤。
ERROR 1251 (08004): Client does not support authentication protocol requested by server; consider upgrading MySQL client
可以選擇在配置文件中加上default_authentication_plugin = mysql_native_password重新走原來的加密方式,但是不推薦再用以前的,畢竟MySQL5.7版本到明年官方就不再維護BUG了,讓我們一起擁抱8.0吧。
http://mysql.taobao.org/monthly/2019/09/03/
