СправошнаяПоиск

Миграция с MariaDB на MySQL на CentOS

В этой статье я покажу вам, как перенести базу данных 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