先前,不同 MySQL Shell 執行個體可以同時連線並在相同的資源上處理 AdminAPI 操作。這可能會導致狀態不一致和錯誤,例如,如果
和 Cluster
.addInstance()
並行處理。Cluster
.setPrimaryInstance()
AdminAPI 使用 MySQL 鎖定服務來提供下列鎖定類型
讀取或共用鎖定:允許並行執行某些操作,同時封鎖獨佔操作。如果某個操作嘗試取得共用鎖定,但由於存在獨佔鎖定而無法取得,則會中止該操作,而不會進行任何變更。如果目前的操作具有共用鎖定,且新的操作需要共用鎖定,則允許新的操作進行存取。
寫入或獨佔鎖定:會封鎖所有其他操作的執行,直到目前的操作完成並釋放獨佔鎖定為止。如果某個操作嘗試取得獨佔鎖定,但由於存在現有鎖定而無法取得,則會中止該操作,而不會進行任何變更。
如需詳細資訊,請參閱鎖定服務。
下表列出每個 AdminAPI 操作的鎖定
DBA 鎖定:列出
dba.
操作的鎖定。operationName
叢集鎖定:列出
操作的鎖定。Cluster
.operationName
ClusterSet 鎖定:列出
操作的鎖定。ClusterSet
.operationName
InnoDB ReplicaSet 鎖定:列出
操作的鎖定。ReplicaSet
.operationName
未列出不需要鎖定的操作。
實際上,如果您嘗試執行某個操作,而另一個無法並行執行的操作仍在執行中,則會收到錯誤,指出無法取得所需資源的鎖定。在這種情況下,您應等待持有鎖定的執行中操作完成,然後再嘗試處理下一個操作。例如
mysql-js> rs.addInstance("admin@rs2:3306");
ERROR: The operation cannot be executed because it failed to acquire the lock on
instance 'rs1:3306'. Another operation requiring exclusive access to the
instance is still in progress, please wait for it to finish and try again.
ReplicaSet.addInstance: Failed to acquire lock on instance 'rs1:3306' (MYSQLSH
51400)
在此範例中,
失敗,因為無法取得主要執行個體 (ReplicaSet
.addInstance()rs1:3306
) 的鎖定,因為
操作 (或其他類似操作) 仍在執行中。ReplicaSet
.setPrimaryInstance()
如果執行個體因複製操作或要求的重新啟動而重新啟動,則會釋放鎖定。因此,當另一個 Shell 工作階段可能在重新啟動時取得對執行個體的存取權並鎖定它時,會有一段短暫的期間 (以毫秒為單位)。但是,叢集和/或 ClusterSet 的原始鎖定仍然存在,因此可能鎖定新重新啟動的執行個體的新命令無法要求叢集或 ClusterSet 鎖定。
本節列出
操作的鎖定。dba
.operationName
表 6.1 DBA 操作鎖定
操作 | 鎖定類型 |
---|---|
|
目標執行個體的獨佔鎖定 |
|
目標執行個體的獨佔鎖定 |
|
所有可連線叢集成員的獨佔鎖定。 如果叢集是複本叢集,而且是 ClusterSet 的一部分,則也會做為操作的一部分重新加入 ClusterSet。在這種情況下,該操作也會取得與 |
|
|
|
目標執行個體的獨佔鎖定。 |
|
目標執行個體的獨佔鎖定。 |
|
如果拓撲是 ClusterSet,則在 ClusterSet 和主要叢集上,或者如果拓撲是獨立叢集,則在叢集上,以及目標執行個體上的獨佔鎖定。 |
本節列出
操作的鎖定。cluster
.operationName
表 6.2 叢集操作鎖定
操作 | 叢集鎖定類型 | 目標執行個體鎖定類型 |
---|---|---|
|
獨佔 |
獨佔 |
|
獨佔 |
|
|
獨佔 |
|
|
獨佔 |
|
|
獨佔 |
|
|
獨佔 |
|
|
共用 |
獨佔 |
|
獨佔 |
獨佔 |
|
獨佔 |
|
|
獨佔 |
|
|
獨佔 選項 |
|
|
獨佔 選項 |
|
|
獨佔 |
|
|
共用 |
|
|
共用 |
|
|
獨佔 |
|
|
獨佔 |
|
|
獨佔 |
本節列出
操作的鎖定。clusterSet
.operationName
表 6.3 ClusterSet 操作鎖定
操作 | ClusterSet 鎖定類型 | 主要叢集鎖定類型 | 目標叢集鎖定類型 |
---|---|---|---|
|
共用 |
用於建立新複本叢集的執行個體的獨佔鎖定。 |
|
|
所有複本叢集的獨佔鎖定。 |
||
|
共用 |
共用 | 獨佔 |
|
獨佔。 |
獨佔 |
獨佔 |
|
獨佔 |
獨佔 (僅在設定 |
|
|
獨佔 |
獨佔 |
本節列出
操作的鎖定。replicaSet
.operationName
表 6.4 ReplicaSet 操作鎖定
操作 | 主要執行個體鎖定類型 | 目標執行個體鎖定類型 |
---|---|---|
|
目標執行個體以及執行操作時 ReplicaSet 的所有可連線成員的獨佔鎖定。 |
|
|
獨佔 |
目標執行個體以及執行操作時 ReplicaSet 的所有可連線成員的獨佔鎖定。 |
|
共用 |
獨佔 |
|
共用 | 獨佔 |
|
共用 |
獨佔 |
|
共用 |