InnoDB 叢集中的成員伺服器會使用三種類型的使用者帳戶。一個 InnoDB 叢集伺服器組態帳戶用於設定叢集的伺服器實例。可以建立一個或多個 InnoDB 叢集管理員帳戶,供管理員在設定叢集後管理伺服器實例。可以建立一個或多個 MySQL Router 帳戶,供 MySQL Router 實例連線到叢集。每個使用者帳戶都必須存在於 InnoDB 叢集的所有成員伺服器上,且使用者名稱和密碼必須相同。
在 InnoDB ClusterSet 部署中,每個成員伺服器都是 InnoDB 叢集的一部分,因此它們需要相同類型的使用者帳戶。主要叢集的使用者帳戶用於部署中的所有叢集。每個使用者帳戶都必須存在於部署中每個叢集(包括主要叢集和複寫叢集)的每個成員伺服器上。
- InnoDB 叢集伺服器組態帳戶
-
此帳戶用於建立和設定 InnoDB 叢集和 InnoDB ClusterSet 部署的成員伺服器。每個成員伺服器只有一個伺服器組態帳戶。在叢集中的每個成員伺服器上,必須使用相同的使用者帳戶名稱和密碼。您可以使用伺服器上的
root
帳戶來達到此目的,但是如果這樣做,則叢集中每個成員伺服器上的root
帳戶都必須具有相同的密碼。基於安全考量,不建議這樣做。較好的方法是使用具有
clusterAdmin
選項的dba.configureInstance()
命令來建立 InnoDB 叢集伺服器組態帳戶。為了獲得更好的安全性,請在互動提示中指定密碼,否則請使用clusterAdminPassword
選項指定密碼。以相同的方式在每個將成為 InnoDB 叢集一部分的伺服器實例上建立相同的帳戶(具有相同的使用者名稱和密碼),包括您連線以建立叢集的實例,以及之後將加入叢集的實例。dba.configureInstance()
命令會自動授予該帳戶所需的權限。如果您願意,可以手動設定帳戶,並授予它手動設定 InnoDB 叢集管理員帳戶中列出的權限。除了完整的 MySQL 管理員權限外,該帳戶還需要對 InnoDB 叢集元資料表具有完整的讀取和寫入權限。您使用
dba.configureInstance()
操作建立的 InnoDB 叢集伺服器組態帳戶 不會 複寫到 InnoDB 叢集或 InnoDB ClusterSet 部署中的其他伺服器。MySQL Shell 會停用dba.configureInstance()
操作的二進位記錄。這表示您必須在每個伺服器實例上個別建立該帳戶。在 InnoDB ClusterSet 部署中,每個部署中使用的伺服器實例都必須存在相同的 InnoDB 叢集伺服器組態帳戶。因此,當您設定複寫叢集時,您需要發出具有
clusterAdmin
選項的dba.configureInstance()
命令,以在將成為複寫叢集一部分的每個伺服器實例上建立帳戶。該命令必須命名來自主要叢集的 InnoDB 叢集伺服器組態帳戶,並且您必須為其指定相同的密碼。您需要在將實例加入複寫叢集之前執行此步驟,以便該帳戶可用於設定複寫 InnoDB 叢集和 InnoDB ClusterSet 部署元資料和複寫。 - InnoDB 叢集管理員帳戶
-
在您完成設定程序後,可以使用這些帳戶來管理 InnoDB 叢集和 InnoDB ClusterSet。您可以設定多個帳戶。每個帳戶都必須存在於 InnoDB 叢集的每個成員伺服器上,且使用者名稱和密碼必須相同,並且存在於 InnoDB ClusterSet 部署中每個叢集的所有成員伺服器上。
若要為 InnoDB ClusterSet 部署建立 InnoDB 叢集管理員帳戶,請在將所有實例新增至主要叢集之後,在主要叢集中的一個成員伺服器上發出
命令。此命令會建立一個具有您指定的使用者名稱和密碼以及所有必要權限的帳戶。建立具有cluster
.setupAdminAccount()
的帳戶的交易會傳送到叢集中的所有其他伺服器實例,以在它們上建立該帳戶。cluster
.setupAdminAccount()如果您在開始設定 InnoDB ClusterSet 部署時主要 InnoDB 叢集已存在,則可能已經存在 InnoDB 叢集管理員帳戶。在這種情況下,您不需要再次發出
,除非您想要建立更多 InnoDB 叢集管理員帳戶。cluster
.setupAdminAccount()InnoDB ClusterSet 部署中的複寫叢集必須具有與主要叢集相同的 InnoDB 叢集管理員帳戶集。但是,當您建立複寫叢集時,請勿嘗試自行設定 InnoDB 叢集管理員帳戶。使用
建立帳戶的交易會寫入主要叢集的二進位記錄中,並且會在佈建過程中從主要叢集自動複寫到複寫叢集。當複寫叢集套用這些交易時,它會在複寫叢集中的成員伺服器上建立相同的帳戶。如果帳戶已經存在於複寫叢集中的伺服器上,則會導致複寫錯誤,且伺服器無法加入叢集。因此,您需要等待它們被複寫。cluster
.setupAdminAccount()如果建立 InnoDB 叢集管理員帳戶的交易在主要叢集上發生了一段時間,則可能需要一些時間才能複寫該交易,並且該帳戶才會出現在複寫叢集上。選擇複製作為複寫叢集的佈建方法可以加快此過程。
注意如果主要 InnoDB 叢集是在 MySQL Shell 8.0.20 之前的版本中設定的,則可能已將
命令與cluster
.setupAdminAccount()update
選項一起使用,以更新 InnoDB 叢集伺服器組態帳戶的權限。這是該命令的特殊用法,不會寫入二進位記錄,也不會複寫到複寫叢集。當 InnoDB ClusterSet 部署完成後,您可以使用
來為 ClusterSet 建立更多 InnoDB 叢集管理員帳戶。您可以連線到 InnoDB ClusterSet 部署中的任何成員伺服器(無論是在主要叢集中還是在複寫叢集中)時執行此操作。建立帳戶的交易會路由至主要叢集執行,然後複寫到複寫叢集中的所有伺服器,以在它們上建立帳戶。cluster
.setupAdminAccount() - MySQL Router 帳戶
-
這些帳戶由 MySQL Router 使用,以連線到 InnoDB 叢集和 InnoDB ClusterSet 部署中的伺服器實例。您可以設定多個帳戶。每個帳戶都必須存在於 InnoDB 叢集的每個成員伺服器上,且使用者名稱和密碼或 SSL 憑證必須相同,並且存在於 InnoDB ClusterSet 部署中每個叢集的所有成員伺服器上。
建立 MySQL Router 帳戶的流程與建立 InnoDB Cluster 管理員帳戶的流程相同,但需使用
命令。您可以在主要叢集中的一個成員伺服器上建立帳戶,或者如果主要 InnoDB Cluster 在您開始設定 InnoDB ClusterSet 部署時已存在,則可以使用現有的帳戶。然後讓複本叢集套用交易,在其成員伺服器上建立帳戶。有關建立或升級 MySQL Router 帳戶的說明,請參閱第 6.10.2 節「設定 MySQL Router 使用者」。cluster
.setupRouterAccount()