7.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 или более поздней, приводит к этой ошибке. Это вызвано несовпадением значений метаданных с значениями или , сообщаемыми экземплярами. Решение состоит в следующем:
Определите, какой из экземпляров является «“семенным” экземпляром, то есть экземпляром с самым последним набором 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.