Spec-Zone.ru › MySQL Shell 9.2

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

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

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

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

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

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

См. для получения дополнительной информации.

В следующих таблицах указаны блокировки для каждой операции AdminAPI:

  • Блокировка DBA: перечисляет блокировки для dba.operationName операций.

  • Блокировка InnoDB кластера: перечисляет блокировки для Cluster.operationName операций.

  • Блокировка InnoDB 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, или на кластере, если топология является автономным кластером, и на целевом экземпляре.


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

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

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

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

addInstance()

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

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

createClusterSet()

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

dissolve()

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

execute()

Совместная

fenceAllTraffic()

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

fenceWrites()

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

forceQuorum()

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

rejoinInstance()

Совместная

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

removeInstance()

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

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

rescan()

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

resetRecoveryAccountsPassword()

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

setInstanceOption()

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

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

setOption()

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

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

setPrimaryInstance()

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

setupAdminAccount()

Совместная

setupRouterAccount()

Совместная

switchToMultiPrimaryMode()

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

switchToSinglePrimaryMode()

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

unfenceWrites()

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


Блокировка InnoDB ClusterSet

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

Таблица 6.3 Блокировки операций ClusterSet

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

createReplicaCluster()

Совместная

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

execute()

Совместная

Совместная

Совместная на всех кластерах реплик.

forcePrimaryCluster()

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

rejoinCluster()

Совместная

Совместная

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

removeCluster()

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

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

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

setOption()

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

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

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

setPrimaryCluster()

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

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


Блокировка InnoDB ReplicaSet

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

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

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

addInstance()

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

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

dissolve()

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

execute()

Разделяемая

forcePrimaryInstance()

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

rejoinInstance()

Разделяемая

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

removeInstance()

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

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

removeRouterMetadata()

Разделяемая

rescan()

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

setInstanceOption()

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

setOption()

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

setPrimaryInstance()

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

setupAdminAccount()

Разделяемая

setupRouterAccount()

Разделяемая


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

Spec-Zone.ru

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