aggiornamento 16.04 ha rotto mysql-server

110

Il mio upgrade generale è andato bene, ma mi rimane un problema critico di mysql-server che non è in grado di installarsi da solo, e niente di ciò che sto cercando lo fa funzionare.

Questo è l'errore che vedo quando provo ad 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 molto gradito.

EDIT: Sembra che non sia l'unico: link

    
posta TheGremlyn 22.04.2016 - 19:53

8 risposte

110

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

Questi sono i passi che ho seguito per correggere questo:

  1. Esegui il backup del my.cnf file in /etc/mysql e rimuovilo o rinominalo

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

    sudo rm -r /etc/mysql/mysql.conf.d/
    
  3. Verifica di non avere un file my.cnf nascosto da qualche altra parte (ho fatto nella mia directory home!) o in /etc/alternatives/my.cnf usa

    sudo find / -name my.cnf
    
  4. Backup e rimozione dei file /etc/mysql/debian.cnf (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 come "mysqld: Non puoi leggere la dir di" /etc/mysql/conf.d/ "" crea un link simbolico:

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

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

Funzionava!

    
risposta data TheGremlyn 25.04.2016 - 15:38
53

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

    
risposta data Naruto Biju Mode 26.04.2016 - 00:37
17

Le istruzioni qui sono corrette sul mio server: link

  

Posso capire il dolore di avere il tuo sistema in uno stato incoerente   ma non preoccuparti dell'intera situazione e prendila passo dopo passo   per rendere il sistema pulito.

     

Prima consente di vedere lo stato corrente di tutti i pacchetti mysql sulla macchina   utilizzando: dpkg -l | grep mysql (Si prega di incollare l'output escludendo l'ultimo   colonna)

     

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

     

ii) Installato rc) File di configurazione rimossi mantenuti (Questo dovrebbe essere lo stato   di tutti i pacchetti che hai rimosso con "apt-get remove"   non rimuovere i file di configurazione in / etc)

     

Affinché funzioni, è necessario eseguire "apt-get purge" fino a   non vedi alcun pacchetto nell'elenco precedente.

     

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

     

Cercheremo sicuramente di ri-visitare i nostri documenti per vedere come possiamo   salvaguardare gli utenti da questo problema. Grazie per la condivisione   il tuo feedback in dettaglio con noi.

    
risposta data Andrew Beeman 23.04.2016 - 00:05
17

Il tuo messaggio di errore contiene questa riga:

subprocess installed post-installation script returned error exit status 1

Tuttavia, questo installed post-installation script non è menzionato per nome. Dopo molti tentativi, 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.postinst o il tuo editor preferito.

In alto, cambia la linea 3 (o così): set -e in set -x , salva il file. (l'opzione -e è "exit on errors", -x significa "esplicitamente show command eseguito", presumibilmente)

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

Ora ottieni l'output dettagliato dello script di mysql-server-5.7.postinst bash e puoi capire cosa c'è che non va.

Nel mio caso ha tentato invano di eseguire (ri) eseguire mysql_upgrade , ma non era necessario per l'installazione personalizzata di mysql. Ero sicuro l'ho eseguito manualmente prima, con successo, e tutto andava bene.

Quindi ho eseguito la linea 321 (per le vecchie versioni di mysqld prova la riga 281),

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

e il comando che ha fallito prima, sudo apt upgrade (eseguilo di nuovo), finito con successo e dpkg ha rimosso lo stato di errore per questo pacchetto.

Ora puoi impostare set -x su set -e (menzionato sopra). E opzionalmente disattivi la linea mysql-upgrade.

Potrebbe essere necessario un lavoro aggiuntivo se hai spostato la tua partizione dati mysql in una posizione non standard. Ho spostato il mio da /var/lib/mysql/data a un altro drive tramite symlink. Quindi potresti dover rimuovere temporaneamente il collegamento simbolico, prima della manipolazione di script postinst . Quindi ricrearlo dopo aver eseguito l'aggiornamento del pacchetto.

Dopo il prossimo aggiornamento della versione secondaria del pacchetto debian di mysqld, questo problema con lo script /var/lib/dpkg/info/mysql-server-5.7.postinst può comparire di nuovo.

    
risposta data knb 01.07.2016 - 14:03
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

Ora:

systemctl start mysql

E mysql funziona di nuovo:)

    
risposta data Leonardo Catalinas 27.04.2016 - 10:14
3

Nel mio caso, avrei 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,

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

Per maggiori dettagli guarda il mio answer (di ChristophS) su stackoverflow.

    
risposta data ChristophS 29.04.2016 - 14:30
1

Nessuna delle risposte di questa pagina ha funzionato per me.

Ho finito per andare alla pagina di download di Oracle , scaricando mysql-apt-config_0.8.8-1_all.deb e installando MySQL dal repository Oracle:

sudo dpkg -i mysql-apt-config_0.8.8-1_all.deb
sudo apt update
sudo apt install mysql-server
    
risposta data ostrokach 25.09.2017 - 19:19
0

Ho avuto lo stesso problema. Ho provato a reinstallare mysql più volte, ma non ha avuto successo.

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

In dettaglio:

Dopo aver letto attentamente, accedi a /var/log/mysql/error.log , e trovo:

  

[ERROR] Impossibile avviare il server: Bind on TCP / IP port: Address already in   usare

     

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

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

L'ho controllato con 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 esecuzione sudo kill -15 14706

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

Finalmente mysql funziona per me! Spero che aiuti qualcuno.

    
risposta data milkovsky 20.08.2016 - 22:02

Leggi altre domande sui tag