В этой статье я покажу вам, как перенести базу данных WordPress с MariaDB на CentOS на настоящую MySQL .
Зачем переходить на MySQL 8.0?
MySQL 8.0 содержит множество новых функций. Эти функции делают базу данных MySQL намного более безопасной (например, новая аутентификация, безопасные политики паролей и управление) и отказоустойчивой (новый словарь данных), более мощной (новый дизайн журнала повторов, меньше конфликтов, экстремальное масштабирование InnoDB,...), улучшенное управление операциями (роли SQL, мгновенное добавление столбцов), множество (очень много!) улучшений репликации и встроенная групповая репликация и, наконец, много интересных вещей, таких как новое хранилище документов, новая оболочка MySQL и кластер MySQL InnoDB.
Исходная ситуация
Итак, прежде чем мы выполним обновление, давайте проверим, что у нас есть:
> select version(); +----------------+ | version() | +----------------+ | 5.5.60-MariaDB | +----------------+ 1 row in set (0.01 sec)
Давайте проверим таблицы, которые у нас также есть:
> show tables; +-----------------------+ | Tables_in_wp | +-----------------------+ | wp_commentmeta | | wp_comments | | wp_links | | wp_options | | wp_postmeta | | wp_posts | | wp_term_relationships | | wp_term_taxonomy | | wp_termmeta | | wp_terms | | wp_usermeta | | wp_users | +-----------------------+ 12 rows in set (0.00 sec)
А в /var/lib/mysql
мы видим:
[root@mysql4 mysql]# ls -l total 28704 -rw-rw----. 1 mysql mysql 16384 Mar 25 20:08 aria_log.00000001 -rw-rw----. 1 mysql mysql 52 Mar 25 20:08 aria_log_control -rw-rw----. 1 mysql mysql 18874368 Mar 25 20:12 ibdata1 -rw-rw----. 1 mysql mysql 5242880 Mar 25 20:12 ib_logfile0 -rw-rw----. 1 mysql mysql 5242880 Mar 25 20:08 ib_logfile1 drwx------. 2 mysql mysql 4096 Mar 25 20:08 mysql srwxrwxrwx. 1 mysql mysql 0 Mar 25 20:08 mysql.sock drwx------. 2 mysql mysql 4096 Mar 25 20:08 performance_schema drwx------. 2 mysql mysql 6 Mar 25 20:08 test drwx------. 2 mysql mysql 4096 Mar 25 20:11 wp [root@mysql4 mysql]# ls -l wp total 164 -rw-rw----. 1 mysql mysql 65 Mar 25 20:08 db.opt -rw-rw----. 1 mysql mysql 8688 Mar 25 20:11 wp_commentmeta.frm -rw-rw----. 1 mysql mysql 13380 Mar 25 20:11 wp_comments.frm -rw-rw----. 1 mysql mysql 13176 Mar 25 20:11 wp_links.frm -rw-rw----. 1 mysql mysql 8698 Mar 25 20:11 wp_options.frm -rw-rw----. 1 mysql mysql 8682 Mar 25 20:11 wp_postmeta.frm -rw-rw----. 1 mysql mysql 13684 Mar 25 20:11 wp_posts.frm -rw-rw----. 1 mysql mysql 8682 Mar 25 20:11 wp_termmeta.frm -rw-rw----. 1 mysql mysql 8666 Mar 25 20:11 wp_term_relationships.frm -rw-rw----. 1 mysql mysql 8668 Mar 25 20:11 wp_terms.frm -rw-rw----. 1 mysql mysql 8768 Mar 25 20:11 wp_term_taxonomy.frm -rw-rw----. 1 mysql mysql 8684 Mar 25 20:11 wp_usermeta.frm -rw-rw----. 1 mysql mysql 13064 Mar 25 20:11 wp_users.frm
Мы видим, что у нас есть файлы .frm и одно табличное пространство InnoDB: ibdata1 .
> show global variables like 'innodb_file_per_table'; +-----------------------+-------+ | Variable_name | Value | +-----------------------+-------+ | innodb_file_per_table | OFF | +-----------------------+-------+
Мы также можем видеть некоторые файлы aria.
Теперь пришло время перейти на официальный и оригинальный MySQL. Конечно, мы хотели бы использовать MySQL 8.0, но версия MariaDB по умолчанию в CentOS очень старая, а для MySQL 8.0 требуется более новая версия файлов InnoDB (журналы отмены, …). Для этого мы перейдем сначала к последней версии MySQL 5.7, а затем к MySQL 8.0.
MySQL 5.7
Первый шаг — установить репозиторий yum для сообщества MySQL :
# yum install -y dev.mysql.com/get/mysql80-community-release-el7-2.noarch.rpm
Теперь мы можем правильно остановить систему, а затем обновить пакеты.
При обновлении системы MySQL я всегда рекомендую перед остановкой
mysqld
установитьinnodb_fast_shutdown
значение 0 . Это заставит грязные страницы в пуле буферов InnoDB быть записанными на диск и обойти InnoDB Recovery из журналов отмены в процессе загрузки mysqld.
> set global innodb_fast_shutdown=0; Query OK, 0 rows affected (0.01 sec) # systemctl stop mariadb
И теперь мы можем установить MySQL 5.7 (мы включаем репозиторий 5.7 и отключаем репозиторий 8.0):
# yum install -y mysql-community-server mysql-community-client \ --enablerepo=mysql57-community --disablerepo=mysql80-community
Мы видим, что MySQL 5.7 теперь заменяет старую MariaDB:
... Installed: mysql-community-client.x86_64 0:5.7.25-1.el7 mysql-community-libs.x86_64 0:5.7.25-1.el7 mysql-community-libs-compat.x86_64 0:5.7.25-1.el7 mysql-community-server.x86_64 0:5.7.25-1.el7 Dependency Installed: mysql-community-common.x86_64 0:5.7.25-1.el7 Replaced: mariadb.x86_64 1:5.5.60-1.el7_5 mariadb-libs.x86_64 1:5.5.60-1.el7_5 mariadb-server.x86_64 1:5.5.60-1.el7_5 Complete!
Мы можем mysqld
запустить mysql_upgrade
процесс:
# systemctl start mysqld # mysql_upgrade
Вы должны получить некоторые нефатальные ошибки, связанные с поврежденными таблицами, которые mysql_upgrade
исправляются.
После любого
mysql_upgrade
всегда рекомендуется перезапустить MySQL
Вы можете посетить свой сайт worpress, он отлично работает:
MySQL 8.0
утилита проверки обновлений
Следующий шаг не является обязательным, но настоятельно рекомендуется. Перед обновлением до MySQL 8.0 вы должны установить новую оболочку MySQL и увидеть новый инструмент проверки обновлений в действии!
# yum install -y mysql-shell
Обратите внимание, что вы всегда должны использовать последнюю версию MySQL Shell независимо от вашей версии MySQL. В данном случае я использую MySQL 5.7.25 и MySQL Shell 8.0.15.
# mysqlsh root@localhost MySQL JS > util.checkForServerUpgrade() ... 1) Usage of old temporal type No issues found 2) Usage of db objects with names conflicting with reserved keywords in 8.0 No issues found 3) Usage of utf8mb3 charset No issues found .... Errors: 0 Warnings: 1 Notices: 0 No fatal errors were found that would prevent an upgrade, but some potential issues were detected. Please ensure that the reported issues are not significant before upgrading.
У нас нет никаких несовместимостей с MySQL 8.0, поэтому мы можем без проблем установить его.
Установка MySQL 8.0
Теперь, если вы хотите продолжить обновление до MySQL 8.0. Просто остановитесь снова mysqld
, как и раньше, и установите двоичные файлы MySQL 8.0:
# mysql -e 'set global innodb_fast_shutdown=0'; # systemctl stop mysqld
Запустим установку новых бинарников:
# yum upgrade -y mysql-community-server mysql-community-client ... Updated: mysql-community-client.x86_64 0:8.0.15-1.el7 mysql-community-server.x86_64 0:8.0.15-1.el7 Dependency Updated: mysql-community-common.x86_64 0:8.0.15-1.el7 mysql-community-libs.x86_64 0:8.0.15-1.el
Теперь мы можем снова запустить MySQL и запустить mysql_upgrade
(больше не требуется с 8.0.16):
# systemctl start mysqld # mysql_upgrade
Наконец-то мы можем перезапуститься mysqld
в последний раз и снова наслаждаться нашим сайтом WordPress с использованием MySQL 8.0!
Окончательная проверка
Теперь мы также можем проверить каталог данных MySQL и увидеть, что теперь файлы .frm исчезли, поскольку MySQL 8.0 использует новый словарь данных:
# ls -lh wp/ total 656K -rw-r-----. 1 mysql mysql 192K Mar 25 21:13 wp_comments.ibd -rw-r-----. 1 mysql mysql 128K Mar 25 21:13 wp_links.ibd -rw-r-----. 1 mysql mysql 176K Mar 25 21:15 wp_posts.ibd -rw-r-----. 1 mysql mysql 160K Mar 25 21:13 wp_users.ibd
Мы можем заметить, что не все таблицы имеют собственное табличное пространство. Это можно проверить с помощью следующего запроса:
mysql> select NAME, ROW_FORMAT, SPACE_TYPE from INNODB_TABLES where name like 'wp/%'; +--------------------------+------------+------------+ | NAME | ROW_FORMAT | SPACE_TYPE | +--------------------------+------------+------------+ | wp/wp_commentmeta | Compact | System | | wp/wp_comments | Dynamic | Single | | wp/wp_links | Dynamic | Single | | wp/wp_options | Compact | System | | wp/wp_postmeta | Compact | System | | wp/wp_posts | Dynamic | Single | | wp/wp_term_relationships | Compact | System | | wp/wp_term_taxonomy | Compact | System | | wp/wp_termmeta | Compact | System | | wp/wp_terms | Compact | System | | wp/wp_usermeta | Compact | System | | wp/wp_users | Dynamic | Single | +--------------------------+------------+------------+ 12 rows in set (0.24 sec)
Резюме
Чтобы перейти с MariaDB на MySQL, вам необходимо выполнить следующие простые шаги:
- остановить
mysqld
процесс MariaDB - установить бинарные файлы 5.7
- запустить
mysqld
и запуститьmysqld_upgrade
- запустить утилиту проверки обновлений MySQL Shell
- останавливаться
mysqld
- обновить бинарники до MySQL 8.0
- запустить
mysqld
и запуститьmysql_upgrade
и перезапуститьmysqld
, если <8.0.16 - просто начните
mysqld
, если >= 8.0.16