Impossibile reinstallare mysql-server dopo la sua eliminazione

23

Recentemente ho fatto una nuova installazione di Ubuntu 16.04. Ho anche installato mysql-server e mysql-client (la loro versione predefinita 5.7.12) tramite apt-get install .

Poiché 5.7.12 stava mostrando alcuni problemi, ho deciso di disinstallarlo. Ho provato prima apt-get remove mysql-server mysql-client , ma ho visto che artefatti come /etc/mysql e /var/lib/mysql non sono stati rimossi.

Ho quindi provato apt-get --purge removed mysql-server mysql-client , ma ancora nessuna differenza.

Quindi li ho rimossi manualmente (tramite rm -rf ). Ho anche rimosso manualmente tutti i file *mysql* in /usr/ provenienti da qualsiasi pacchetto di dipendenza mysql-* come mysql-common .

Tuttavia, ora, quando desidero reinstallare mysql-server and -client , sto scoprendo che non posso.

In effetti, ora sono in uno stato in cui non posso né apt-get remove mysql-serverapt-get install mysql-server !

Come posso risolvere la situazione in cui mi trovo? Se i miei metadati del repository del pacchetto locale sono corrotti, come posso ripararli?

Non mi piacerebbe reinstallare l'intero sistema operativo benedetto con tutte le altre app e l'ambiente, ancora una volta solo a causa di mysql-server .

Quello che segue, ad esempio, è l'errore che ottengo quando tento di rimuovere mysql-server :

$ apt-get remove  mysql-server
Reading package lists... Done
Building dependency tree       
Reading state information... Done
The following packages were automatically installed and are no longer required:
  libaio1 mysql-client-5.7 mysql-client-core-5.7 mysql-common mysql-server-5.7 mysql-server-core-5.7
Use 'apt autoremove' to remove them.
The following packages will be REMOVED:
  mysql-server
0 upgraded, 0 newly installed, 1 to remove and 0 not upgraded.
2 not fully installed or removed.
After this operation, 159 kB disk space will be freed.
Do you want to continue? [Y/n] 
(Reading database ... 237601 files and directories currently installed.)
Removing mysql-server (5.7.12-0ubuntu1) ...
Setting up mysql-server-5.7 (5.7.12-0ubuntu1) ...
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
Errors were encountered while processing:
 mysql-server-5.7
E: Sub-process /usr/bin/dpkg returned an error code (1)

E quando provo a installare, ottengo questo errore:

$ apt-get -f install mysql-server
Reading package lists... Done
Building dependency tree       
Reading state information... Done
The following NEW packages will be installed:
  mysql-server
0 upgraded, 1 newly installed, 0 to remove and 0 not upgraded.
1 not fully installed or removed.
Need to get 0 B/10.1 kB of archives.
After this operation, 159 kB of additional disk space will be used.
Selecting previously unselected package mysql-server.
(Reading database ... 237599 files and directories currently installed.)
Preparing to unpack .../mysql-server_5.7.12-0ubuntu1_all.deb ...
Unpacking mysql-server (5.7.12-0ubuntu1) ...
Setting up mysql-server-5.7 (5.7.12-0ubuntu1) ...
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.
                                                                                                          Errors were encountered while processing:
 mysql-server-5.7
 mysql-server
E: Sub-process /usr/bin/dpkg returned an error code (1)

Ecco l'output di apt-get install -f :

$ apt-get install -f 
Reading package lists... Done
Building dependency tree       
Reading state information... Done
0 upgraded, 0 newly installed, 0 to remove and 0 not upgraded.
2 not fully installed or removed.
After this operation, 0 B of additional disk space will be used.
Setting up mysql-server-5.7 (5.7.12-0ubuntu1) ...
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.
                                                                                                          Errors were encountered while processing:
 mysql-server-5.7
 mysql-server
E: Sub-process /usr/bin/dpkg returned an error code (1)
    
posta Harry 27.04.2016 - 06:25

6 risposte

68

