Menu
 

Migration de MySQL 5.1 vers MariaDB 5.5 sous Debian Squeeze





Introduction



On nous demande souvent comment passer de MySQL à MariaDB, beaucoup de personnes pensent que c'est compliqué alors que les étapes pour y parvenir sont très simples.
MariaDB est basé sur MySQL et reste compatible avec ce dernier, donc pour migrer vers MariaDB, il suffit juste de désinstaller MySQL et installer MariaDB : tout le reste devrait fonctionner comme avant.





Pourquoi utiliser MariaDB à la place de MySQL ?



Il existe bon nombre de raisons de vouloir supprimer Oracle MySQL pour le remplacer par MariaDB.
Tout d'abord, les performances de MariaDB sont souvent meilleures que celles de MySQL, notamment grâce à l'amélioration de l'optimiseur de requêtes et l'intégration du moteur XtraDB de Percona.

D'autres raisons poussent à l'utilisation de MariaDB, mais plus spécialement la gestion étrange des projets open source par Oracle.
Oracle semble ne pas daigner garder le modèle libre de MySQL. La société a commencé à rendre privé certains rapports de bugs utiles à la communauté (Where have the bugs gone? et Oracle’s 27 MySQL security fixes and MariaDB), masquer des scénarios de test (Disappearing test cases or did another part of MySQL just become closed source?) et l'avenir libre d'Oracle MySQL devient donc bien incertain.
Michael "Monty" Widenius, le fondateur de MySQL AB, a quitté Sun Microsystems lors de son rachat par Oracle pour créer Monty Program Ab puis la Fondation MariaDB. Il est rapidement rejoint par de nombreux développeurs originaux de MySQL. Ces développeurs maîtrisent donc parfaitement le code source du système de gestion de base de données, cela promet encore de nombreuses nouveautés et optimisations pour les versions suivantes.

De grands groupes utilisent désormais MariaDB : Wikipedia, Mozilla, De Particulier à Particulier,...

Chez O2 Graphics, nous misons sur le développement de sites internet et d'applications performantes, c'est pour cela que nous avons choisi d'utiliser le SGBD MariaDB à la place d'Oracle MySQL.
Nous souhaitons continuer à développer avec des solutions faites pour perdurer et le futur de MySQL/MariaDB est beaucoup plus rassurant du côté de la Fondation MariaDB que du côté d'Oracle.
Pendant l'été 2011, nous avons commencé à utiliser MariaDB sur nos machines de développement pour tester si tout se passait bien avec nos développements. Après quelques temps sans difficulté, nous avons migré au fur et à mesure nos différents serveurs sans rencontrer de problème. Depuis début 2012, à l'agence web O2 Graphics, nous n'utilisons plus MySQL sur aucune machine. Nous voici en 2013, presque deux ans après les premiers tests de MariaDB et nous ne regrettons pas notre choix.

Remplacement de MySQL par MariaDB

Nous allons réaliser cette migration sur une machine tournant sous Debian Squeeze à jour :
utilisateur@serveur:~$ uname -a
Linux server 2.6.32-5-amd64 #1 SMP Mon Feb 25 00:26:11 UTC 2013 x86_64 GNU/Linux


ATTENTION : Avant de commencer, il est fortement recommandé d'effectuer une sauvegarde de vos bases de données !
Même si nous n'avons jamais eu de soucis lors de migration vers MariaDB, un problème peut toujours survenir.

La version de MySQL installée est la dernière disponible dans les dépôts officiels Debian :
utilisateur@serveur:~$ mysql -u user -p
Enter password:
Welcome to the MySQL monitor. Commands end with ; or g.
Your MySQL connection id is 45
Server version: 5.1.66-0+squeeze1 (Debian)

Copyright (c) 2000, 2012, Oracle and/or its affiliates. All rights reserved.

Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.

Type 'help;' or 'h' for help. Type 'c' to clear the current input statement.

mysql> SHOW VARIABLES LIKE "%version%";
+-------------------------+-------------------+
| Variable_name | Value |
+-------------------------+-------------------+
| protocol_version | 10 |
| version | 5.1.66-0+squeeze1 |
| version_comment | (Debian) |
| version_compile_machine | x86_64 |
| version_compile_os | debian-linux-gnu |
+-------------------------+-------------------+
5 rows in set (0.00 sec)

