Назад | Перейти на главную страницу

Не удается обновить экземпляр RDS с MySQL 5.7.x до 8.0.x

Мне нужно восстановить данные из старого снимка 5.6.x. Немного повозившись, мне удалось восстановить моментальный снимок 5.6.x на экземпляре m3.xlarge (любой тип экземпляра, кроме m3. *, Работать не будет). Затем я успешно обновился с 5.6.x до последней версии 5.7.x.

Следующим шагом был переход с 5.7.x на 8.0.x. Каждый раз, когда я пытался выполнить обновление, RDS заявлял, что это «Обновление», но быстро возвращал состояние «Доступен» и возвращался к 5.7.x без видимых ошибок в консоли.

Как мне обновить его до 8.0.x?

  1. Под Logs & events, открыто PrePatchCompatibility.log.
  2. Прокрутите до самого низа, где указано количество ошибок. Скорее всего, вы увидите, что были ошибки.
  3. Прокрутите назад, пока не найдете ошибки. В моем случае я видел:

    16) Несоответствия схемы в результате удаления или повреждения файла
    В следующих таблицах показаны признаки того, что каталог данных таблицы или файл frm был удален / поврежден. Пожалуйста, проверьте журналы сервера, проверьте datadir, чтобы обнаружить проблему и исправить ее перед обновлением some_db - присутствует в таблице INNODB_SYS_TABLES INFORMATION_SCHEMA, но отсутствует в таблице TABLES

  4. Это не особо полезная ошибка. Эта ошибка должна показывать что-то вроде some_db.some_table, но в списке есть только база данных.
  5. Бегать: select * from information_schema.innodb_sys_tables where name like '%#%'; В моем случае была указана одна таблица: some_db/#sql-ib1408.
  6. По-видимому, это может произойти, если alter table заявление прервано. К сожалению, бег drop table `#sql-ib1408`; не работает. Хотя большинство ответов по этой ссылке переформулируйте проблему, а не предложите решение, один намекает на возможное исправление.
  7. Бегать: drop table `#mysql50##sql-ib1408`;, заменив имя таблицы своим. В #mysql50# префикс сообщает MySQL не пытаться кодировать имя таблицы; обычно # будет закодирован.
  8. Повторите попытку обновления.

Обратите внимание, что существование #sql-ib* Таблица указывает на то, что некоторые из ваших данных могут быть повреждены. Сопоставьте числовой идентификатор в #sql-ib имя таблицы в TABLE_ID столбец INNODB_SYS_TABLES чтобы определить, какая таблица была затронута. Обязательно проверьте свои данные на целостность, прежде чем продолжить.