Mise à jour de MariaDB, pas que du bonheur

closeCet article a été publié il y a 8 ans 11 mois 28 jours, il est donc possible qu’il ne soit plus à jour. Les informations proposées sont donc peut-être expirées.

MariaDBJ’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

Philippe Scoffoni

Je barbote dans la mare informatique depuis 30 ans (premier ordinateur à 16 ans, un ORIC ATMOS) et je travaille à mon compte au travers de ma société Open-DSI. J'accompagne les associations, TPE et PME dans leurs choix et dans la mise en oeuvre se solutions informatiques libres.

22 réponses

  1. moz dit :

    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.

  2. 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 🙂 ?

  3. moz dit :

    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. 😉

  4. david96 dit :

    Merci pour le retour d’expérience… Sinon, je n’ai pas lu le titre ni l’article, je préfère les commentaires…

  5. 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.

  6. Valère dit :

    Utiliser aptitude safe-upgrade au lieu de dist-upgrade ne serait pas plus sûr ? Cette commande ne supprimant pas de paquet normalement.

  7. A voir c’est cron-apt qui fait le boulot. Je vais regarder si on peut effectivement faire ce distingo.

  8. Valère dit :

    Regarde du coté du fichier /etc/cron-apt/action.d/3-download tu devrais pouvoir modifier le comportement d’apt-cron

  9. Denis dit :

    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.

  10. @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)…

  11. nyquist dit :

    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.

  12. paulez dit :

    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.

  13. @Valère : merci, effectivement ça m’a l’air pas mal. Je teste et fait un retour

  14. @Valère : le safe-upgrade semble faire son job… A suivre… Merci

  15. Valère dit :

    Content d’avoir pu t’aider ! Au plaisir de te lire !

  16. Benjbubu dit :

    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 ?

  17. Debian 8 est sortie avec MariaDB 10.0.16 dans les dépôts https://www.debian.org/News/2015/20150426

  18. Blackbird dit :

    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 🙁

  19. @Blackbird : merci pour ces précisions. c’est un peu ce qu’il m’avait semblé.

  20. BlackBird dit :

    @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’

  21. Benjbubu dit :

    @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…

  22. Benjbubu dit :

    @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 …