apt-get si blocca durante l'aggiornamento di mysql-server-5.1


9

Quando provo a fare quanto segue:

sudo apt-get update
sudo apt-get upgrade

sulla mia installazione di Ubuntu Server 10.04, si blocca alla seguente riga:

Preparing to replace mysql-server-5.1 5.1.41-3ubuntu12.1 (using .../mysql-server-5.1_5.1.41-3ubuntu12.3_i386.deb)

Non riesco nemmeno a farne CTRL-C! Alla fine devo interrompere la sessione e accedere da un altro terminale e il processo di aggiornamento è ancora in esecuzione. L'ho riavviato più volte e quando torno e riprovo mi dice:

E: dpkg was interrupted, you must manually run 'sudo --configure -a' to correct the problem.

Una volta fatto questo, sono tornato al punto di partenza e si blocca quando provo ad aggiornare mySQL.



2
@nik: e? non dovrebbe fare una domanda in due posti? è bello postare in due posti? stai dimostrando di sapere come utilizzare Google?
msw,

2
@msw, non è stato un commento negativo o uno spettacolo. In effetti, pensavo di aver trovato un altro riferimento a un problema simile ... ma, si è rivelato non essere così.
nik,

@msw: Cross-Posting è ... controverso. Ovviamente massimizza la possibilità di ottenere una risposta, ma ci saranno anche diversi "team" che lavorano sulla stessa cosa, probabilmente escogitando gli stessi suggerimenti e semplicemente sprecando il loro tempo.
Bobby,

Il motivo per cui ho pubblicato qui è perché non ricevo una sola risposta su ubuntuforums.org. Inutile dire che d'ora in poi non li userò come risorsa tecnologica :)
Rob,

Risposte:


2

Prova ad andare al di sotto di apt, dopo aver eseguito il backup dei database:

sudo dpkg -r mysql-server
sudo apt-get check    # verify that apt's metadata is okay
sudo apt-get install mysql-server

aggiunto :

Dal momento che dpkg -rsta soffocando, prova dpkg --purgee fallisce che ottiene il contenuto del pacchetto con dpkg -L mysql-server-5.1zap e poi ci si immerge /var/lib/dpkg.

Non ho mai visto le cose diventare così pelose, scusa.

se all'inizio non ci riesci

Sto pensando a voce alta qui, perdonami. Il meta-pacchetto mysql-server contiene o richiede questi pacchetti:

libdbd-mysql-perl
libdbi-perl
libhtml-template-perl
libnet-daemon-perl
libplrpc-perl
mysql-client-5.1
mysql-client-core-5.1
mysql-server
mysql-server-5.1
mysql-server-core-5.1

I metadati per la gestione dei pacchetti sono deliziosamente disaccoppiati, ci sono repository centrali ma i pacchetti sono indipendenti. /var/cache/apt/archivesè dove vivono i *.debfile che sono stati installati.

Innanzitutto, forza dpkg a dimenticare questi pacchetti (a rischio di non riuscire a rimuovere alcuni file che sostituiremo comunque).

for i in mysql-server-core-5.1 mysql-server-5.1 ... ; do
    sudo dpkg -r --force-remove-reinstreq $i
done

Quindi ottenere i file .deb necessari per un'installazione completa:

sudo apt-get install --download-only mysql-server

e quindi prova a installarli uno per uno:

cd /var/cache/apt/archives
sudo dpkg -i mysql-server-core-5.1_5.1.41-3ubuntu12.3_i386.deb

se hai problemi lì, prova:

sudo dpkg -D77777 -i mysql-server-core-5.1... > 2>&1 /tmp/dpkg.log.$$

E prova a trovare le righe pertinenti fuori dallo zillion nel file di log e pubblicale qui. Buona fortuna e buona fortuna.


Quando faccio "dpkg -r mysql-server" mi dice che non è installato. Quindi provo "dpkg -r mysql-server-5.1" e dice: Il pacchetto è in uno stato incoerente molto cattivo - dovresti reinstallarlo prima di tentare una rimozione.
Rob,

Presumo che tu abbia provato "dpkg -r mysql-server-5.1" e non sia riuscito?
msw,

