Обновление MySQL 5.7 до 8.0 на CentOS/RHEL

Обновление основных версий MySQL может быть сложным процессом из-за потенциальных проблем совместимости и изменений конфигурации между версиями. В этом руководстве мы рассмотрим полный процесс обновления с MySQL 5.7 до 8.0 на серверах CentOS/RHEL 7/8.

Основные шаги, которые мы рассмотрим, следующие:

  • Подготовка к обновлению путем резервного копирования данных и проверки конфигурации
  • Установка новых репозиториев MySQL 8.0
  • Остановка и удаление старых пакетов MySQL 5.7
  • Установка новых пакетов MySQL 8.0
  • Запуск MySQL 8.0 и выполнение шагов после установки
  • Проверка обновления и внесение необходимых изменений в конфигурацию

Следование этому процессу поможет обеспечить плавное и успешное обновление до MySQL 8.0.

Предварительные условия

Перед началом процесса обновления убедитесь, что ваша система соответствует следующим предварительным требованиям:

  • Операционная система CentOS/RHEL 7 или 8
  • Существующая установка MySQL 5.7 из стандартного репозитория CentOS/RHEL
  • Резервное копирование всех важных данных MySQL
  • У вас есть окно обслуживания, чтобы перевести MySQL в автономный режим на время обновления
  • У вас есть права root или sudo на сервере для установки программного обеспечения

Шаг 1 — Резервное копирование и подготовка

Чтобы избежать потери данных, очень важно создать резервные копии перед началом процесса обновления. Ниже перечислены основные шаги по созданию резервных копий:

Резервное копирование данных MySQL

Используйте mysqldump для создания логических резервных копий всех баз данных:

$ mysqldump --all-databases --routines --events > mysql_backup.sql

Храните этот файл резервной копии в безопасном месте вне сервера.

В качестве дополнительной защиты можно также создавать бинарные резервные копии, например снимки файловой системы или снимки LVM.

Обзор и конфигурация резервного копирования

Основными файлами конфигурации MySQL, которые могут потребовать обновления после обновления, являются:

  • /etc/my.cnf — Главный файл конфигурации MySQL
  • /etc/my.cnf.d/ — Содержит фрагменты конфигурации, которые переопределяют my.cnf
  • /var/lib/mysql/ — Содержит файлы баз данных

Просмотрите эти файлы и создайте их резервные копии в безопасном месте. Обратите особое внимание на любые пользовательские настройки, такие как пути к файлам журнала, распределение памяти и т. д.

После обновления нам нужно будет объединить все необходимые пользовательские настройки с новыми файлами.

Запись всех пользователей MySQL

Обновление может повлиять на учетные записи и разрешения пользователей. Получите список всех текущих пользователей, выполнив команду:

mysql> SELECT User, Host FROM mysql.user;

Это позволит вам воссоздать или исправить пользователей, если это потребуется после обновления.

Проверка и подтверждение репликации (если используется)

Если используется репликация MySQL, перед началом обновления убедитесь, что репликация исправна и все серверы полностью синхронизированы.

Выполните несколько тестовых записей и чтений на ведущем и ведомом серверах для проверки. Решите все проблемы с репликацией, прежде чем продолжить.

Шаг 2 — Установка репозиториев MySQL 8.0

Теперь мы готовы установить новые репозитории MySQL 8.0. Это позволит нам установить последние версии MySQL 8.0 с помощью yum.

Сначала установите ключ MySQL GPG:

$ rpm --import https://repo.mysql.com/RPM-GPG-KEY-mysql-2023

Это позволит аутентифицировать пакеты RPM от MySQL.

Далее установите пакет MySQL community repo:

$ yum install https://repo.mysql.com/mysql80-community-release-el7-3.noarch.rpm

Это позволит установить конфигурацию MySQL 8.0 yum repo.

Обновите данные репо:

$ yum makecache

Теперь ваша система CentOS/RHEL может установить MySQL 8.0.

Шаг 3 — Остановка MySQL 5.7 и удаление пакетов

Теперь нам нужно правильно остановить MySQL 5.7 и удалить старые файлы пакетов.

Остановка службы MySQL

Остановите службу MySQL:

$ systemctl stop mysqld.service

Убедитесь, что она закрылась правильно:

$ systemctl status mysqld.service

Удаление старых пакетов MySQL

Далее с помощью yum удалите только пакеты MySQL 5.7:

$ yum remove mysql-community-client-5.7* mysql-community-common-5.7* mysql-community-libs-5.7* mysql-community-server-5.7* 

При этом останутся файлы конфигурации, которые мы очистим позже.

Шаг 4 — Установка MySQL 8.0

Удалив старую версию, мы можем установить MySQL 8.0:

$ yum install mysql-community-server

Это позволит установить последние версии сервера, клиента, общих библиотек и инструментов MySQL 8.0.

По окончании установки MySQL 8.0 будет установлен, но еще не полностью настроен.

Шаг 5 — Запустите MySQL 8.0 и выполните mysql_upgrade

Следующие шаги — запуск MySQL 8.0 и запуск mysql_upgrade для внесения необходимых изменений в новую версию.

Запуск MySQL

Запустите новую службу MySQL 8.0:

$ systemctl start mysqld.service

Убедитесь в успешном запуске:

$ systemctl status mysqld.service

Служба должна быть запущена, и теперь вы можете подключиться к ней локально.

Запустите mysql_upgrade

Инструмент mysql_upgrade проверит ваши базы данных и внесет все необходимые изменения, например, изменит формат словаря данных. Это ключевая часть процесса обновления.

