【MySQL】MySQL 5.6 引數之 extra_port
一 前言
作為MySQL DBA, 在運維MySQL的工作過程中,常常遇到Too many connections這個錯誤,這時作為資料庫維護人員都不能登陸資料庫進行維護 是多麼窘迫的事。可能有人會說可以修改配置檔案,然後重啟資料庫來解決。恩,不過這個是很多種解決方法中 可用性最差的一種,本文介紹透過 5.6 新的特性--管理埠 來解決這個問題。
二 認識 extra_port
MySQL 在5.6.14 版本之後引入一個引數extra_port 用來解決too many connections的問題。
:
從官方文件介紹來看,在MySQL啟動的時候使用該引數指定一個埠號(不要和正常的資料庫服務埠衝突),Percona Server會監聽來自該埠的請求。啟用該引數可以解決使用thread_pool特性時,由於所有的連線池worker忙於處理慢querey或者被鎖定導致DBA無法透過正常的埠連線DB, 以便DBA可以正常維護資料庫。
具體用法如下:
(和percona的介紹類似,讀者朋友可以自己翻譯)
extra_max_connections 該引數主要是控制透過管理埠可以建立多少個連線。
官方介紹:
"This variable can be used to specify the maximum allowed number of connections plus one extra SUPER users connection on the extra_port. This can be used with the extra_port variable to access the server in case no new connections can be established due to all worker threads being busy or being locked when pool-of-threads feature is enabled."
三 extra_port 測試
測試環境:5.6.26-74.0-log Percona Server
引數設定:
透過上面兩個引數,來設定整個資料庫的連線數。透過上面的引數配置,最多可以建立4個連線。
測試過程,透過使用下面的命令,嘗試連線資料庫:
場景1 模擬業務連線資料庫,在兩個不同的session下嘗試連線
場景2 模擬DBA連線資料庫,在兩個不同的session下嘗試連線
場景3 模擬DBA連線資料庫,在兩個不同的session下嘗試連線
場景4 佔滿資料庫的所有連線數,然後使用extra_port 埠以root身份連線
場景5 佔滿資料庫的所有連線數,然後使用extra_port 埠以業務身份連線
場景6 這次不指定通訊協議,嘗試連線
場景7 模擬DBA和業務同時連線資料庫,在兩個不同的session下嘗試連線
測試的結果
場景1,只能連線1次,第2次報錯 ERROR 1040 (HY000): Too many connections
場景2,只能連線2次,第3次報錯 ERROR 1040 (HY000): Too many connections
場景3,只能連線2次,第3次報錯 ERROR 1040 (HY000): Too many connections
場景4,可以連線2次,第3次報錯 ERROR 1040 (HY000): Too many connections
場景5,無法連線,提示"ERROR 1040 (HY000): Too many connections"
場景6, 在業務佔用連線池滿,以管理員可以連線2次,
場景7 如果管理員先登陸 ,業務方無法連線; 如果業務方先登陸,管理員可以登陸一次,無法登陸第二次
共可以連線4次。
四 總結
1 如果不用extra_port引數,MySQL max_connection個連線全部被佔用,DBA仍可以root或者說是具有super許可權連線到DB對DB進行管理,但是隻能連線一次。業務賬號只能登陸 max_connection 次。
2 如果使用extra_port引數,MySQL max_connection個連線全部被佔用,DBA可以以管理員許可權建立 extra_max_connections+1個連線。
3 max_connections的特性
MySQL無論如何都會保留一個用於管理員(SUPER)登陸的連線,用於管理員連線資料庫進行維護操作,即使當前連線數已經達到了max_connections。因此MySQL的實際最大可連線數為max_connections+1;這個引數實際起作用的最大值(實際最大可連線數)為16384,即該引數最大值不能超過16384,即使超過也以16384為準;增加max_connections引數的值,不會佔用太多系統資源。系統資源(CPU、記憶體)的佔用主要取決於查詢的密度、效率等;
作為MySQL DBA, 在運維MySQL的工作過程中,常常遇到Too many connections這個錯誤,這時作為資料庫維護人員都不能登陸資料庫進行維護 是多麼窘迫的事。可能有人會說可以修改配置檔案,然後重啟資料庫來解決。恩,不過這個是很多種解決方法中 可用性最差的一種,本文介紹透過 5.6 新的特性--管理埠 來解決這個問題。
二 認識 extra_port
MySQL 在5.6.14 版本之後引入一個引數extra_port 用來解決too many connections的問題。
:
從官方文件介紹來看,在MySQL啟動的時候使用該引數指定一個埠號(不要和正常的資料庫服務埠衝突),Percona Server會監聽來自該埠的請求。啟用該引數可以解決使用thread_pool特性時,由於所有的連線池worker忙於處理慢querey或者被鎖定導致DBA無法透過正常的埠連線DB, 以便DBA可以正常維護資料庫。
具體用法如下:
- mysql --port='extra-port-number' --protocol=tcp
- Description: Extra port number to use for tcp-connections in a one-thread-per-connection manner. If set to 0, no other port is used. Introduced for the MariaDB 5.1 threadpool.
官方介紹:
"This variable can be used to specify the maximum allowed number of connections plus one extra SUPER users connection on the extra_port. This can be used with the extra_port variable to access the server in case no new connections can be established due to all worker threads being busy or being locked when pool-of-threads feature is enabled."
三 extra_port 測試
測試環境:5.6.26-74.0-log Percona Server
引數設定:
-
max_connections = 1
-
extra_max_connections = 1
- extra_port=13306
測試過程,透過使用下面的命令,嘗試連線資料庫:
場景1 模擬業務連線資料庫,在兩個不同的session下嘗試連線
- mysql -uyang -pyang -h127.0.0.1 -P3306
- mysql -uroot -h127.0.0.1 -P3306
- mysql -S /srv/my_3306/run/mysql.sock
- mysql --port=13306 --protocol=tcp -uroot -h127.0.0.1
- mysql --port=13306 --protocol=tcp -uyang -pyang -h127.0.0.1
- mysql --port=13306 -uyang -pyang -h127.0.0.1
- mysql -uyang -pyang -h127.0.0.1 -P3306
-
mysql -S /srv/my_3306/run/mysql.sock
- mysql -uroot -h127.0.0.1 -P3306
場景1,只能連線1次,第2次報錯 ERROR 1040 (HY000): Too many connections
場景2,只能連線2次,第3次報錯 ERROR 1040 (HY000): Too many connections
場景3,只能連線2次,第3次報錯 ERROR 1040 (HY000): Too many connections
場景4,可以連線2次,第3次報錯 ERROR 1040 (HY000): Too many connections
場景5,無法連線,提示"ERROR 1040 (HY000): Too many connections"
場景6, 在業務佔用連線池滿,以管理員可以連線2次,
場景7 如果管理員先登陸 ,業務方無法連線; 如果業務方先登陸,管理員可以登陸一次,無法登陸第二次
共可以連線4次。
四 總結
1 如果不用extra_port引數,MySQL max_connection個連線全部被佔用,DBA仍可以root或者說是具有super許可權連線到DB對DB進行管理,但是隻能連線一次。業務賬號只能登陸 max_connection 次。
2 如果使用extra_port引數,MySQL max_connection個連線全部被佔用,DBA可以以管理員許可權建立 extra_max_connections+1個連線。
3 max_connections的特性
MySQL無論如何都會保留一個用於管理員(SUPER)登陸的連線,用於管理員連線資料庫進行維護操作,即使當前連線數已經達到了max_connections。因此MySQL的實際最大可連線數為max_connections+1;這個引數實際起作用的最大值(實際最大可連線數)為16384,即該引數最大值不能超過16384,即使超過也以16384為準;增加max_connections引數的值,不會佔用太多系統資源。系統資源(CPU、記憶體)的佔用主要取決於查詢的密度、效率等;
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/22664653/viewspace-1975996/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- MYSQL 5.6 安裝時cmake引數MySql
- mysql5.6主從引數詳解MySql
- mysqldump 引數詳解(基於MySQL 5.6)MySql
- MySQL 5.6所有系統變數(系統引數)MySql變數
- MySQL 5.6 innodb_io_capacity引數效能測試MySql
- MySQL之——RPM方式安裝MySQL5.6MySql
- 【MySQL】MySQL5.6新特性之Batched Key AccessMySqlBAT
- 【MySQL】MySQL5.6新特性之crash-safeMySql
- Mysql 引數MySql
- mysql 5.6引入index condition pushdownMySqlIndex
- MySQL 5.5 和 5.6 預設引數值的差異總結MySql
- mysql之 CentOS系統針對mysql引數優化MySqlCentOS優化
- 【MySQL】MySQL5.6新特性之Multi-Range ReadMySql
- 【MySQL】檢視MySQL Server引數方法MySqlServer
- MySQL引數調整MySql
- mysql 常用引數整理MySql
- MySQL引數說明MySql
- mysql 引數調優MySql
- [MySQL5.6]PerformanceSchema之PS配置項(1)MySqlORM
- mysql 5.6官方文件MySql
- MySQL 效能優化之快取引數優化MySql優化快取
- MySQL5.6之use_index_extensions優化MySqlIndex優化
- MySQL效能相關引數MySql
- MySQL資料庫引數MySql資料庫
- 深入理解mysql引數MySql
- mysql configure 引數MySql
- MySQL引數配置優化MySql優化
- mysql 5.0.41 mysqld 引數大全MySql
- Windows 安裝 MySQL 5.6WindowsMySql
- MySQL:5.6 升級 5.7MySql
- mysql5.6備份MySql
- MySQL 5.6主主同步MySql
- CanalBinlogChange(mysql5.6)GCMySql
- CentOS 安裝 mysql 5.6CentOSMySql
- MySQL 之變數MySql變數
- 【勝通 】mysql的引數變數MySql變數
- MySQL 5.6修改REDO日誌的大小和個數MySql
- mysql引數之innodb_buffer_pool_size大小設定MySql