L'aggiornamento 16.04 ha rotto mysql-server


127

Il mio aggiornamento generale è andato bene, ma mi è rimasto un problema critico di mysql-server che non è in grado di installarsi da solo, e nulla di ciò che sto provando lo fa funzionare.

Questo è l'errore che vedo quando provo a installarlo / reinstallarlo:

Setting up mysql-server-5.7 (5.7.11-0ubuntu6) ...
Job for mysql.service failed because the control process exited with error code. See "systemctl status mysql.service" and "journalctl -xe" for details.
invoke-rc.d: initscript mysql, action "start" failed.
dpkg: error processing package mysql-server-5.7 (--configure):
 subprocess installed post-installation script returned error exit status 1
dpkg: dependency problems prevent configuration of mysql-server:
 mysql-server depends on mysql-server-5.7; however:
  Package mysql-server-5.7 is not configured yet.

dpkg: error processing package mysql-server (--configure):
 dependency problems - leaving unconfigured
No apport report written because the error message indicates its a followup error from a previous failure.
                   Processing triggers for systemd (229-4ubuntu4) ...
Processing triggers for ureadahead (0.100.0-19) ...
Errors were encountered while processing:
 mysql-server-5.7
 mysql-server
E: Sub-process /usr/bin/dpkg returned an error code (1)

Ho provato a rimuoverlo completamente, anche se così facendo tenta di installare MariaDB a causa delle dipendenze (?). Qualsiasi suggerimento su cosa posso fare per risolvere questo problema sarebbe il benvenuto.

EDIT: Sembra che io non sia l'unico: https://bugs.launchpad.net/ubuntu/+source/mysql-5.7/+bug/1573279


Ho lo stesso problema qui .
KernelPanic,

1
Ho dovuto disinstallare phpmyadmin, che stava causando in qualche modo i problemi di dipendenza. Dopo la reinstallazione, tutto funziona di nuovo correttamente.
Hinrich,

1
do-release-upgrade da Ubuntu 14 a 16 esegue un aggiornamento non supportato da MySQL 5.5 a 5.7, quindi si prevede che MySQL sia rotto dopo, come riportato qui: bugs.launchpad.net/ubuntu/+source/ubuntu-release-upgrader/ + bug /…
Marco Marsala

1
@MarcoMarsala Non so se possiamo dire che si prevede che MySQL si rompa dopo l'aggiornamento di Ubuntu 14 a 16, anche se suppongo che dipenda dalla tua prospettiva. Per l'utente medio, non si prevede certamente che un aggiornamento LTS rompa qualcosa come MySQL. È sorprendente che non sia stato catturato durante i test.
TheGremlyn,

apt install phpmyadmin --reinstall risolto quanto sopra senza bisogno di toccare mysql dopo ... vai a figura
Andy

Risposte:


119

Le istruzioni pubblicate da @ andrew-beerman sono sulla buona strada, anche se non sono abbastanza chiare per me e sembrano raccomandare più del necessario. Ho messo insieme la risposta di cui sopra e un post utile nel thread di bug.