mysql> exit
Bye
utilisateur@serveur:~$

Comme nous pouvons le voir, MySQL 5.1.66 est installé sur cette machine.

MariaDB n'étant pas encore disponible dans les dépôts officiels Debian, il faut rajouter le dépôt fourni par la Fondation MariaDB pour que le programme apt-get puisse trouver les paquets liés à "mariadb-server".

Vous trouverez sur le site de téléchargement de MariaDB l'URL des dépôts à ajouter : Choisissez Debian -> Debian 6 "Squeeze" -> 5.5 puis un miroir situé en France, tel que "Institut de Genetique Humaine".
En bas de la page, copiez les lignes indiqués et insérez les dans un fichier /etc/apt/sources.list.d/mariadb.list.
Exemple :
utilisateur@serveur:~$ echo "
# MariaDB 5.5 repository list
# http://mariadb.org/mariadb/repositories/
deb http://ftp.igh.cnrs.fr/pub/mariadb/repo/5.5/debian squeeze main
deb-src http://ftp.igh.cnrs.fr/pub/mariadb/repo/5.5/debian squeeze main
" | sudo tee /etc/apt/sources.list.d/mariadb.list

Le dépôt que nous venons d'ajouter n'étant pas officiel, il faut importer sa clé de signature GnuPG que vous trouverez dans la base de connaissances de MariaDB.

À la date de publication de cet article, vous pouvez exécuter :
utilisateur@serveur:~$ sudo apt-key adv --recv-keys --keyserver keyserver.ubuntu.com 0xcbcb082a1bb943db

Ensuite, mettez à jour la liste des fichiers disponibles dans les dépôts APT pour prendre en compte les paquets fournis par la Fondation MariaDB :
utilisateur@serveur:~$ sudo apt-get update


La dernière étape : installation de MariaDB Server avec désinstallation de MySQL Server :
utilisateur@serveur:~$ sudo apt-get install mariadb-server
Lecture des listes de paquets... Fait
Construction de l'arbre des dépendances
Lecture des informations d'état... Fait
Les paquets supplémentaires suivants seront installés :
libaio1 libmariadbclient18 libmysqlclient18 mariadb-client-5.5 mariadb-client-core-5.5 mariadb-common mariadb-server-5.5 mariadb-server-core-5.5
Paquets suggérés :
tinyca mariadb-test
Les paquets suivants seront ENLEVÉS :
mysql-client-5.1 mysql-server mysql-server-5.1 mysql-server-core-5.1
Les NOUVEAUX paquets suivants seront installés :
libaio1 libmariadbclient18 libmysqlclient18 mariadb-client-5.5 mariadb-client-core-5.5 mariadb-common mariadb-server mariadb-server-5.5
mariadb-server-core-5.5
0 mis à jour, 9 nouvellement installés, 4 à enlever et 1 non mis à jour.
Il est nécessaire de prendre 30,7 Mo dans les archives.
Après cette opération, 55,0 Mo d'espace disque supplémentaires seront utilisés.
Souhaitez-vous continuer [O/n] ? o

Pendant l'installation, il vous sera proposé de changer le mot de passe du compte d'administration de MariaDB, laissez le champ vide pour conserver votre mot de passe actuel.


À partir de là, MySQL a été désinstallé, remplacé par MariaDB. Le serveur MariaDB a été démarré automatiquement suite à son installation.

Nous pouvons vérifier que tout c'est bien passé :
utilisateur@serveur:~$ mysql -u user -p
Enter password:
Welcome to the MariaDB monitor. Commands end with ; or g.
Your MariaDB connection id is 34
Server version: 5.5.30-MariaDB-mariadb1~squeeze mariadb.org binary distribution

Copyright (c) 2000, 2013, Oracle, Monty Program Ab and others.

Type 'help;' or 'h' for help. Type 'c' to clear the current input statement.

