Spec-Zone.ru › MySQL Shell 8.4

7.10.2 Устранение неполадок при обновлении кластера InnoDB

В этом разделе рассматривается устранение неполадок процесса обновления.

Обработка изменений имени хоста

MySQL Shell использует значение хоста предоставленных параметров подключения в качестве целевого имени хоста для операций AdminAPI, а именно для регистрации экземпляра в метаданных (для операций dba.createCluster() и Cluster.addInstance()). Однако фактический хост, используемый для параметров подключения, может не соответствовать хосту, используемому или сообщаемому Group Replication, который использует значение системной переменной , когда она определена (иначе говоря, это не NULL), в противном случае используется значение . Поэтому AdminAPI теперь следует той же логике для регистрации целевого экземпляра в метаданных и в качестве значения по умолчанию для переменной на экземплярах, вместо использования значения хоста из параметров подключения экземпляра. Когда переменная установлена в пустое значение, Group Replication использует пустое значение для хоста, но AdminAPI (например, в командах, таких как dba.checkInstanceConfiguration(), dba.configureInstance(), dba.createCluster() и так далее) сообщает имя хоста как используемое значение, что не соответствует значению, сообщаемому Group Replication. Если для системной переменной установлено пустое значение, генерируется ошибка.

Для кластера, созданного с помощью версии MySQL Shell, более ранней, чем 8.0.16, попытка перезапуска кластера после полной остановки, выполненная с помощью версии 8.0.16 или более поздней, приводит к этой ошибке. Это вызвано несовпадением значений метаданных с значениями или , сообщаемыми экземплярами. Решение состоит в следующем:

  1. Определите, какой из экземпляров является «“семенным” экземпляром, то есть экземпляром с самым последним набором GTID. Операция dba.rebootClusterFromCompleteOutage() определяет, является ли экземпляр семенным, и операция генерирует ошибку, если текущая сессия не подключена к самому последнему экземпляру.

  2. Установите системную переменную в значение, хранящееся в схеме метаданных для целевого экземпляра. Это значение представляет собой пару hostname:port, используемую при определении экземпляра при создании кластера. Значение можно получить, выполнив запрос к таблице mysql_innodb_cluster_metadata.instances.

    Например, предположим, что кластер был создан с помощью следующей последовательности команд:

    mysql-js> \c clusterAdmin@localhost:3306
    mysql-js> dba.createCluster("myCluster")
    

    Следовательно, значение имени хоста, хранящееся в метаданных, равно «“localhost”», и поэтому должно быть установлено в «“localhost”» на семенном экземпляре.

  3. Перезапустите кластер, используя только семенной экземпляр. При интерактивных запросах не добавляйте оставшиеся экземпляры в кластер.

  4. Используйте Cluster.rescan() для добавления других экземпляров обратно в кластер.

  5. Удалите семенной экземпляр из кластера.

  6. Остановите mysqld на семенном экземпляре и либо удалите принудительное значение (шаг 2), либо замените его значением, ранее сохраненным в метаданных.

  7. Перезапустите семенной экземпляр и добавьте его обратно в кластер, используя Cluster.addInstance().

Это позволяет выполнить плавное и полное обновление кластера до последней версии MySQL Shell. Другой вариант, зависящий от конкретного случая использования, заключается в простом установке значения на всех членах кластера, соответствующего значению, зарегистрированному в схеме метаданных при создании кластера.

© 2025 Oracle
Licensed under the GPLv2 License.
https://docs.oracle.com/cd/E17952_01/mysql-shell-8.4-en/mysql-innodb-cluster-upgrade-troubleshoot.html

Spec-Zone.ru

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