Sì, fallisce. Riconosce che è lì, ma dice "Il pacchetto è in uno stato incoerente molto brutto - dovresti reinstallarlo prima di tentare una rimozione."
Rob,

"dpkg --purge" dà lo stesso errore. Quindi dovrei semplicemente eliminare tutti i file elencati con "dpkg -L mysql-server-5.1"? E cosa intendi con "muck" in / var / lib / dpkg?
Rob,

aggiunta la prossima fase
msw

6

Apparentemente l'aggiornamento è in attesa dell'avvio del server e per qualche motivo non lo è. Per risolvere il problema ci sono diverse possibilità.

Il più facile:

  1. Apri un nuovo terminale ed esegui:

    sudo services mysql start
    

Più complicato ma a volte necessario: (è utile quando non si ha accesso a un altro terminale):

  1. Premi "^ z" ( Ctrl+ Z) per "FERMARE" il tuo lavoro. Quindi eseguire:

    sudo services mysql start
    
  2. Una volta avviato il server, digitare quanto segue e premere Invio:

    fg 
    

    Ciò riporterà in primo piano il lavoro "STOPPED" e continuerà da dove era stato interrotto.


Nel mio caso, stava davvero aspettando l'avvio del server.
izak,

Anche se il comando di avvio diceva che era già in esecuzione, in pochi secondi apt-get continuava bene. Grazie
Liam Wheldon,

2

Ho riscontrato questo problema perché era una copia di una macchina virtuale, quindi avevo modificato l'indirizzo IP del server ma non ho modificato l'indirizzo di bind nel file my.cnf. Dopo aver modificato l'indirizzo di bind in modo che corrisponda, l'aggiornamento non si è bloccato e completato correttamente.


1

Ho affrontato lo stesso problema e ho trascorso più di un giorno a debug.

Quando ho rimosso la directory del database /var/lib/mysql/, l'installazione è andata senza intoppi.


2
Questo dovrebbe essere fatto con cautela, giusto?
slhck,

1

Stavo avendo questo problema esatto ma nessuna delle soluzioni esistenti sembrava appropriata. Forzare una disinstallazione non dovrebbe essere necessario in nessun * nix e sicuramente non è BACIO. Nel mio caso ho scoperto che la causa era semplice. MySQL si stava rifiutando di avviarsi perché era ancora in esecuzione! Quando apt ha provato a fermare MySQL, era attivo e non si è mai realmente fermato.

Come sempre, assicurati di avere i backup!

Interrompere il servizio:

sudo service mysql stop

Assicurarsi che il servizio non sia più in esecuzione:

sudo ps ax | grep mysql

Se è ancora in esecuzione, dagli un po 'di tempo:

sudo kill <pid>

Ma alla fine, se è ancora in esecuzione, devi ucciderlo in modo aggressivo:

sudo kill -9 <pid>

Dopo aver verificato che non è più in esecuzione, è possibile continuare con l'aggiornamento.

Una volta completato l'aggiornamento, soprattutto se è stato necessario eliminare -9, assicurarsi di eseguire mysqlcheck per assicurarsi che tutto ciò che potrebbe aver causato l'interruzione del servizio non sia una tabella danneggiata o danneggiata. Assicurati anche di avere backup regolari (e assicurati che quei backup funzionino davvero!).


0

Nel mio caso si è verificato un problema con un /etc/mysql/my.cnf esistente. Controllo del log degli errori in /var/log/mysql/error.log rivelato:

150112  5:45:47 [ERROR] Can't start server: Bind on TCP/IP port: Cannot assign requested address
150112  5:45:47 [ERROR] Do you already have another mysqld server running on port: 3306 ?
150112  5:45:47 [ERROR] Aborting

150112  5:45:47  InnoDB: Starting shutdown...
150112  5:45:52  InnoDB: Shutdown completed; log sequence number 0 1883376705
150112  5:45:52 [Note] /usr/sbin/mysqld: Shutdown complete

Ovviamente potrebbe esserci un problema diverso con my.cnf, ma nel mio caso è stato che stavamo cercando di associare un vecchio indirizzo IP. Passando a:

bind 127.0.0.1

risolto ciò e non si avviava nessun problema.

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.