MariaDB [(none)]> SHOW VARIABLES LIKE "%version%";
+-------------------------+---------------------------------+
| Variable_name | Value |
+-------------------------+---------------------------------+
| innodb_version | 5.5.30-MariaDB-30.1 |
| protocol_version | 10 |
| slave_type_conversions | |
| version | 5.5.30-MariaDB-mariadb1~squeeze |
| version_comment | mariadb.org binary distribution |
| version_compile_machine | x86_64 |
| version_compile_os | debian-linux-gnu |
+-------------------------+---------------------------------+
7 rows in set (0.00 sec)

MariaDB [(none)]> exit
Bye
utilisateur@serveur:~$


MariaDB 5.5.30 est bien installé, vous noterez au passage que tous les programmes "mysql*" qui vous sont familiers n'ont pas changé de nom.

Monitoring de MariaDB 5.5 avec Munin

Si vous monitoriez votre serveur MySQL 5.1 avec "munin", vous utilisiez probablement les plugins fournis avec le paquet "munin-node".
Ces plugins ne sont pas compatibles avec MySQL et MariaDB >= 5.5 mais il est possible de les remplacer par le plugin "munin-mysql" disponible sur GitHub.

Voici les étapes d'installation de "munin-mysql" :

  1. Récupérer la dernière version du plugin sur GitHub :
    utilisateur@serveur:~$ cd /tmp
    utilisateur@serveur:~$ git clone git://github.com/kjellm/munin-mysql.git
    Cloning into munin-mysql...
    remote: Counting objects: 697, done.
    remote: Compressing objects: 100% (311/311), done.
    remote: Total 697 (delta 421), reused 623 (delta 350)
    Receiving objects: 100% (697/697), 185.05 KiB, done.
    Resolving deltas: 100% (421/421), done.
    utilisateur@serveur:/tmp/munin-mysql$ cd munin-mysql/

  2. Éditer le fichier "Makefile" et changer la ligne PLUGIN_DIR par :
    PLUGIN_DIR:=/usr/share/munin/plugins

  3. Installer le plugin :
    utilisateur@serveur:/tmp/munin-mysql$ sudo make install
    mkdir -p /usr/share/munin/plugins
    install mysql /usr/share/munin/plugins
    if [ ! -e /etc/munin/plugin-conf.d/mysql.conf ]; then
    install mysql.conf /etc/munin/plugin-conf.d;
    fi
    if [ "" = "" ]; then
    ln -sf /usr/share/munin/plugins/mysql /etc/munin/plugins/mysql;
    else
    INSTANCES="";
    for I in $INSTANCES; do
    ln -sf /usr/share/munin/plugins/mysql /etc/munin/plugins/mysql_${I};
    done;
    fi
    install -d /usr/local/share/perl/5.10.1/Munin/MySQL/Graph
    install lib/Munin/MySQL/Graph/QueryCache.pm lib/Munin/MySQL/Graph/ReplicationSlave.pm lib/Munin/MySQL/Graph/MyISAM.pm lib/Munin/MySQL/Graph/InnoDB.pm lib/Munin/MySQL/Graph/Standard.pm
    /usr/local/share/perl/5.10.1/Munin/MySQL/Graph
    /etc/init.d/munin-node restart
    Stopping Munin-Node: done.
    Starting Munin-Node: done.
    utilisateur@serveur:/tmp/munin-mysql$

  4. Supprimer le fichier de conf (on utilise la conf de /etc/munin/plugin-conf.d/munin-node qui était installé par Debian) :
    utilisateur@serveur:/tmp/munin-mysql$ sudo rm /etc/munin/plugin-conf.d/mysql.conf

  5. Supprimer les liens symboliques vers les anciens plugins (maintenant il n'y en a plus qu'un : "/etc/munin/plugins/mysql")
    utilisateur@serveur:/tmp/munin-mysql$ sudo rm /etc/munin/plugins/mysql_*

  6. Redémarrer Munin
    utilisateur@serveur:/tmp/munin-mysql$ sudo /etc/init.d/munin-node restart

Conclusion

Depuis le passage à MariaDB chez O2 Graphics, tous les programmes qui fonctionnaient avant fonctionnent toujours, sans aucun changement dans leur configuration ou leur code source :

Et tout cela sous Debian GNU/Linux ou Windows, en 32 ou en 64bits.