Migration depuis MySQL 5.5 vers MariaDB 5.5 sur Debian 7.1 (Wheezy)
Allez, on commence donc avec l’aventure de la migration d’un serveur Mysql 5.5 vers MariaDB 5.5. Évidemment sous Linux, et évidemment sous Debian.
Préambule
La migration a été tentée sur une machine virtuelle Debian Wheezy 7.1 avec certains paquets installés depuis le dépot dotdeb. Il s’agit en fait d’un hébergement Nginx+php-fpm+MySQL installé grâce au script de Nicolargo. J’ai donc commencé par faire une sauvegarde de cette VM. Dans mon cas et parce que je suis feignant, j’ai exporté l’appliance en .ova (le serveur utilise OpenMediaVault avec un plugin Virtualbox), histoire de pouvoir la restaurer ensuite si besoin. Je vous conseille donc d’en faire de même, ou de sauvegarder un max de truc pour réinstaller si vous cassez tout. Toutes les manipulations ont été effectuées avec le compte root; il est également possible, si vous l’avez installé, de passer par sudo (faut être administrateur quoi).
Désinstallation de MySQL
Ensuite, on attaque la partie un peu plus dure. J’ai commencé par lister ce qui avait trait à MySQL. Pour ça, la commande est :
1 2 3 4 5 6 7 8 9 10 |
root@heberg:~# dpkg -l |grep mysql ii libdbd-mysql-perl 4.021-1+b1 amd64 Perl5 database interface to the MySQL database rc libmysqlclient16 5.1.66-0+squeeze1 amd64 MySQL database client library ii libmysqlclient18:amd64 5.5.31+dfsg-0+wheezy1 amd64 MySQL database client library ii mysql-client-5.5 5.5.31+dfsg-0+wheezy1 amd64 MySQL database client binaries ii mysql-common 5.5.31+dfsg-0+wheezy1 all MySQL database common files, e.g. /etc/mysql/my.cnf ii mysql-server 5.5.31+dfsg-0+wheezy1 all MySQL database server (metapackage depending on the latest version) ii mysql-server-5.5 5.5.31+dfsg-0+wheezy1 amd64 MySQL database server binaries and system database setup ii mysql-server-core-5.5 5.5.31+dfsg-0+wheezy1 amd64 MySQL database server binaries ii php5-mysql 5.4.19-1~dotdeb.1 amd64 MySQL module for php5 |
Assez propre, rien dans tous les coins, bref, la désinstallation est des plus simples. Par contre, ne pas faire comme moi, et utiliser simplement « mysql-* » comme raccourci, car php5-mysql est aussi désinstallé dans cas, et vos applis php/sites risquent de ne pas aimer :
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 |
root@heberg:~# apt-get remove libdbd-mysql-perl libmysqlclient18 mysql-client-5.5 mysql-common mysql-server mysql-server-5.5 mysql-server-core-5.5 Lecture des listes de paquets... Fait Construction de l'arbre des dépendances Lecture des informations d'état... Fait Les paquets suivants seront ENLEVÉS : libdbd-mysql-perl libmysqlclient18 mysql-client-5.5 mysql-common mysql-server mysql-server-5.5 mysql-server-core-5.5 php5-mysql 0 mis à jour, 0 nouvellement installés, 8 à enlever et 0 non mis à jour. Après cette opération, 94,8 Mo d'espace disque seront libérés. Souhaitez-vous continuer [O/n] ? O (Lecture de la base de données... 32621 fichiers et répertoires déjà installés.) Suppression de mysql-server ... Suppression de mysql-server-5.5 ... [ ok ] Stopping MySQL database server: mysqld. Suppression de mysql-client-5.5 ... Suppression de libdbd-mysql-perl ... Suppression de libmysqlclient18:amd64 ... Suppression de mysql-common ... Suppression de mysql-server-core-5.5 ... Traitement des actions différées (« triggers ») pour « man-db »... Traitement des actions différées (« triggers ») pour « php5-fpm »... [ ok ] Restarting PHP5 FastCGI Process Manager: php5-fpm. |
Voilà, MySQL nettoyé, on peut passer à la suite.
Installation de MariaDB
Je pensais ensuite installer directement MariaDB, car je le pensais vraisemblablement à tort présent dans les dépôts installés. Apparemment ce n’est pas le cas, je me suis donc rendu sur le site officiel, qui propose des miroirs pour l’installation en fonction de votre configuration. A cette adresse donc (https://downloads.mariadb.org/mariadb/repositories/), j’ai indiqué les paramètres suivants, et ils proposent ensuite plusieurs méthodes pour l’ajout des dépôts.
En l’occurence, j’ai choisi d’ajouter un fichier MariaDB.list dans le dossier /etc/apt/sources.list.d/ , avec le contenu suivant :
1 2 3 4 |
# MariaDB 5.5 repository list - created 2013-09-20 14:09 UTC # deb http://ftp.igh.cnrs.fr/pub/mariadb/repo/5.5/debian wheezy main deb-src http://ftp.igh.cnrs.fr/pub/mariadb/repo/5.5/debian wheezy main |
Ensuite, on met à jour les dépôts :
1 2 3 4 5 6 7 |
root@heberg:~# apt-get update Atteint http://ftp.fr.debian.org wheezy Release.gpg Atteint http://packages.dotdeb.org wheezy Release.gpg (...) 7 795 o réceptionnés en 2s (3 010 o/s) Lecture des listes de paquets... Fait W: Erreur de GPG : http://ftp.igh.cnrs.fr wheezy Release : Les signatures suivantes n'ont pas pu être vérifiées car la clé publique n'est pas disponible : NO_PUBKEY CBCB082A1BB943DB |
Oui je sais, je n’ai pas trouvé comment installer manuellement la clé du dépot, car je n’ai pas envie de la récupérer depuis un obscur serveur de clé Ubuntu (je suis sur un miroir français de paquets pour Debian, Ubuntu n’a rien à faire la dedans–oui je peux être très con parfois. Bref, maintenant on peut installer MariaDB :
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 |
root@heberg:~# 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 : libdbd-mysql-perl libmariadbclient18 libmysqlclient18 mariadb-client-5.5 mariadb-client-core-5.5 mariadb-common mariadb-server-5.5 mariadb-server-core-5.5 mysql-common Paquets suggérés : tinyca mailx mariadb-test Les NOUVEAUX paquets suivants seront installés : libdbd-mysql-perl libmariadbclient18 libmysqlclient18 mariadb-client-5.5 mariadb-client-core-5.5 mariadb-common mariadb-server mariadb-server-5.5 mariadb-server-core-5.5 mysql-common 0 mis à jour, 10 nouvellement installés, 0 à enlever et 0 non mis à jour. Il est nécessaire de prendre 31,9 Mo dans les archives. Après cette opération, 111 Mo d'espace disque supplémentaires seront utilisés. Souhaitez-vous continuer [O/n] ? O ATTENTION : les paquets suivants n'ont pas été authentifiés. mysql-common mariadb-common libmariadbclient18 libmysqlclient18 mariadb-client-core-5.5 mariadb-client-5.5 mariadb-server-core-5.5 mariadb-server-5.5 mariadb-server Faut-il installer ces paquets sans vérification (o/N) ? O Réception de : 1 http://ftp.fr.debian.org/debian/ wheezy/main libdbd-mysql-perl amd64 4.021-1+b1 [126 kB] Réception de : 2 http://ftp.igh.cnrs.fr/pub/mariadb/repo/5.5/debian/ wheezy/main mysql-common all 5.5.33+maria-1~wheezy [8 786 B] Réception de : 3 http://ftp.igh.cnrs.fr/pub/mariadb/repo/5.5/debian/ wheezy/main mariadb-common all 5.5.33+maria-1~wheezy [3 262 B] Réception de : 4 http://ftp.igh.cnrs.fr/pub/mariadb/repo/5.5/debian/ wheezy/main libmariadbclient18 amd64 5.5.33+maria-1~wheezy [845 kB] Réception de : 5 http://ftp.igh.cnrs.fr/pub/mariadb/repo/5.5/debian/ wheezy/main libmysqlclient18 amd64 5.5.33+maria-1~wheezy [2 922 B] Réception de : 6 http://ftp.igh.cnrs.fr/pub/mariadb/repo/5.5/debian/ wheezy/main mariadb-client-core-5.5 amd64 5.5.33+maria-1~wheezy [1 817 kB] Réception de : 7 http://ftp.igh.cnrs.fr/pub/mariadb/repo/5.5/debian/ wheezy/main mariadb-client-5.5 amd64 5.5.33+maria-1~wheezy [5 089 kB] Réception de : 8 http://ftp.igh.cnrs.fr/pub/mariadb/repo/5.5/debian/ wheezy/main mariadb-server-core-5.5 amd64 5.5.33+maria-1~wheezy [5 358 kB] Réception de : 9 http://ftp.igh.cnrs.fr/pub/mariadb/repo/5.5/debian/ wheezy/main mariadb-server-5.5 amd64 5.5.33+maria-1~wheezy [18,7 MB] Réception de : 10 http://ftp.igh.cnrs.fr/pub/mariadb/repo/5.5/debian/ wheezy/main mariadb-server all 5.5.33+maria-1~wheezy [2 960 B] 31,9 Mo réceptionnés en 1min 34s (337 ko/s) Préconfiguration des paquets... Sélection du paquet mysql-common précédemment désélectionné. (Lecture de la base de données... 32352 fichiers et répertoires déjà installés.) Dépaquetage de mysql-common (à partir de .../mysql-common_5.5.33+maria-1~wheezy_all.deb) ... Sélection du paquet mariadb-common précédemment désélectionné. Dépaquetage de mariadb-common (à partir de .../mariadb-common_5.5.33+maria-1~wheezy_all.deb) ... Sélection du paquet libmariadbclient18 précédemment désélectionné. Dépaquetage de libmariadbclient18 (à partir de .../libmariadbclient18_5.5.33+maria-1~wheezy_amd64.deb) ... Sélection du paquet libmysqlclient18 précédemment désélectionné. Dépaquetage de libmysqlclient18 (à partir de .../libmysqlclient18_5.5.33+maria-1~wheezy_amd64.deb) ... Sélection du paquet libdbd-mysql-perl précédemment désélectionné. Dépaquetage de libdbd-mysql-perl (à partir de .../libdbd-mysql-perl_4.021-1+b1_amd64.deb) ... Sélection du paquet mariadb-client-core-5.5 précédemment désélectionné. Dépaquetage de mariadb-client-core-5.5 (à partir de .../mariadb-client-core-5.5_5.5.33+maria-1~wheezy_amd64.deb) ... Sélection du paquet mariadb-client-5.5 précédemment désélectionné. Dépaquetage de mariadb-client-5.5 (à partir de .../mariadb-client-5.5_5.5.33+maria-1~wheezy_amd64.deb) ... Sélection du paquet mariadb-server-core-5.5 précédemment désélectionné. Dépaquetage de mariadb-server-core-5.5 (à partir de .../mariadb-server-core-5.5_5.5.33+maria-1~wheezy_amd64.deb) ... Traitement des actions différées (« triggers ») pour « man-db »... Paramétrage de mysql-common (5.5.33+maria-1~wheezy) ... Installation de la nouvelle version du fichier de configuration /etc/mysql/my.cnf ... Paramétrage de mariadb-common (5.5.33+maria-1~wheezy) ... Sélection du paquet mariadb-server-5.5 précédemment désélectionné. (Lecture de la base de données... 32533 fichiers et répertoires déjà installés.) Dépaquetage de mariadb-server-5.5 (à partir de .../mariadb-server-5.5_5.5.33+maria-1~wheezy_amd64.deb) ... Sélection du paquet mariadb-server précédemment désélectionné. Dépaquetage de mariadb-server (à partir de .../mariadb-server_5.5.33+maria-1~wheezy_all.deb) ... Traitement des actions différées (« triggers ») pour « man-db »... Paramétrage de libmysqlclient18 (5.5.33+maria-1~wheezy) ... Paramétrage de libdbd-mysql-perl (4.021-1+b1) ... Paramétrage de libmariadbclient18 (5.5.33+maria-1~wheezy) ... Paramétrage de mariadb-client-core-5.5 (5.5.33+maria-1~wheezy) ... Paramétrage de mariadb-client-5.5 (5.5.33+maria-1~wheezy) ... Paramétrage de mariadb-server-core-5.5 (5.5.33+maria-1~wheezy) ... Paramétrage de mariadb-server-5.5 (5.5.33+maria-1~wheezy) ... Installation de la nouvelle version du fichier de configuration /etc/logrotate.d/mysql-server ... Installation de la nouvelle version du fichier de configuration /etc/mysql/debian-start ... Installation de la nouvelle version du fichier de configuration /etc/init.d/mysql ... [ ok ] Stopping MariaDB database server: mysqld. 130920 15:44:45 [Warning] Using unique option prefix myisam_recover instead of myisam-recover-options is deprecated and will be removed in a future release. Please use the full name instead. 130920 15:44:45 [Note] Plugin 'InnoDB' is disabled. 130920 15:44:45 [Note] Plugin 'FEEDBACK' is disabled. [ ok ] Starting MariaDB database server: mysqld . . . . . .. [info] Checking for corrupt, not cleanly closed and upgrade needing tables.. Paramétrage de mariadb-server (5.5.33+maria-1~wheezy) ... |
Note : Attention, pendant l’installation des paquets, il vous demandera de définir le mot de passe superutilisateur du serveur mariaDB, n’hésitez pas soit à ressaisir celui déjà utilisé, soit changez-le pour un mot de passe plus balaise. Mais de toute façon il en faut un.
Premier réflexe, allez modifier le fichier de configuration pour lui indiquer le dossier de travail de Mysql, celui où se trouvent les bases. Eh ben rien, pas de /etc/mariadb. En fait, MariaDB réutilise le fichier de configuration de Mysql, dans le dossier /etc/mysql ! Ce qui veut dire, si vous n’avez pas eu d’erreur quand il a démarré, que vos bases de données sont directement accessibles. Après une courte vérification, c’est bien le cas ! Par ailleurs, les commandes sont les mêmes, et les connecteurs à utiliser pour les différents langages/applications sont ceux déjà en place pour MySQL. Un vrai bonheur qui permet de ne perdre personne en route.
Conclusion
C’est vraiment étonnant, je pensais déjà tout casser comme j’ai souvent l’habitude de le faire (il avait fallu réinstaller Mysql lors du passage Lenny/Squeeze sur ma précédente VM). Ce qui a été un temps le cas puisque comme j’ai utilisé le joker « mysql-* » pour désinstaller MySQL, il m’a gentiment supprimé php5-mysql, un peu embêtant quand on héberge des applications PHP/MySQL justement. Mais au final, la migration est là, le futur aussi, lorsque les mises à jours seront à faire. Car il faut bien rappeler que pour l’instant, MariaDB 5.5 est encore très proche de MySQL 5.5, même si des gains de performances ont déjà été constatés sur certains configurations (vu ma charge, je ne sens rien pour ainsi dire). Bref, une migration pas forcément obligatoire, mais un gage de liberté et de suivi de la sécurité.