Replication

為什麼使用 MariaDB 的 extra_port 進行複制不是一個好主意?

  • April 6, 2022

MariaDB 具有extra_port管理訪問權限,可線上程池或主埠被鎖定的情況下提供幫助。

MariaDB 的文件說它的案例主要是管理訪問,它可用於確保監控系統始終具有訪問權限。

對我來說,“總是可以訪問”聽起來像是你想要複製的東西,但沒有提到,我找不到任何人寫關於使用額外埠進行複制的文章。

文件中何時使用執行緒池的段落說:

在查詢相對較短且負載受 CPU 限制的情況下,執行緒池效率最高

複製永遠執行(手指交叉)並且是 IO 綁定的。這聽起來像是使用額外埠的另一個指示(儘管複製不是查詢)。

我的問題:

你能解釋一下為什麼使用額外的埠進行複制不是一個好主意嗎?

如果這確實是一個好主意,為什麼它沒有普及(正如在Google搜尋“ mariadb extra_port replication ”時沒有發現任何實質性內容所表明的那樣)?

複製連接是否得到一些特殊處理和/或優先級?

複製不需要一些特殊的埠,可以使用普通的3306。額外的埠是root可以作為後門使用的埠,如果沒有通過普通埠訪問。

假設您有max_connections = 100並且您的應用程序已經使用了所有 100 個連接,則使用者只能使用一個額外的連接ALL PRIVILEGES。如果有人已經以 DBA 身份連接,則您沒有機會連接到伺服器。但是您仍然可以通過 extra_port 進行連接,因為它沒有max_connections限制。這就是為什麼您不應該將它用於除緊急訪問之外的任何其他任務的原因。如果沒有max_connections設置為合理的值,您可以輕鬆耗盡主機的 RAM,從而以非常糟糕的方式掛起您的數據庫甚至主機。

好問題。

預設REPLICATION CLIENT/BINLOG_MONITOR沒有提升權限,例如CONNECTION ADMINSUPER允許他們繞過max_connections限制。

連接每個extra_port連接使用一個執行緒,而不是池化。max_extra_connections適用於extra_port,預設為 1,因此如果您將其用於複製,增加max_extra_connections以允許執行其他一些任務是謹慎的做法。

適合短連接的執行緒池的原因是創建新執行緒的成本。正如問題中所指出的,這對於複製並不重要。

向複製使用者授予 aCONNECTION ADMIN遠遠超出了它的需要。

因此,如果碰巧斷開連接,使用額外的埠來保留複製能力,從而使使用者無法使用超出副本連接能力的連接,實際上是一個合理的想法(即使不普遍考慮)。

引用自:https://dba.stackexchange.com/questions/271481