Questi sono i passi che ho preso per correggere questo:

  1. Eseguire il backup di my.cnf filein /etc/mysqle rimuoverlo o rinominarlo

    sudo mv /etc/mysql/my.cnf /etc/mysql/my.cnf.bak
    
  2. Rimuovere la cartella /etc/mysql/mysql.conf.d/utilizzando

    sudo rm -r /etc/mysql/mysql.conf.d/
    
  3. Verifica di non avere un my.cnffile nascosto da qualche altra parte (l'ho fatto nella mia home directory!) O in /etc/alternatives/my.cnfuso

    sudo find / -name my.cnf
    
  4. Eseguire il backup e rimuovere i /etc/mysql/debian.cnffile (non sono sicuro se necessario, ma per ogni evenienza)

    sudo mv /etc/mysql/debian.cnf /etc/mysql/debian.cnf.bak
    sudo apt purge mysql-server mysql-server-5.7 mysql-server-core-5.7
    sudo apt install mysql-server
    
  5. Nel caso in cui il tuo syslog mostri un errore del tipo "mysqld: impossibile leggere dir di '/etc/mysql/conf.d/'" crea un collegamento simbolico:

    sudo ln -s /etc/mysql/mysql.conf.d /etc/mysql/conf.d
    

    Quindi il servizio dovrebbe essere in grado di iniziare sudo service mysql start.

Ha funzionato!


17
dopo tutte queste operazioni (l'ho fatto prima) ho ancora gli stessi problemi di errore ...
Serge

5
Devi rimuovere ogni my.cnf. * Dalla directory / etc / mysql. Cerca my.cnf.backup, my.cnf.fallback e my.cnf.migrated - anche tutti questi file devono essere rimossi (backup prima!)
hitzi

8
@SergiiP sudo find / -name "my.cnf"potrebbe tornare utile.
starbeamrainbowlabs

1
mysql-server-core- dovrebbe essere mysql-server-core-5.7. Altrimenti ha funzionato come un fascino. Grazie!
David Tay,

1
+1. Mi hai migliorato la giornata! Anche mattina e sera! Ero bloccato.
Max Yudin,

56

Oggi ho avuto lo stesso problema, dopo aver provato molte soluzioni ho scoperto che il problema era il comando sudo systemctl disable mysql.serviceche ho usato per disabilitare l'avvio automatico di MySQL, quindi per farlo funzionare ho riabilitato nuovamente il server MySQL usando il comando sudo systemctl enable mysql.serviceed eseguito di nuovo il processo di aggiornamento e è terminato perfettamente.


5
Mi sono imbattuto in questo stesso problema e la stessa soluzione ha funzionato per me.
Allen

5
Ha funzionato per me. Ho fatto ogni soluzione qui, mysql ha funzionato dopo questa.
Błażej Michalik,

6
Lo stesso qui - questo dovrebbe essere il primo post.
a1phanumeric,

3
Ha funzionato anche per me! Grazie mille. Giusto per essere espliciti, corri: sudo systemctl enable mysql.servicee dopo quella corsa sudo apt install -f.
Fernando Paladini,

Questo è tutto ciò che dovevo fare. Avevo disabilitato l'avvio automatico come descritto da @naruto. Ho abilitato l'avvio automatico ed eseguo "sudo apt upgrade". Ora risolto. Dovrebbe essere la risposta migliore. Questa è una soluzione molto più semplice, più standard e meno soggetta a problemi.
Jack Holt,

20

Il tuo messaggio di errore contiene questa riga:

subprocess installed post-installation script returned error exit status 1

Tuttavia, questo installed post-installation scriptnon è menzionato per nome. Dopo aver armeggiato molto, ho scoperto che il suo nome è (nel mio caso) /var/lib/dpkg/info/mysql-server-5.7.postinst.

Apri questo file con sudo vi /var/lib/dpkg/info/mysql-server-5.7.postinsto il tuo editor preferito.

In alto, cambia la riga 3 (o giù di lì): set -ein set -x, salva il file. (l'opzione -eè "esci dagli errori", -xsignifica "mostra esplicitamente il comando eseguito", presumibilmente)

Esegui sudo dpkg --configure -a --log /tmp/dpkg.log (l'opzione --log è facoltativa). Puoi anche semplicemente eseguire apt upgradese sai che sarà l'unico pacchetto che verrà aggiornato.

Ora ottieni un output dettagliato dello mysql-server-5.7.postinstscript bash e puoi capire cosa c'è che non va.

Nel mio caso ha tentato (ri) di eseguire senza successo mysql_upgrade, ma ciò non era necessario per la mia installazione mysql personalizzata. Ero sicuro di averlo eseguito manualmente prima, con successo, e tutto andava bene.

Così ho iniziato la linea 321 (per le versioni precedenti di mysqld prova la linea 281),

#mysql_upgrade --defaults-file=/etc/mysql/debian.cnf || result=$?

e il comando che non ha funzionato prima sudo apt upgrade(eseguirlo di nuovo), è stato completato correttamente e dpkg ha rimosso lo stato di errore per questo pacchetto.

Ora è possibile impostare di nuovo l' set -xa set -e(di cui sopra). E facoltativamente decommenta la linea di aggiornamento mysql.

Potrebbe essere necessario un lavoro extra se la partizione dati mysql è stata spostata in una posizione non standard. Ho spostato il mio da /var/lib/mysql/dataun'altra unità tramite symlink. Quindi potrebbe essere necessario rimuovere temporaneamente il collegamento simbolico, prima della postinstmanipolazione dello script. Quindi ricrearlo dopo aver eseguito l'aggiornamento del pacchetto.

Dopo il prossimo aggiornamento della versione secondaria del pacchetto debian mysqld, questo problema con lo /var/lib/dpkg/info/mysql-server-5.7.postinstscript può essere nuovamente visualizzato.


Ho finito per eliminare tutto e quindi scaricare la versione di mysql-server della community e installarla manualmente da qui: dev.mysql.com/downloads/mysql
RyanNerd

Esattamente la stessa cosa mi è successa e i tuoi passi l'hanno risolto. Bur per me la mia chiamata mysql_upgrade era sulla linea 320. Puoi spiegare perché restituisce un valore diverso da zero quando viene chiamato dallo script postinst?
emiliopedrollo,

@emiliopedrollo No, non posso spiegarlo qui. Ma penso che il numero di riga ora sia 320 perché recentemente i manutentori del pacchetto hanno aumentato lo script postinstall, ho osservato la stessa cosa l'altro giorno, durante l'ultima esecuzione del software-updater (che includeva un nuovo pacchetto mysql-deb) .
Knb

Grazie! Con set -esono stato in grado di risolvere il problema esatto - MySQL non aveva accesso per l'utente del sistema ubuntu specificato in /etc/mysql/debian.cnf . Quindi ho aggiunto questo utente a MySQL e ho concesso i privilegi, dpkgho funzionato di nuovo e ha funzionato!
Allen Hamilton,

17

Le istruzioni qui sono state corrette sul mio server: https://bugs.mysql.com/bug.php?id=72722

Riesco a capire il dolore di avere il tuo sistema in uno stato incoerente, ma non ci preoccupiamo dell'intera situazione e lo faccio passo dopo passo per pulire il sistema.

Per prima cosa vediamo lo stato corrente di tutti i pacchetti mysql sulla macchina usando: dpkg -l | grep mysql (incollare l'output esclusa l'ultima colonna)

La prima colonna indica lo stato corrente del pacchetto. Ecco le possibili opzioni:

ii) Rc installato) File di configurazione rimossi mantenuti (Questo dovrebbe essere lo stato di tutti i pacchetti che sono stati rimossi con 'apt-get remove' che non rimuove i file di configurazione in / etc)

Affinché ciò funzioni, dovrai eseguire 'apt-get purge <pkg-name>' fino a quando non vedi alcun pacchetto nell'elenco sopra.

Ricorda che alcuni pacchetti non mysql-server come python-mysql.connector e python-mysqldb, se installati, non devono essere rimossi in quanto non hanno alcun effetto su questa situazione ma se rimossi potrebbero causare problemi alle applicazioni che li utilizzano.

Cercheremo sicuramente di visitare nuovamente i nostri documenti per vedere come possiamo proteggere gli utenti da questo problema. Grazie per aver condiviso i tuoi commenti in dettaglio con noi.


2
Grazie per dpkg -l | grep mysql . Ha aiutato a capire la direzione.
Max Yudin,

il comando era sbagliato per l'eliminazione, deve essere stato sudo apt-get purge <pkg-name>corretto con una modifica ma: ho usato caratteri unicode per il <perché altrimenti non verrebbe visualizzato.
Fai

3

Nel mio caso, con strace, ho visto che / var / run / mysqld / non esisteva e mysqld non può creare il file mysqld.sock.

Questi comandi hanno risolto il mio problema:

mkdir /var/run/mysqld
chown mysql.mysql /var/run/mysqld
chmod 700 /var/run/mysqld

Adesso:

systemctl start mysql

E mysql funziona di nuovo :)


Ti suggerisco di aggiungere queste righe a / usr / share / mysql / mysql-systemd-start a partire dalla riga 25, quindi non dovrai ricreare questa directory dopo ogni riavvio (mi dispiace che la riga ritorni non funzioni in questo commento) : Se [ ! -d / run / msyqld]; quindi mkdir -p -m0755 / run / mysqld || {echo "Impossibile creare / eseguire / mysqld"; uscita 1; } chown mysql: mysql / run / mysqld || {echo "Impossibile chown / run / mysqld"; uscita 1; } fi
scoobydoo,

3

Nel mio caso ho potuto risolvere il problema aggiungendo

# Allow log file access
/home/system/var/log/mysql.err rw,
/home/system/var/log/mysql.log rw,
/home/system/var/log/mysql/ r,
/home/system/var/log/mysql/** rw,

per /etc/apparmor.d/local/usr.sbin.mysqld

Per maggiori dettagli dai un'occhiata alla mia risposta (di ChristophS) su StackOverflow.


0

Ho avuto lo stesso problema. Ho provato a reinstallare mysql diverse volte, ma non ho avuto successo.

Ho capito che il problema per me era che un altro processo mysql era già in esecuzione.

Nei dettagli:

Dopo aver letto attentamente accedi /var/log/mysql/error.loge ho trovato:

[ERRORE] Impossibile avviare il server: collegamento alla porta TCP / IP: indirizzo già in uso

[ERRORE] Hai già un altro server mysqld in esecuzione sulla porta: 3306?

Sembra che un'altra applicazione stia già utilizzando la porta.

L'ho controllato usando ps -aux | grep 3306:

$ ps -aux | grep 3306
milkovs+  6802  0.0  0.0  16336  1084 pts/19   S+   21:39   0:00 grep --color=auto 3306
mysql    14706  0.0  0.3 1270192 13916 pts/2   Sl   Aug19   0:29 /usr/sbin/mysqld --basedir=/usr --datadir=/var/lib/mysql --plugin-dir=/usr/lib/mysql/plugin --user=mysql --skip-grant-tables --log-error=/var/log/mysql/error.log --pid-file=/var/run/mysqld/mysqld.pid --socket=/var/run/mysqld/mysqld.sock --port=3306 --log-syslog=1 --log-syslog-facility=daemon --log-syslog-tag=

E ho ucciso il processo in corso sudo kill -15 14706

Quindi ho avviato mysql: /etc/init.d/mysql start

Finalmente mysql funziona per me! Spero che aiuti qualcuno.


0

Nessuna delle risposte in questa pagina ha funzionato per me.

Ho finito per andare alla pagina dei download di Oracle , scaricare mysql-apt-config_0.8.8-1_all.debe installare MySQL dal repository Oracle:

sudo dpkg -i mysql-apt-config_0.8.8-1_all.deb
sudo apt update
sudo apt install mysql-server

2
isntall-> installrefuso. La stupida SO non mi permette di correggere un personaggio.
Csaba Toth,

Perché sei andato all'oracolo per scaricare mysql
Sinscary il

@Sinscary Questa risposta è di qualche tempo fa, ma probabilmente era perché avevano una versione più recente rispetto al gestore dei pacchetti di sistema?
ostrokach,

0

Ho avuto il problema su alcuni server ora La correzione era eseguire apt install phpmyadmin --reinstall

che ha risolto quanto sopra (senza bisogno di toccare mysql in seguito)

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.