Modificato il 10 gennaio 2017 : questa è una revisione importante di questo post per correggere problemi gravi in ​​questo post.

The Error at Heart

Il problema è che il pacchetto si trova ancora nel sistema in uno stato mezzo installato e parzialmente configurato e deve essere rimosso esplicitamente.

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.
                                                                                                          Errors were encountered while processing:
 mysql-server-5.7
 mysql-server
E: Sub-process /usr/bin/dpkg returned an error code (1)

Ciò che realmente dice è che il pacchetto mysql-server-5.7 è una dipendenza per mysql-server , è già installato, ma non è configurato. Quindi devi purge per rimuovere quei breadcrumb lasciati da mysql-server-5.7 .

sudo apt purge mysql-server mysql-server-5.7

Motivazioni

Quando installi il software utilizzando apt , gestisce automaticamente anche le dipendenze per te.

Quando rimuovi determinati pacchetti, potrebbe non essere in grado di gestire le stesse dipendenze. Nel caso di questo post, tale dipendenza è mysql-server-5.7 .

Puoi verificare lo stato di un pacchetto emettendo il seguente comando.

dpkg-query -l [package-name-here]

Solitamente se vedi il codice un o rc a sinistra del nome del pacchetto, sarai in grado di dire se in realtà è un pacchetto danneggiato.

Quando ho riscontrato questo problema, era con libapache2-mod-php e libapache2-mod-php7.0 . Questo è stato il mio risultato.

Desired=Unknown/Install/Remove/Purge/Hold
| Status=Not/Inst/Conf-files/Unpacked/halF-conf/Half-inst/trig-aWait/Trig-pend
|/ Err?=(none)/Reinst-required (Status,Err: uppercase=bad)
||/ Name                        Version            Architecture       Description
+++-===========================-==================-==================-============================================================
un  libapache2-mod-php          <none>             <none>             (no description available)

Nel mio caso, ha affermato che lo stato del mio pacchetto è sconosciuto e che non è installato (il codice un ) sul mio sistema.

Quando si dice apt a remove qualcosa, può lasciare pacchetti, file di configurazione e altri elementi che possono essere problematici durante le installazioni automatizzate.

Quando dici a apt a purge qualcosa che fa è meglio rimuovere i breadcrumb che remove potrebbe aver lasciato indietro.

Originariamente affermavo che ritenevo che il processo fosse ancora in esecuzione, ma molto probabilmente era inattivo o morto.

Il modo migliore per verificare se il servizio sta interferendo con la rimozione del pacchetto è controllare innanzitutto il servizio.

1) Indagine sul servizio mysql

Utilizzando l'errore di sistema fornito da apt , possiamo effettivamente utilizzare systemctl per indagare sull'errore controllando lo stato del servizio mysql

sudo systemctl status [pattern]

Nel nostro caso, vogliamo vedere se mysql è in esecuzione, quindi è possibile digitare

systemctl status mysql.service

Dovresti vedere questo output se il servizio è in esecuzione

systemctl status mysql
● mysql.service - MySQL Community Server
   Loaded: loaded (/lib/systemd/system/mysql.service; enabled; vendor preset: enabled)
   Active: active (running) since Tue 2017-01-10 23:10:06 EST; 1h 3min ago
 Main PID: 1206 (mysqld)
   CGroup: /system.slice/mysql.service
           └─1206 /usr/sbin/mysqld

nota: se il servizio è morto, verrà visualizzato un breve messaggio che indica che non esiste alcun servizio con quel nome in esecuzione e quindi passa al passaggio 3.

2) Arresto del servizio mysql utilizzando systemctl

nota: [pattern] deve essere il nome elencato da service o initctl . il motivo per cui utilizzo pattern è dovuto al fatto che systemctl utilizza la corrispondenza delle espressioni regolari, quindi fai attenzione se devi utilizzare l'argomento kill .

sudo systemctl stop [pattern]

dove pattern rappresenta il nome del demone / servizio mysql. se stop non funziona prova

sudo systemctl kill [pattern]

Ad esempio