Подключитесь к MySQL и запустите его:

$ mysql_upgrade -u root -p 

Введите пароль root при появлении запроса. В результате будут запущены все обновления, необходимые для совместимости с 8.0.

По завершении запустите эту программу, чтобы убедиться, что словарь данных обновлен:

mysql> SHOW VARIABLES LIKE 'dd_version';

Должно появиться значение типа ‘2’ для MySQL 8.0.

Просмотр журнала ошибок

Просмотрите последний журнал ошибок MySQL по адресу /var/log/mysqld.log на предмет наличия проблем, о которых сообщалось при запуске или обновлении mysql_upgrade.

Устраните все ошибки, прежде чем продолжить работу.

На этом этапе MySQL 8.0 должен успешно работать.

Шаг 6 — Обновление конфигурационных файлов

Далее нам нужно обновить все конфигурационные файлы и настройки для MySQL 8.0.

Обновление my.cnf

Основной файл my.cnf, скорее всего, устарел и в нем отсутствуют новые опции, специфичные для версии 8.0.

Создайте новую версию по умолчанию:

$ mysqld --initialize --user=mysql --basedir=/usr --datadir=/var/lib/mysql

Это создаст новый my.cnf в каталоге /var/lib/mysql с настройками по умолчанию 8.0.

Скопируйте его в /etc, заменив старый файл:

$ cp /var/lib/mysql/my.cnf /etc/my.cnf

Откройте новый файл /etc/my.cnf и повторно примените все пользовательские настройки, которые вы ранее использовали, например:

  • Пользовательские настройки памяти и движка
  • Настройки репликации
  • Любые другие настройки

После завершения работы сохраните обновленный файл.

Обновление настроек App Armor

Если вы используете систему безопасности AppArmor, ей необходимы обновленные настройки для MySQL 8.0:

$ aa-disable /etc/apparmor.d/usr.sbin.mysqld

Затем обновите их:

$ echo "alias /etc/apparmor.d/usr.sbin.mysqld -> /etc/apparmor.d/disable/" | tee -a /etc/apparmor.d/usr.sbin.mysqld

Это отключит старые правила AppArmor и будет использовать правила по умолчанию.

Перезапустите MySQL и проверьте конфигурацию

Перезапустите MySQL, чтобы загрузить новые настройки my.cnf:

$ systemctl restart mysqld.service

Проверьте правильность применения пользовательских настроек:

mysql> SHOW VARIABLES;

Убедитесь, что память, механизм хранения и другие настройки соответствуют ожиданиям.

Также проверьте, что:

mysql> SELECT @@global.innodb_default_row_format;

Указывается ‘dynamic’, который требуется для MySQL 8.0.

Настройте my.cnf, если какие-либо параметры не были применены правильно.

Шаг 7 — Создание новых учетных записей пользователей

Если в MySQL 5.7 у вас были пользовательские учетные записи, то в 8.0 их нужно будет создать заново.

Проверьте список пользователей, который вы захватили ранее, и заново создайте каждую учетную запись, используя новый синтаксис CREATE USER:

# Create app user
mysql> CREATE USER 'myapp'@'localhost' IDENTIFIED BY 'password'; 
# Grant permissions 
mysql> GRANT SELECT,INSERT,UPDATE,DELETE ON myapp.* TO 'myapp'@'localhost';

Проверьте подключение к каждому воссозданному пользователю, чтобы убедиться, что разрешения работают.

Возможно, вам также понадобится принудительное истечение срока действия пароля:

mysql> ALTER USER 'user'@'host' PASSWORD EXPIRE;

Это потребует от пользователей сбросить пароль при первом входе в систему.

Шаг 8 — Очистка старой установки

После завершения обновления мы можем удалить все оставшиеся артефакты из старой установки MySQL 5.7:

Удаление файлов журналов

Очистите старые файлы журналов, начиная с версии 5.7:

$ rm /var/log/mysqld.log*

Удаление файлов конфигурации

Удалите все старые неиспользуемые файлы конфигурации версии 5.7:

$ rm /etc/my.cnf.d/*mysql57*

Удалите каталоги данных

Если вы не используете существующие каталоги данных, удалите каталог данных 5.7:

$ rm -rf /var/lib/mysql57

Это поможет устранить путаницу с несколькими каталогами данных.

Перезапуск и мониторинг MySQL

Перезапустите MySQL в последний раз:

$ systemctl restart mysqld.service 

Некоторое время следите за журналами и производительностью, чтобы убедиться в стабильном поведении.

Обновление до версии 8.0 полностью завершено!

Заключение

Обновление с MySQL 5.7 до 8.0 требует тщательного планирования, подготовки и тестирования. Ключевыми этапами являются:

  • Резервное копирование всех данных и проверка существующей установки
  • Установите новые репозитории MySQL 8.0
  • Остановите и удалите старые пакеты 5.7
  • Установите выпуски MySQL 8.0
  • Запустите mysql_upgrade для обновления системных баз данных
  • Обновление конфигурационных файлов, таких как my.cnf
  • Пересоздайте учетные записи пользователей и повторно запустите тесты
  • Очистка старых артефактов установки и журналов

Методичное следование этому процессу поможет избежать проблем и обеспечить плавный переход на последнюю версию MySQL. Тщательное тестирование позволяет убедиться в совместимости приложений с новым поведением.

Теперь ваша инфраструктура MySQL обновлена с учетом последних возможностей и улучшений MySQL 8.0!

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *