Mise à jour de MySQL de 5.7 à 8.0 sur Ubuntu 18.04 LTS bionic qui se passe mal.

Nous allons voir dans cet article la mise à jour du serveur de base de données MySQL de la version 5.7 à la version 8.0 sur un système Ubuntu 18.04 LTS nommée Bionic qui plante, bien malheusement. Le package disponible sur le repository apt-get de bionic/universe est mysql-server-5.7, qui a le fichier d’installation mysql-server_5.7.21-1ubuntu1_all.deb. Dans cet article, je montre l’installation du dépôt MySQL APT, en suivant bien les instructions concernant les dépendances.

Un fond d'océean et le logo Ubuntu 3D MySQL 8.0 cassé

Donc cela ne nous intéresse pas tellement, je voudrais mettre à jour à la dernière version de mySQL server pour que les requètes acceptent RLIKE et les caractères unicodes. Au moment où j’écris l’article, cela va de la 8.0.11 à la 8.0.21 du 2020/07/13 pour les releases avec une disponibilité générale.

MySQL Community

On va donc sur le site MySQL V Downloads V MySQL Community Downloads. On voit que l’on nous propose un repository APT :

Page web SQL Community Downloads

On va donc sur le repo apt et l’on nous propose de charger un fichier .deb d’installation pour linux. L’adresse n’est pas donnée, mais en le téléchargeant, on relève l’adresse : https://repo.mysql.com//mysql-apt-config_0.8.15-1_all.deb.

On va donc télécharger ce fichier d’installation et l’installer. Il est censé installer le repository MySQL APT.

Sauvegarde des bases

Pour plus de sécurité, on sauvegarde les bases actuelles. Elles sont stockées dans le répertoire : /var/lib/mysql. MySQL ne stocke pas les données sous forme de fichiers .sql. Il stocke les données sous forme de fichiers MyISAM ou InnoDB. Le mieux est de sauvegarder ce dossier dans un fichier .tar.gz.

Comme cela, si l’installation échoue, on réinstallera la même version de mySQL, et l’on récupérera toutes les données.

Dans cet article, je présente deux scripts SHELL permettant d’automatiser la tâche.

Version MySQL installée

Pour la version MySQL, phpMyAdmin nous indique Server version: 5.7.31-0ubuntu0.18.04.1 - (Ubuntu).

Pour connaître la version installée, et la version disponible sur le repo bionic, on lance :

Pour connaître juste la version :

Installation de MySQL Community Server

Pour installer un fichier .deb, on utilise la commande dpkg -i, suivi de apt-get install -f pour les dépendances brisées ou manquantes s’il y en a.

On installe le fichier .deb qui ajoute le repository MySQL APT au système. On obtient un premier écran de sélection, on appuie sur Entrée :

mysql APT repository, écran de sélection lors de l'installation

On nous demande de choisir la version mySQL que l’on souhaite recevoir. On sélectionne mysql-8.0 et l’on appuie sur Entrée :

Deuxième écran de sélection, on choisit mysql-8.0

On a alors un troisème écran de sélection, on choisit OK et l’on appuie sur Entrée :

3ème écran de sélection, on sélectionne OK et l'on appuie sur Entrée.

Une fois le dépôt installé, on met à jour apt, et l’on installe le serveur MySQL sudo apt-get, on choisit de garder le fichier de configuration /etc/mysql/mysql.cnf en répondant N à la question :

Le système prend du temps et ne rend pas la main, donc on attend.

Beh, non, cela a planté, système bloqué à cette étape, gros problème avec My SQL Community Server. J’avais bien fait de faire la sauvegarde. Maintenant, il faut retrouver le système avant cela.

Arrêter le serveur MySQL

Et je crois avoir compris ma grossière erreur : je n’ai pas arrêté le serveur MySQL avant de lancer l’intallation de la mise à jour. Au moment de créer un lien symbolique, l’installation s’est figée. Un fichier devait certainement être en cours d’utilisation.

La morale de ceci est qu’il faut toujours faire des sauvegardes des bases, éviter de foncer la tête la première sans prendre le temps de réflechir.

Réinstallation de MySQL 5.7

On purge le système de mysql-community-server :

On met à jour :

Si le serveur demande d’effacer l’ancien répertoire /var/lib/mysql, on accepte. On a à présent une installation fraîche sans aucune base personnalisée.

Si ce n’est pas le cas, on réinstalle mysql-server :

À ce point, il ne faut pas stressé, les bases sont sauvegardées, on va les récupérer. Bien entendu, tous les sites sont inaccessibles.

Réinstallation des bases sauvegardées

On stoppe mysql, ce que l’on aurait dû faire avant. On recopie les fichiers sauvegardés dans /var/lib/mysql et l’on change l’utilisateur et le groupe en mysql :

On redémarre mysql et l’on met à jour les bases en utilisant le mot de passe root de l’ancienne installation :

On redémarre le serveur http ; pour mon installation, c’est NGinx :

Et hop, on a récupéré les anciennes bases sauvegardées de /var/lib/mysql. On a toujours pas mis à jour mais on a eu un coup de chaud. Comme j’avais fait la sauvegarde pendant l’écriture de cet article, l’éditeur Gutenberg a quasiment tout récupéré. C’est bizarre, j’ai bien envie de recommencer, il n’y a pas de raison de s’arrêter en si bon chemin. La prochaine fois, après avoir sauvegardé les tables, j’arrête le serveur MySQL.

Dans cet article, je présente deux scripts SHELL pemettant d’automatiser la sauvegarde des tables.

Soumettre un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *

Ce site utilise Akismet pour réduire les indésirables.