8.10.2 Устранение неполадок при обновлении кластера InnoDB
В этом разделе рассматривается устранение неполадок в процессе обновления.
Обработка изменений имени хоста
MySQL Shell использует значение хоста из предоставленных параметров подключения в качестве целевого имени хоста для операций AdminAPI, а именно для регистрации экземпляра в метаданных (для операций dba.createCluster() и ). Однако фактический хост, используемый для параметров подключения, может не совпадать с хостом, используемым или сообщаемым Group Replication, который использует значение системной переменной при её определении (иначе говоря, это не Cluster.addInstance()NULL), в противном случае используется значение . Поэтому AdminAPI теперь следует той же логике для регистрации целевого экземпляра в метаданных и в качестве значения по умолчанию для переменной на экземплярах, вместо использования значения хоста из параметров подключения экземпляра. Когда переменная установлена в пустое значение, Group Replication использует пустое значение для хоста, но AdminAPI (например, в командах типа dba.checkInstanceConfiguration(), dba.configureInstance(), dba.createCluster() и т.д.) сообщает имя хоста как используемое значение, что не соответствует значению, сообщаемому Group Replication. Если для системной переменной установлено пустое значение, генерируется ошибка.
Для кластера, созданного с помощью версии MySQL Shell, предшествующей 8.0.16, попытка перезагрузки кластера после полного отказа, выполненная с помощью версии 8.0.16 или более поздней, приводит к этой ошибке. Это вызвано несовпадением значений метаданных со значениями или , сообщаемыми экземплярами. В качестве решения необходимо:
Определите, какой из экземпляров является «семенным» (seed), то есть тот, у которого установлено самое последнее значение GTID. Операция
dba.rebootClusterFromCompleteOutage()определяет, является ли экземпляр семенным, и операция генерирует ошибку, если текущая сессия не подключена к самому обновленному экземпляру.-
Установите системную переменную в значение, хранящееся в схеме метаданных для целевого экземпляра. Это значение представляет собой пару
hostname:port, используемую при определении экземпляра при создании кластера. Это значение можно получить, запросив таблицуmysql_innodb_cluster_metadata.instances.Например, предположим, что кластер был создан с помощью следующей последовательности команд:
mysql-js>
\c clusterAdmin@localhost:3306mysql-js>dba.createCluster("myCluster")Следовательно, значение имени хоста, хранящееся в метаданных, равно «localhost», и поэтому на семенном экземпляре должно быть установлено значение «localhost».
Перезапустите кластер, используя только семенной экземпляр. Не добавляйте остальные экземпляры в кластер на этапе интерактивных запросов.
Воспользуйтесь
для добавления других экземпляров обратно в кластер.Cluster.rescan()Удалите семенной экземпляр из кластера.
Остановите mysqld на семенном экземпляре и либо удалите принудительное значение (шаг 2), либо замените его значением, ранее сохраненным в значении метаданных.
Перезапустите семенной экземпляр и добавьте его обратно в кластер, используя
Cluster.addInstance()
Это позволяет выполнить плавное и полное обновление кластера до последней версии MySQL Shell. Другой вариант, зависящий от сценария использования, заключается в простом установлении значения на всех членах кластера, чтобы оно соответствовало значению, зарегистрированному в схеме метаданных при создании кластера.
© 2025 Oracle
Licensed under the GPLv2 License.