ИТ Блог. Администрирование серверов на основе Linux (Ubuntu, Debian, CentOS, openSUSE)

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

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

В этой статье мы покажем вам, как перенести вашу базу данных WordPress из MariaDB на CentOS в реальный MySQL.

 

Почему переход на MySQL 8.0?

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.

 

MySQL 5.7

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

Exit mobile version