Spec-Zone.ru › MySQL Shell 8.4

6.12 Механизм блокировки для операций AdminAPI

Ранее разные экземпляры MySQL Shell могли подключаться и обрабатывать операции AdminAPI одновременно на одном ресурсе. Это могло привести к несогласованному состоянию и ошибкам, например, если Cluster.addInstance() и Cluster.setPrimaryInstance() обрабатывались параллельно.

Типы блокировки

AdminAPI использует MySQL Locking Service для предоставления следующих типов блокировки:

  • Блокировка чтения или совместная блокировка: разрешает одновременное выполнение некоторых операций, блокируя эксклюзивные операции. Если операция пытается получить общую блокировку, но не может из-за наличия эксклюзивной блокировки, операция прерывается без внесения каких-либо изменений. Если текущая операция имеет общую блокировку, а новая операция требует общей блокировки, новой операции разрешен доступ.

  • Блокировка записи или эксклюзивная блокировка: блокирует выполнение всех других операций до завершения текущей операции и освобождения эксклюзивной блокировки. Если операция пытается получить эксклюзивную блокировку, но не может из-за наличия существующей блокировки, операция прерывается без внесения каких-либо изменений.

Подробнее см.

В следующих таблицах перечислены блокировки для каждой операции 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

В этом разделе перечислены блокировки для dba.operationName операций.

Таблица 6.1 Блокировки операций DBA

Таблица 6.1 Блокировки операций DBA
Операция Тип блокировки

configureInstance()

Эксклюзивная на целевом экземпляре

createCluster()

Эксклюзивная на целевом экземпляре

rebootClusterFromCompleteOutage()

Эксклюзивная на всех доступных узлах кластера.

Если кластер является кластером реплик и является частью ClusterSet, он также присоединяется к ClusterSet в рамках операции. В этом случае операция также получает те же блокировки, что и clusterset.rejoinCluster().

upgradeMetadata()

  • Кластер: Эксклюзивная блокировка на кластере и на целевом экземпляре.

  • ClusterSet: Эксклюзивная блокировка на ClusterSet, первичном кластере и целевом экземпляре.

createReplicaSet()

Эксклюзивная блокировка на целевом экземпляре.

configureReplicaSetInstance()

Эксклюзивная блокировка на целевом экземпляре.

upgradeMetadata()

Эксклюзивная блокировка на ClusterSet и первичном кластере, если топология — ClusterSet, или на кластере, если топология — автономный кластер, и на целевом экземпляре.


Блокировка кластера

В этом разделе перечислены блокировки для операций cluster.operationName.

Таблица 6.2 Блокировки операций кластера

Таблица 6.2 Блокировки операций кластера
Операция Тип блокировки кластера Тип блокировки целевого экземпляра

addInstance()

Эксклюзивная

Эксклюзивная

createClusterSet()

Эксклюзивная

dissolve()

Эксклюзивная

fenceAllTraffic()

Эксклюзивная

fenceWrites()

Эксклюзивная

forceQuorum()

Эксклюзивная

rejoinInstance()

Разделяемая

Эксклюзивная

removeInstance()

Эксклюзивная

Эксклюзивная

rescan()

Эксклюзивная

resetRecoveryAccountsPassword()

Эксклюзивная

setInstanceOption()

Эксклюзивная

За исключением вариантов tag и clusterName.

setOption()

Эксклюзивная

За исключением вариантов tag и clusterName.

setPrimaryInstance()

Эксклюзивная

setupAdminAccount()

Разделяемая

setupRouterAccount()

Разделяемая

switchToMultiPrimaryMode()

Эксклюзивная

switchToSinglePrimaryMode()

Эксклюзивная

unfenceWrites()

Эксклюзивная


Блокировка набора кластеров

В этом разделе перечислены блокировки для операций clusterSet.operationName.

Таблица 6.3 Блокировки операций набора кластеров

Таблица 6.3 Блокировки операций набора кластеров
Операция Тип блокировки набора кластеров Тип блокировки основного кластера Тип блокировки целевого кластера

createReplicaCluster()

Разделяемая

Эксклюзивная на экземпляре, используемом для создания нового кластера реплик.

forcePrimaryCluster()

Эксклюзивная на всех кластерах реплик.

rejoinCluster()

Разделяемая

Разделяемая

Эксклюзивная

removeCluster()

Эксклюзивная.

Эксклюзивная

Эксклюзивная

setOption()

Эксклюзивная

Эксклюзивная

(только если replicationAllowedHost установлено)

setPrimaryCluster()

Эксклюзивная

Эксклюзивная


Блокировка набора реплик InnoDB

В этом разделе перечислены блокировки для операций replicaSet.operationName.

Таблица 6.4 Блокировки операций набора реплик

Таблица 6.4 Блокировки операций набора реплик
Операция Тип блокировки основного экземпляра Тип блокировки целевого экземпляра

forcePrimaryInstance()

Эксклюзивная на целевом экземпляре и на всех доступных членах набора реплик на момент операции.

setPrimaryInstance()

Эксклюзивная

Эксклюзивная на целевом экземпляре и на всех доступных членах набора реплик на момент операции.

addInstance()

Разделяемая

Эксклюзивная

rejoinInstance()

Разделяемая

Эксклюзивная

removeInstance()

Разделяемая

Эксклюзивная

removeRouterMetadata()

Разделяемая


© 2025 Oracle
Licensed under the GPLv2 License.
https://docs.oracle.com/cd/E17952_01/mysql-shell-8.4-en/adminapi-locking.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API