sudo systemctl stop mysql

3) Disinstallazione / eliminazione mysql

se hai bisogno di eliminare completamente, assicurati che il servizio o il processo siano fermati prima e assicurati di rimuovere i file e le directory corretti!

Nota. Assicurati di scegliere come target la versione mysql corretta. Ad esempio, se si utilizza 5.5, regolare opportunamente il numero di versione.

ATTENZIONE: i seguenti passaggi cancelleranno i tuoi dati! (il primo comando deve essere eseguito per eseguire un backup)

fonte: Come faccio a disinstallare MySQL?

tar -zcvf ~/msql_backup.tar.gz /etc/mysql /var/lib/mysql 
sudo apt purge mysql-server mysql-client mysql-common mysql-server-core-5.7 mysql-client-core-5.7
sudo rm -rfv /etc/mysql /var/lib/mysql
sudo apt autoremove
sudo apt autoclean

4) Correzione di pacchetti danneggiati e gestione delle dipendenze mancanti

Se i passaggi precedenti non hanno funzionato per te, potresti dover eseguire apt con l'opzione --fix-broken per riparare qualsiasi danno fatto.

Verifica prima apt update e poi apt install

sudo apt update    
sudo apt install mysql-server mysql-client --fix-broken --fix-missing

5) Quando tutto il resto fallisce, crea e installa mysql te stesso

Se nessuna delle operazioni precedenti funziona, dovrai scaricare manualmente la fonte, compilare e utilizzare make o bash per installare da lì (non così doloroso come sembra dal momento che è completamente automatizzato).

    
risposta data jargonjunkie 27.04.2016 - 10:46
5

Il problema con il primo post è che non è possibile riconfigurare bene un meta-pacchetto, non per gli elementi sql. Devi specificare l'elemento di rilascio corrente.

Dì uso;

apt search mysql-server

Questo dovrebbe mostrare un elenco di pacchetti vale a dire

"mysql-server-5.7" "mysql-server-core-5.7" o versioni successive

poi;

dpkg-reconfigure --force mysql-server-5.7 mysql-server-core-5.7

fatto.

    
risposta data e8hffff 16.03.2017 - 17:52
1

L'ho visto

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.

come indizio che esisteva ancora uno script di avvio errato.

Cerca /etc/init.d/mysql e qualsiasi symlink ad esso. La rimozione di questi file sembrava risolvere i miei problemi di reinstallazione dopo l'eliminazione.

    
risposta data ghatzhat 22.06.2016 - 23:04
1

Questa è la soluzione corretta per te

Per prima cosa, dovrai rimuovere tutti i pacchetti di mysql-server:

  

ATTENZIONE: i seguenti passaggi cancelleranno i tuoi dati! Fai prima un backup!

sudo rm -rf / var / lib / mysql Quindi installa:

sudo apt-get install lamp-server ^

O puoi fare:

sudo apt-get install mysql-server

    
risposta data Tarun Sharma 14.07.2017 - 13:21
0

Questo errore si verifica anche quando si passa da MySQL a MariaDB ( link ) .

I file di dati binari MySQL non erano compatibili con MariaDB quindi sono tornato a MySQL perché non avevo il tempo di pasticciare con mysqldump.

Per prima cosa ho dovuto spostare i dati di MariaDB da /var/lib/mysql , quindi installare MySQL e quindi spostare i miei dati originali da /var/lib/mysql-5.7 (questo backup è stato creato automaticamente prima dell'errore) a /var/lib/mysql .

    
risposta data baptx 06.11.2017 - 17:52
-3

Prova apt-get -f install per riparare il tuo pacchetto SQL rotto e se hai ancora problemi con il gestore dei pacchetti scarica il codice sorgente del server SQL e compila !! Ma prova sopra il comando e usa anche dpkg -l | grep sql per scoprire che il gestore di pacchetti pensa ancora che tu sia SQL o meno ..

    
risposta data Ali Ghasempour 27.04.2016 - 06:35

Leggi altre domande sui tag