Mise à jour de MariaDB, pas que du bonheur
J’ai remplacé MySQL par MariaDB pour mes sites web et applications de gestion en PHP. Cela fait plusieurs fois que je me retrouve avec mes sites hors service suite à une mise à jour de MariaDB. Il faut dire que j’applique les mises à jour de sécurité de façon automatique sur mes serveurs avec cron-apt, car je suis un gros fainéant 🙂 .
Je sais que je prends un risque en procédant ainsi. Mais dans 95% des cas, je n’ai pas de problèmes. Et comme je gère trois serveurs dédiés et une bonne vingtaine de machines virtuelles, cela m’économise tout de même pas mal de temps. D’ailleurs seul MariaDB m’a posé des soucis…
Jusqu’à présent j’avais réussi à réparer le problème tant bien que mal. Ce matin ce fut un peu plus difficile.
À la base une mise à jour qui signale un problème de dépendance (extrait du log de mise à jour automatique) :
The following packages will be upgraded: libmysqlclient18 mysql-common 2 packages upgraded, 0 newly installed, 0 to remove and 0 not upgraded. Need to get 728 kB of archives. After unpacking 3406 kB will be used. The following packages have unmet dependencies: libmariadbclient18 : Depends: libmysqlclient18 (= 5.5.41+maria-1~wheezy) but 5.5.43-0+deb7u1 is to be installed. The following actions will resolve these dependencies: Remove the following packages: 1) libmariadbclient18 2) mariadb-client-5.5 3) mariadb-client-core-5.5 4) mariadb-server 5) mariadb-server-5.5 6) mariadb-server-core-5.5 Leave the following dependencies unresolved: 7) phpmyadmin recommends mysql-client The following packages will be REMOVED: libmariadbclient18{a} mariadb-client-5.5{a} mariadb-client-core-5.5{a} mariadb-server{a} mariadb-server-5.5{a} mariadb-server-core-5.5{a} The following packages will be upgraded: libmysqlclient18 mysql-common
Et là comme vous le voyez c’est le drame, MariaDB est désinstallé…
En cherchant un peu, je suis tombé sur cette note sur le site de MariaDB traitant justement de soucis de dépendances sur Debian et Ubuntu.
J’ai donc suivi les instructions avec quelques adaptations. Tout d’abord la version 5.5.32 n’ést plus en ligne sur le serveur FTP indiqué, il faut prendre la 5.5.42. Jj’ai mis en commentaires les dépôts standards de MariaDB puis ajouté la ligne suivante dans mon fichier sources.list :
deb http://ftp.osuosl.org/pub/mariadb/mariadb-5.5.42/repo/debian wheezy main
Ensuite un apt-get update pour mettre à jour le catalogue des packages. À ce stade-là, il n’est toujours pas possible de réinstaller MariaDB:
# apt-get install mariadb-server mariadb-client Reading package lists... Done Building dependency tree Reading state information... Done Some packages could not be installed. This may mean that you have requested an impossible situation or if you are using the unstable distribution that some required packages have not yet been created or been moved out of Incoming. The following information may help to resolve the situation: The following packages have unmet dependencies: mariadb-client : Depends: mariadb-client-5.5 (= 5.5.42+maria-1~wheezy) but it is not going to be installed mariadb-server : Depends: mariadb-server-5.5 (= 5.5.42+maria-1~wheezy) but it is not going to be installed E: Unable to correct problems, you have held broken packages.
Je suis les instructions du scénario 2 du tutoriel avec :
#apt-get install libmysqlclient18=5.5.42+maria-1~wheezy mariadb-client-5.5=5.5.42+maria-1~wheezy mariadb-client-core-5.5=5.5.42+maria-1~wheezy Reading package lists... Done Building dependency tree Reading state information... Done The following extra packages will be installed: libmariadbclient18 Suggested packages: libterm-readkey-perl The following NEW packages will be installed: libmariadbclient18 mariadb-client-5.5 mariadb-client-core-5.5 The following packages will be DOWNGRADED: libmysqlclient18 0 upgraded, 3 newly installed, 1 downgraded, 0 to remove and 0 not upgraded. Need to get 7649 kB of archives. After this operation, 24.6 MB of additional disk space will be used. Do you want to continue [Y/n]? Y Get:1 http://ftp.osuosl.org/pub/mariadb/mariadb-5.5.42/repo/debian/ wheezy/main libmysqlclient18 i386 5.5.42+maria-1~wheezy [2924 B] Get:2 http://ftp.osuosl.org/pub/mariadb/mariadb-5.5.42/repo/debian/ wheezy/main libmariadbclient18 i386 5.5.42+maria-1~wheezy [836 kB] Get:3 http://ftp.osuosl.org/pub/mariadb/mariadb-5.5.42/repo/debian/ wheezy/main mariadb-client-core-5.5 i386 5.5.42+maria-1~wheezy [1708 kB] Get:4 http://ftp.osuosl.org/pub/mariadb/mariadb-5.5.42/repo/debian/ wheezy/main mariadb-client-5.5 i386 5.5.42+maria-1~wheezy [5102 kB] Fetched 7649 kB in 5s (1508 kB/s) dpkg: warning: downgrading libmysqlclient18:i386 from 5.5.43-0+deb7u1 to 5.5.42+maria-1~wheezy (Reading database ... 28653 files and directories currently installed.) Preparing to replace libmysqlclient18:i386 5.5.43-0+deb7u1 (using .../libmysqlclient18_5.5.42+maria-1~wheezy_i386.deb) ... Unpacking replacement libmysqlclient18 ... Selecting previously unselected package libmariadbclient18. Unpacking libmariadbclient18 (from .../libmariadbclient18_5.5.42+maria-1~wheezy_i386.deb) ... Selecting previously unselected package mariadb-client-core-5.5. Unpacking mariadb-client-core-5.5 (from .../mariadb-client-core-5.5_5.5.42+maria-1~wheezy_i386.deb) ... Selecting previously unselected package mariadb-client-5.5. Unpacking mariadb-client-5.5 (from .../mariadb-client-5.5_5.5.42+maria-1~wheezy_i386.deb) ... Processing triggers for man-db ... Setting up libmysqlclient18 (5.5.42+maria-1~wheezy) ... Setting up libmariadbclient18 (5.5.42+maria-1~wheezy) ... Setting up mariadb-client-core-5.5 (5.5.42+maria-1~wheezy) ... Setting up mariadb-client-5.5 (5.5.42+maria-1~wheezy) ...
Je peux maintenant à nouveau installer MariaDB avec :
# apt-get install mariadb-server mariadb-client
Je dois indiquer le mot de passe du compte root de MariaDB (je remet le même que celui existant, important !). L’installation reprend alors les bases existantes et tout refonctionne. J’ai ensuite remis les dépôts standards.
deb http://mariadb.biz.net.id/repo/5.5/debian wheezy main deb-src http://mariadb.biz.net.id/repo/5.5/debian wheezy main
Un upgrade me signale cependant
# apt-get -V upgrade Reading package lists... Done Building dependency tree Reading state information... Done The following packages have been kept back: libmysqlclient18 (5.5.42+maria-1~wheezy => 5.5.43-0+deb7u1) 0 upgraded, 0 newly installed, 0 to remove and 1 not upgraded.
J’en reste là pour l’instant bien que la situation ne me semble pas encore très saine. Si vous avez des idées, ou déjà rencontré le problème, merci pour vos suggestions et commentaires.
[Mise à jour 15/04/2105]Ce matin à nouveau Cron-Apt a procédé à la mise à jour « desinstalatrice ». J’ai laissé les dépôts de la version 5.5.42. Cependant un apt-get -V update me signale toujours un problème de version de librairie pour libmysqlclient18
Donc le problème ne vient pas de MariaDB mais plutôt de Debian. Il serait préférable de le préciser dans le titre de votre article vous ne pensez pas ?
En ne lisant que celui-ci on pense que le coupable est MariaDB. Sur un blog aussi lu que le vôtre cela peut faire mal à la réputation de ce logiciel.
L’unique objectif de cet article est de partager une solution à un problème rencontré. MariaDB fonctionne parfaitement passé ces problèmes de mises à jour 🙂
Quand au titre, ben oui les gens ne lisent que les titres c’est triste 🙂 Faudrait quoi comme titre ? Problème de mise à jour de MariaDB sous Debian Wheezy ? Pas tellement plus vendeur pour MariaDB et difficile de faire un titre parlant sans utiliser à minima les mots problèmes et MariaDB.. Allons, je pense que les vrais techs seront apprécié la nature du problème. Pour les autres ceux qui ne lisent que les titres, je pense que cette information ne survivra pas plus de 30 secondes dans leur cerveau qui aura déjà zappé à un autre titre…
Et sinon une idée sur l’origine du problème et ce qu’il faudrait faire pour qu’il ne se reproduise plus 🙂 ?
Oulah non, aucune idée… Le problème vient apparemment des dépendances et les systèmes de paquetage ne sont pas du tout mon domaine.
Mais toute info est bonne à prendre (ou presque…) et l’article était intéressant donc je l’ai lu 🙂
Si j’avais eu une piste je vous en aurais évidemment fait part. 😉
Merci pour le retour d’expérience… Sinon, je n’ai pas lu le titre ni l’article, je préfère les commentaires…
Ce matin, cron-apt avait à nouveau tout « cassé ». j’ai du à nouveau appliqué le tutoriel. pour l’instant je n’ai pas remis les dépôts standards, je reste sur le dépôt de la version 5.5.42… C’est pas encore ça dirons-nous. J’édite l’article pour insérer l’info.
Utiliser aptitude safe-upgrade au lieu de dist-upgrade ne serait pas plus sûr ? Cette commande ne supprimant pas de paquet normalement.
A voir c’est cron-apt qui fait le boulot. Je vais regarder si on peut effectivement faire ce distingo.
Regarde du coté du fichier /etc/cron-apt/action.d/3-download tu devrais pouvoir modifier le comportement d’apt-cron
Moz a raison. Ça vient de Debian. Je n’ai pas ce genre de problème sur CentOS ou Fedora.
Depuis que je suis passé à MariaDB, je suis obligé de programmer une réparation – réindexation – des tables MyISAM des blogs WordPress toutes les nuits sans que j’en comprenne la raison exacte. Je n’avais jamais rencontré ce genre de problème avec MySQL en 10 années d’utilisation.
@Denis : Disons que le problème vient des packages mis à disposition pour MariaDB pour Debian Wheezy 🙂 MariaDB n’arrivera dans les dépôts officiels de Debian qu’avec la version 8 si je ne dis pas de bêtises. Sinon aucun soucis au niveau du fonctionnement. J’ai trois machines virtuelles avec des instances MariaDB et une une quinzaine de bases diverses et variées au total : plusieurs WordPress, Owncloud, Dolibarr, Roundcube, vtiger, SOGo, Piwik (3Go la base)…
une solution de contournement pour les version « hors repo officiel » : aptitude keep : permet de dire a apt que ce paquets n’est pas a supprimer.
A verifier si ca fonctionne correctement.
Je m’en sers pour des paquets debian sources modifiés et recompilés par mes soins.
Ce n’est pas dû à Debian.
C’est le dépôt externe MariaDB qui casse tout. Encore heureux que les mises à jours des dépôts stables de Debian ne posent pas ce genre de problème.
@Valère : merci, effectivement ça m’a l’air pas mal. Je teste et fait un retour
@Valère : le safe-upgrade semble faire son job… A suivre… Merci
Content d’avoir pu t’aider ! Au plaisir de te lire !
Bon j’ai le même souci mais avec une légère différence. Je ne fais que de la safe-upgrade ! Pour le coup libmysqlclient18 n’est pas mis à jour. Ce qui m’embête c’est que j’utilise apticron pour recevoir les notifications de mise à jour, et je recois un mail quotidien pour me dire qu’il y a une MAJ à faire sauf que c’est libmysqlclient18 qui n’est pas mis à jour. J’ai essayé la méthode de downgrade mais cela ne fonctionne pas. Il ne downgrade rien. J’ai tenté de faire un aptitude keep en pensant que ca l’enlevait de la liste des paquets « non mis à jour » dans aptitude mais sans succès. Une idée ?
Debian 8 est sortie avec MariaDB 10.0.16 dans les dépôts https://www.debian.org/News/2015/20150426
Hello,
Le problème vient bien de mariadb, le package debian a été construit avec comme dépendance exacte libmysqlclient18 en version 5.5.42
Comme le dit aptitude :
libmariadbclient18 : Dépend: libmysqlclient18 (= 5.5.42+maria-1~wheezy)
Alors que ça devrait dans l’idéal être >= 5.5.42
Du coup, quand aptitude (ou apt) tente d’installer une version 5.5.43, la dépendance n’est plus satisfaite, et hop tout doit être supprimé…
Dans ce cas de figure, pas d’autres choix que d’attendre que le paquet libmariadbclient18 soit mis à jour lui aussi 🙁
@Blackbird : merci pour ces précisions. c’est un peu ce qu’il m’avait semblé.
@Philippe,
Ca y est, mariadb a publié les packages qui vont bien pour la mise à jour.
J’ai pu mettre à jour plusieurs serveurs sans soucis, limariadbclient18 est bien là et tout s’installe sans soucis 🙂
A plush’
@BlackBird
Bizarre moi je n’ai pas pu en safe-upgrade les mettre à jour. J’ai bien eu une maj d’un paquet de mariadb mais ca ne corrige pas le souci entre libmysqlclient et mariadbclient. J’ai tenté un full-upgrade -s pour voir mais aucune solution…
@Blackbird
Bon je n’ai rien dit au final. J’ai d’abord fait un aptitude install libmysqlclient18 et tout est rentré dans l’ordre …