MySQL: миграция с MySQL на MariaDB

Автор: | 08/24/2014
 

mariadb_logoМиграция выполняется на:

# cat /etc/redhat-release
CentOS release 6.5 (Final)
# uname -p
x86_64

Создаём дамп всех баз:

# mysqldump -u root -p -A > alldbs.sql
Enter password:
-- Warning: Skipping the data of table mysql.event. Specify the --events option explicitly.

Останавливаем MySQL:

# service mysqld stop
Stopping mysqld:                                           [  OK  ]


В официальном HowTo говорится, что MariaDB можно установить поверх имеющейся установки MySQL. Однако — у меня это вызвало проблемы с установкой зависимостей.

Поэтому — удаляем связанные пакеты:

# yum -y remove mysql* mysql-server mysql-devel mysql-libs
...
Removing for dependencies:
 dovecot-mysql x86_64 1:2.0.9-7.el6_5.1 @updates 18 k
 mysql-server x86_64 5.1.73-3.el6_5 @updates 25 M
 perl-DBD-MySQL x86_64 4.013-3.el6 @base 338 k
 php-mysql x86_64 5.3.3-27.el6_5.1 @updates 216 k
...

Отключаем автозагрузку:

# chkconfig mysqld off

Устанавливаем MariaDB.

В файл /etc/yum.repos.d/MariaDB.repo вписываем:

[mariadb]
name = MariaDB
baseurl = http://yum.mariadb.org/5.5/centos6-amd64
gpgkey=https://yum.mariadb.org/RPM-GPG-KEY-MariaDB
gpgcheck=1
priority=1
#enabled=0

Устанавливаем:

# yum -y install MariaDB-client MariaDB-common MariaDB-compat MariaDB-devel MariaDB-server MariaDB-shared

Запускаем:

# service mysql start
Starting MySQL.. SUCCESS!
# chkconfig mysql on
# chkconfig --list | grep mysql
mysql 0:off 1:off 2:on 3:on 4:on 5:on 6:off

Выполняем первоначальную настройку:

# /usr/bin/mysql_secure_installation

Устанавливаем заново пакеты, которые были удалены вместе с MySQL:

# yum -y install php-mysql  dovecot-mysql perl-DBD-MySQL exim-mysql
...
Installed:
dovecot-mysql.x86_64 1:2.0.9-7.el6_5.1 perl-DBD-MySQL.x86_64 0:4.013-3.el6 php-mysql.x86_64 0:5.3.3-27.el6_5.1

При удалении MySQL файл конфигурации сохраняется как /etc/my.cnf.rpmsave.

Удаляем существующий файл, созданный MariaDB:

# mv /etc/my.cnf /etc/my.cnf.bkp-24-08-2014

И копируем сохранённый:

# cp /etc/my.cnf.rpmsave /etc/my.cnf

Перезапускаем сервер:

# service mysql restart
Shutting down MySQL. SUCCESS!
Starting MySQL.. SUCCESS!

Некоторые опции из my.cnf для MySQL могут быть несовместимы (например, из-за различных типов хранилищ), хотя заявлена полная поддержка.

В случае проблем с запуском:

# service mysql start
Starting MySQL... ERROR!

Включаем логирование:

[mysqld_safe]
syslog

И проверяем лог /var/log/messages:

Aug 24 11:49:03 venti mysqld: 140824 11:49:03 [ERROR] /usr/sbin/mysqld: unknown option '--skip-locking'

Если всё нормально — включаем автозагрузку:

# chkconfig mysql on

Проверяем установку:

# mysql -V
mysql  Ver 15.1 Distrib 5.5.39-MariaDB, for Linux (i686) using readline 5.1
# netstat -anp | grep 3306
tcp        0      0 0.0.0.0:3306                0.0.0.0:*                   LISTEN      2823/mysqld
# service mysql status
 SUCCESS! MySQL running (2823)

Базы уже должны присутствовать:

MariaDB [(none)]> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| autocomtestdb      |
| db_1               |
| mysql              |
| roundcube          |
| setevoy_money_db1  |
| setevoy_test       |
| setevoyorgua_db1   |
| vexim              |
+--------------------+

В случае проблем — загружаем дамп баз:

# mysql -u root -p < alldbs.sql
Enter password:

Перезапускаем сервисы:

# service httpd restart
Stopping httpd: [ OK ]
Starting httpd: [ OK ]
# service dovecot restart
Stopping Dovecot Imap: [ OK ]
Starting Dovecot Imap: [ OK ]
# service exim restart
Shutting down exim: [ OK ]
Starting exim: [ OK ]

Проверяем лог Dovecot:

Aug 24 11:34:58 venti dovecot: master: Warning: Killed with signal 15 (by pid=32207 uid=0 code=kill)
Aug 24 11:34:59 venti dovecot: master: Dovecot v2.0.9 starting up (core dumps disabled)
Aug 24 11:35:05 venti dovecot: auth: mysql: Connected to localhost (vexim)
Aug 24 11:35:05 venti dovecot: auth: mysql: Connected to localhost (vexim)

Лог Exim:

2014-08-24 12:15:05 exim 4.72 daemon started: pid=2452, -q1h, listening for SMTP on port 25 (IPv6 and IPv4) port 250 (IPv6 and IPv4)

Готово.