В этой статье мы покажем вам, как перенести вашу базу данных WordPress из MariaDB на CentOS в реальный MySQL.
MySQL 8.0 приносит много новых функций. Эти функции делают базу данных MySQL намного более безопасной (например, новая аутентификация, политики и управление безопасными паролями,…) и отказоустойчивыми (новый словарь данных), более мощными (новый дизайн журнала повторов, меньше конфликтов, экстремальное масштабирование из InnoDB,…), улучшенное управление операциями (роли SQL, столбцы мгновенного добавления), множество (но очень много!) улучшений репликации и собственной репликации групп… и, наконец, множество интересных вещей, таких как новый Document Store, новый MySQL Shell и MySQL InnoDB Cluster, о которых вы уже должны знать если вы будете следовать этому блогу.
Итак, прежде чем мы сделаем наше обновление, давайте проверим, что у нас есть:
> 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@andreyex mysql]# ls -l total 28704 -rw-rw----. 1 mysql mysql 16384 May 21 12:08 aria_log.00000001 -rw-rw----. 1 mysql mysql 52 May 21 12:08 aria_log_control -rw-rw----. 1 mysql mysql 18874368 May 21 12:12 ibdata1 -rw-rw----. 1 mysql mysql 5242880 May 21 12:12 ib_logfile0 -rw-rw----. 1 mysql mysql 5242880 May 21 12:08 ib_logfile1 drwx------. 2 mysql mysql 4096 May 21 12:08 mysql srwxrwxrwx. 1 mysql mysql 0 May 21 12:08 mysql.sock drwx------. 2 mysql mysql 4096 May 21 12:08 performance_schema drwx------. 2 mysql mysql 6 May 21 12:08 test drwx------. 2 mysql mysql 4096 May 21 12:11 wp [root@andreyex mysql]# ls -l wp total 164 -rw-rw----. 1 mysql mysql 65 May 21 12:08 db.opt -rw-rw----. 1 mysql mysql 8688 May 21 12:11 wp_commentmeta.frm -rw-rw----. 1 mysql mysql 13380 May 21 12:11 wp_comments.frm -rw-rw----. 1 mysql mysql 13176 May 21 12:11 wp_links.frm -rw-rw----. 1 mysql mysql 8698 May 21 12:11 wp_options.frm -rw-rw----. 1 mysql mysql 8682 May 21 12:11 wp_postmeta.frm -rw-rw----. 1 mysql mysql 13684 May 21 12:11 wp_posts.frm -rw-rw----. 1 mysql mysql 8682 May 21 12:11 wp_termmeta.frm -rw-rw----. 1 mysql mysql 8666 May 21 12:11 wp_term_relationships.frm -rw-rw----. 1 mysql mysql 8668 May 21 12:11 wp_terms.frm -rw-rw----. 1 mysql mysql 8768 May 21 12:11 wp_term_taxonomy.frm -rw-rw----. 1 mysql mysql 8684 May 21 12:11 wp_usermeta.frm -rw-rw----. 1 mysql mysql 13064 May 21 12:11 wp_users.frm
Мы видим, что у нас есть файлы .frm и одно табличное пространство InnoDB: ibdata1.
> show global variables like 'innodb_file_per_table'; +-----------------------+-------+ | Variable_name | Value | +-----------------------+-------+ | innodb_file_per_table | OFF | +-----------------------+-------+
Мы также можем увидеть некоторые файлы.
Теперь пришло время перейти на официальный и оригинальный MySQL. Конечно, мы хотели бы использовать MySQL 8.0, но версия MariaDB по умолчанию в CentOS очень старая, а для MySQL 8.0 требуется более новая версия файлов InnoDB (отменить журналы…). Там мы перейдем сначала к последней версии MySQL 5.7, а затем к MySQL 8.0.
Первым шагом является установка репозитория yum для MySQL Community :
# yum install -y https://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 repo и отключаем 8.0 repo):
# 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 и увидеть новый инструмент проверки обновлений в действии!
# 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. Просто остановите снова 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 May 21 21:13 wp_comments.ibd -rw-r-----. 1 mysql mysql 128K May 21 21:13 wp_links.ibd -rw-r-----. 1 mysql mysql 176K May 21 21:15 wp_posts.ibd -rw-r-----. 1 mysql mysql 160K May 21 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, вам необходимо выполнить следующие простые шаги: