
Основные шаги, которые мы рассмотрим, следующие:
- Подготовка к обновлению путем резервного копирования данных и проверки конфигурации
- Установка новых репозиториев 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!