Spec-Zone.ru › MySQL Shell 9.2

6.12 Выполнение SQL на топологиях

Функция execute() позволяет выполнять SQL-запросы и операторы на всех или выбранных членах топологии.

Важно

Эту функцию следует использовать с осторожностью. Например, изменение значения требуемой системной переменной на нескольких членах может привести к тому, что управляемая топология станет непригодной для использования. Также эта функция приобретает блокировки AdminAPI, что означает, что некоторые команды AdminAPI, такие как addInstance(), будут заблокированы во время выполнения этой функции.

      topologyType.execute(cmd, instances, options)
    
  • topologyType: представляет объект Cluster, ClusterSet или ReplicaSet.

  • cmd: один MySQL-запрос или оператор.

  • instances: ключевое слово или список адресов, где выполняется команда.

    • all/a: все доступные экземпляры, включая Read Replicas, в кластерах и наборах кластеров.

    • primary/p: один из следующих вариантов:

      • первичный экземпляр в кластере с одним первичным экземпляром

      • все первичные экземпляры в кластере с несколькими первичными экземплярами

      • первичный экземпляр первичного кластера набора кластеров

      • первичный экземпляр в ReplicaSet

    • secondaries/s:

      • вторичные экземпляры только одного первичного кластера. Не включают Read Replicas.

      • вторичные экземпляры всех кластеров в наборе кластеров.

      • вторичные экземпляры ReplicaSet.

    • read-replicas/rr: экземпляры Read Replica кластера или всех кластеров в наборе кластеров.

    Следующий пример демонстрирует, как выполнить SELECT VERSION() на определённых членах кластера:

    cluster.execute("SELECT VERSION();", ["host:4100", "host:4200"])
            
  • options:

    • exclude: указать экземпляры для исключения. Это может быть любое ключевое слово, кроме all, или список адресов.

      Следующий пример демонстрирует, как получить значения переменных и из всех членов, кроме Read Replicas:

      cluster.execute("SHOW VARIABLES WHERE VARIABLE_NAME IN ('REPORT_HOST', 'REPORT_PORT');", "a", {exclude: "rr"})
              
    • timeout: указывает количество секунд, после которого текущий оператор отменяется. Таймаут используется только для операторов SELECT и блокировок, происходящих от операторов LOCK TABLE.

    • dryRun: если true, имитирует выполнение команды. Команда никогда не выполняется на целевых экземплярах. Сессии устанавливаются на целевые экземпляры, гарантируя возможность их контакта.

Результат возвращается в формате JSON.

Простой SQL-оператор , выполненный на первичном экземпляре кластера, возвращает следующее:

cluster.execute("show databases;", "primary")
Statement will be executed at: 'IPAddress:4100'

Executing statement on instances (press Ctrl+C to cancel)... finished.
[
    {
        "executionTime": 0.0006606,
        "instance": {
            "address": "IPAddress:4100",
            "version": "9.0.0"
        },
        "output": [
            {
                "columnNames": [
                    "Database"
                ],
                "rows": [
                    [
                        "information_schema"
                    ],
                    [
                        "mysql"
                    ],
                    [
                        "mysql_innodb_cluster_metadata"
                    ],
                    [
                        "performance_schema"
                    ],
                    [
                        "sys"
                    ]
                ]
            }
        ]
    }
]
    

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

Spec-Zone.ru

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