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