Увійти Реєстрація
Блог Серії
Кар'єра
Вакансії Компанії
Навчання
Документація Співбесіди Тестування Відео
Екосистема
Пакети Ресурси Проєкти Інструменти Події
Інше
Про нас Реклама

Що варто перевірити перед оновленням MySQL 8.0 до 8.4 LTS?

MySQL 8.4 - перша LTS-версія в новій моделі випусків: LTS отримують лише виправлення протягом довгого часу, а нові можливості виходять у проміжних Innovation-версіях (9.x). Оновлення 8.0 → 8.4 підтримується напряму. Відкат до 8.0 на тих самих файлах не підтримується - лише з бекапу.

Що ламається найчастіше:

1. mysql_native_password вимкнено за замовчуванням. Облікові записи зі старим плагіном після оновлення не увійдуть. Перед оновленням:

SELECT user, host FROM mysql.user WHERE plugin = 'mysql_native_password';
ALTER USER 'app'@'%' IDENTIFIED WITH caching_sha2_password BY '...';

Тимчасово плагін можна ввімкнути (mysql_native_password = ON), але в MySQL 9 його видалено.

2. Видалено старий синтаксис реплікації. CHANGE MASTER TO, START SLAVE, SHOW SLAVE STATUS, SHOW MASTER STATUS, RESET MASTER і опції MASTER_* більше не існують. Треба оновити скрипти, системи моніторингу, Ansible-ролі, інструменти перемикання:

Було Стало
CHANGE MASTER TO MASTER_HOST=... CHANGE REPLICATION SOURCE TO SOURCE_HOST=...
SHOW SLAVE STATUS SHOW REPLICA STATUS
SHOW MASTER STATUS SHOW BINARY LOG STATUS
RESET MASTER RESET BINARY LOGS AND GTIDS

3. Видалено утиліту mysqlpump - замінити на mysqldump чи утиліти MySQL Shell.

4. Змінено значення за замовчуванням InnoDB - продуктивність може змінитися навіть без змін конфігурації:

  • innodb_adaptive_hash_index: ON → OFF;
  • innodb_change_buffering: all → none;
  • innodb_io_capacity: 200 → 10000;
  • innodb_log_buffer_size: 16 МБ → 64 МБ;
  • temptable_max_ram: 1 ГБ → 3% пам'яті (у межах 1-4 ГБ).

Ці зміни відображають сучасні SSD, але для навантажень, що виграють від адаптивного хеш-індексу, варто порівняти продуктивність до і після.

5. Застарілі й видалені змінні в my.cnf. Сервер не стартує з невідомою змінною. Перевірити конфігурацію на тестовому інстансі.

Процес оновлення:

  1. перевірка сумісності - util.checkForServerUpgrade() з MySQL Shell: знаходить застарілі плагіни, синтаксис, проблеми схеми;
  2. оновлення на копії продакшену, прогін тестів застосунку і порівняння планів найважливіших запитів;
  3. на продакшені - спершу репліки (новіша репліка може реплікувати зі старішого джерела, навпаки - ні), потім перемикання джерела на оновлену репліку;
  4. бекап безпосередньо перед оновленням і план відкату (повернення на стару репліку).

Для Laravel сама версія MySQL майже не важлива: драйвер pdo_mysql сучасного PHP підтримує все потрібне. Але варто переконатися, що в CI використовується та ж версія MySQL, що й у продакшені.

Докладніше в документації: Що нового в MySQL 8.4

Схожі питання