【MySQL】MySQL 5.6 引數之 extra_port

楊奇龍發表於2016-01-13
一 前言
    作為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可以正常維護資料庫。
具體用法如下:
  1. mysql --port='extra-port-number' --protocol=tcp
(和percona的介紹類似,讀者朋友可以自己翻譯)
  1. 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.
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
   引數設定:
  1. max_connections = 1
  2. extra_max_connections = 1
  3. extra_port=13306
透過上面兩個引數,來設定整個資料庫的連線數。透過上面的引數配置,最多可以建立4個連線。
測試過程,透過使用下面的命令,嘗試連線資料庫:
場景1 模擬業務連線資料庫,在兩個不同的session下嘗試連線 
  1. mysql -uyang -pyang -h127.0.0.1 -P3306
場景2 模擬DBA連線資料庫,在兩個不同的session下嘗試連線
  1. mysql -uroot -h127.0.0.1 -P3306
場景3 模擬DBA連線資料庫,在兩個不同的session下嘗試連線
  1. mysql -S /srv/my_3306/run/mysql.sock
場景4 佔滿資料庫的所有連線數,然後使用extra_port 埠以root身份連線
  1. mysql --port=13306 --protocol=tcp -uroot -h127.0.0.1
場景5 佔滿資料庫的所有連線數,然後使用extra_port 埠以業務身份連線
  1. mysql --port=13306 --protocol=tcp -uyang -pyang -h127.0.0.1
場景6 這次不指定通訊協議,嘗試連線
  1. mysql --port=13306 -uyang -pyang -h127.0.0.1
場景7 模擬DBA和業務同時連線資料庫,在兩個不同的session下嘗試連線
  1. mysql -uyang -pyang -h127.0.0.1 -P3306
  1. mysql -S /srv/my_3306/run/mysql.sock
  2. 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/,如需轉載,請註明出處,否則將追究法律責任。

相關文章