Spec-Zone.ru › MySQL Shell 9.2

8.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. Определите, какой из экземпляров является «семенным» (seed), то есть тот, у которого установлено самое последнее значение 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-9.2-en/mysql-innodb-cluster-upgrade-troubleshoot.html

Spec-Zone.ru

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