La mise à niveau vers MySQL 5.7.15 se bloque sur Ubuntu 16.04

13

Hier soir, j'ai essayé de mettre à niveau mon système d'exploitation Ubuntu et MySQL 5.7.15 a été l'un des changements. Il semble que la mise à niveau soit réussie car mysql fonctionne correctement, mais le processus d'installation a cessé de fonctionner avec ce message:

This installation of MySQL is already upgraded to 5.7.15, 
use --force if you still need to run mysql_upgrade

Je ne peux pas annuler le processus d'installation de manière reqular et je dois juste le tuer. Cela peut donc causer des problèmes et pour toute autre installation (à l'avenir), il essaie de le faire à nouveau.

Comment empêcher cette mise à niveau ou la résoudre?

Omid
la source

Réponses:

12

Cette solution a résolu mon problème:

  1. Sauvegardez vos fichiers de base de données avec des autorisations:

    sudo cp -avt /your/backup/directory /var/lib/mysql /etc/mysql/my.cnf
    
  2. Supprimez les fichiers mysql:

    sudo rm -rv /etc/mysql 
    
  3. Supprimez complètement MySQL en exécutant:

    sudo apt purge mysql-server mysql-server-5.7 mysql-server-core-5.7 mysql-client-5.7 mysql-client-core-5.7
    

    L'utilisation de Synaptic est recommandée.

  4. Créez ces dossiers:

    sudo mkdir -p /etc/mysql/conf.d
    

    La configuration de mysql ne l'a pas fait automatiquement et je ne sais pas pourquoi.

  5. Installez à nouveau MySQL

    sudo apt install mysql-server
    

    J'ai utilisé à la sudo apt install lamp-server^place pour installer d'autres dépendances pour le développement PHP.

  6. Arrêtez MySQL:

    sudo service mysql stop 
    
  7. Restaurer des bases de données et des fichiers:

    sudo cp -a /your/backup/directory/mysql /var/lib   
    sudo cp /your/backup/directory/my.cnf /etc/mysql 
    
  8. Redémarrez MySQL:

    sudo service mysql start 
    
Omid
la source
1
dpkg: erreur lors du nettoyage: le script de post-installation installé par le sous-processus a renvoyé le statut de sortie d'erreur 1 Des erreurs ont été rencontrées lors du traitement: mysql-server-5.7
Stevie G
Élément clé est la suppression: sudo rm /var/cache/debconf/config.dat, sudo rm /var/cache/debconf/passwords.datet sudo rm /var/cache/debconf/templates.dat. Puis purgez tout. Faites ensuite un redémarrage du système.
Stevie G
J'ai eu le même problème et l'ai résolu avec cette procédure. Je recommande un redémarrage du système après avoir purgé MySQL. Il semble que cela empêche le problème signalé par Stevie.
Tsutomu
4

J'ai réussi à résoudre ce problème sans avoir à tout purger. Il semble que le problème soit que la base de données du schéma sys n'ait jamais été créée, voici donc la solution:

  1. Clonez https://github.com/mysql/mysql-sys et cd dans le dossier cloné.
  2. Dans un terminal, exécutez mysql -u root -p <./sys_57.sql (ou sys_56.sql, selon votre version)

Profitez de nouveau de mysql_upgrade. Je suppose que c'était probablement un gâchis de mise à niveau des scripts.

Asefa Tasew
la source
Oui, c'est un problème de mise à niveau des bases de données. Malheureusement, je ne peux plus tester votre solution pour voir si elle fonctionne ou non.
Omid
J'ai essayé cette solution sur mon installation mysql 5.7.22 qui rapportait "Cette installation de MySQL est déjà mise à niveau vers 5.7.22, utilisez --force si vous avez encore besoin d'exécuter mysql_upgrade" et cela a fonctionné comme un charme
henrik
2

J'avais aussi ce problème. Chaque fois que j'ai commencé apt get et installé, le processus se bloquait après ou pendant la mise à jour de la base de données. Aucune des autres solutions n'a fonctionné ici.

À la fin j'ai purgé

sudo apt purge mysql-server mysql-server-5.7

Et suivi l'installation manuelle à partir des instructions pour mysql ici

J'ai ensuite écrasé le répertoire de données avec mes anciennes données

sudo cp -Rfv /var/lib/mysql /usr/local/mysql/data

et enfin ajouté un service systemd comme celui-ci

/lib/systemd/system/mysql.service

[Unit]
Description=MySQL Server
After=syslog.target
After=network.target

[Service]
Type=simple
PermissionsStartOnly=true
ExecStartPre=/bin/mkdir -p /var/run/mysqld
ExecStartPre=/bin/chown mysql:mysql -R /var/run/mysqld
ExecStart=/usr/local/mysql/bin/mysqld --basedir=/usr/local/mysql --datadir=/usr/local/mysql/data --plugin-dir=/usr/lib/mysql/plugin --log-error=/var/log/mysql/error.log --pid-file=/var/run/mysqld/mysqld.pid --socket=/var/run/mysqld/mysqld.sock --port=3306
TimeoutSec=300
PrivateTmp=true
User=mysql
Group=mysql
WorkingDirectory=/usr

[Install]
WantedBy=multi-user.target

Puis couru

# systemctl daemon-reload
# systemctl enable mysql
# systemctl start mysql

Ensuite, tout semblait fonctionner comme avant et mysql ne cassait pas les mises à jour du système

L'inconvénient, bien sûr, est que je devrai faire des mises à jour manuelles à l'avenir.

Jeremy French
la source
1

Si votre localhostcompte root @ n'a pas de mot de passe, il y a un bogue dans le processus de post-installation comme indiqué ici (voir en particulier le dernier commentaire du fil)

  • purger tous les TMP*fichiers dans/var/lib/mysql-files
  • éditez le fichier /var/lib/dpkg/info/mysql-server-5.7.postinstet commentez (en utilisant #) la ligne 370:

    echo "ALTER USER 'root'@'localhost' IDENTIFIED WITH 'auth_socket';" >> "$initfile"

  • courir à nouveau sudo dpkg --configure -a

Gab - laissé Monica
la source
Oh mon cher! <3 Vous m'avez sauvé la vie: p Remarque pour la postérité: vous voudrez peut-être empêcher la mise à jour de mysql (qui échouera de la même manière) en utilisantapt-mark hold mysql-server-5.7
Gab - laissé Monica