O apt-get trava ao atualizar o mysql-server-5.1

9

Quando tento fazer o seguinte:

sudo apt-get update
sudo apt-get upgrade

na minha instalação do Ubuntu Server 10.04, ele fica na seguinte linha:

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

Eu não consigo nem CTRL-C com isso! Acabo tendo que interromper minha sessão e efetuar login em um terminal diferente, e o processo de atualização ainda está em execução. Eu o reinicializei várias vezes e, quando volto e tento novamente, ele diz:

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

Quando faço isso, volto à estaca zero e congela quando tento atualizar o mySQL.

Roubar
fonte
1
e, isso seria você também ... newyork.ubuntuforums.org/showthread.php?t=1514195
nik
2
@nik: e? ele não deveria fazer uma pergunta em dois lugares? é bom postar em dois lugares? você está mostrando que sabe usar o Google?
msw
2
@ msw, não foi um comentário negativo ou um show. Na verdade, achei que encontrei outra referência a um problema semelhante ... mas, acabou não sendo assim.
N
@ msw: A postagem cruzada é ... controversa. É claro que isso maximiza a possibilidade de você obter uma resposta, mas também haverá equipes diferentes trabalhando na mesma coisa, provavelmente apresentando as mesmas sugestões e apenas desperdiçando seu tempo.
Bobby
A razão pela qual publiquei aqui foi porque não estou recebendo uma única resposta no ubuntuforums.org. Escusado será dizer que, não vou usá-los como um recurso técnico a partir de agora :)
Rob

Respostas:

2

Tente ir um nível abaixo do apt, depois de fazer backup de seus bancos de dados:

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

acrescentou :

Uma vez que dpkg -ré sufocante, tente dpkg --purgee falhe, que obtenha o conteúdo do pacote com dpkg -L mysql-server-5.1zap-los e depois mexa-se /var/lib/dpkg.

Eu nunca vi as coisas ficarem tão peludas, desculpe.

se no começo você não conseguir

Estou meio que pensando em voz alta aqui, me perdoe. O meta-pacote mysql-server contém ou requer estes pacotes:

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

Os metadados para gerenciamento de pacotes são deliciosamente dissociados, existem repositórios centrais, mas os pacotes são independentes. /var/cache/apt/archivesé onde os *.debarquivos que foram instalados ao vivo.

Primeiro, force o dpkg a esquecer esses pacotes (com risco de falha na remoção de alguns arquivos que vamos substituir de qualquer maneira).

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

Em seguida, obtenha os arquivos .deb necessários para uma instalação completa:

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

e tente instalá-los um por um:

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

se você tiver problemas, tente:

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

E tente encontrar as linhas relevantes fora do zilhão no arquivo de log e poste-as aqui. Boa sorte e velocidade divina.

msw
fonte
Quando eu faço o "dpkg -r mysql-server", ele diz que não está instalado. Então, eu tento "dpkg -r mysql-server-5.1" e diz: O pacote está em um estado inconsistente muito ruim - você deve reinstalá-lo antes de tentar remover.
Rob
Eu suponho que você tentou "dpkg -r mysql-server-5.1" e falhou?
usar o seguinte comando
Sim, falha. Ele reconhece que está lá, mas diz "O pacote está em um estado inconsistente muito ruim - você deve reinstalá-lo antes de tentar uma remoção".
Rob
"dpkg --purge" apresenta o mesmo erro. Então, devo excluir todos os arquivos listados com "dpkg -L mysql-server-5.1"? E o que você quer dizer com "muck" em / var / lib / dpkg?
Rob
adicionada próxima fase
msw
6

Aparentemente, a atualização está aguardando o servidor iniciar e, por algum motivo, não. Para corrigir o problema, existem várias possibilidades.

O mais fácil:

  1. Abra um novo terminal e execute:

    sudo services mysql start
    

Mais complicado, mas às vezes necessário: (isso é útil quando você não tem acesso a outro terminal):

  1. Pressione "^ z" ( Ctrl+ Z) para "PARAR" o seu trabalho. Então corra:

    sudo services mysql start
    
  2. Depois que o servidor for iniciado, digite o seguinte e pressione Enter:

    fg 
    

    Isso colocará seu trabalho "PARADO" em primeiro plano e continuará de onde parou.

Matt
fonte
No meu caso, estava realmente esperando o servidor iniciar.
Izak
Mesmo que o comando start tenha dito que já estava em execução, em alguns segundos o apt-get continuará bem. Obrigado
Liam Wheldon
2

Eu estava com esse problema porque era uma cópia de uma VM, portanto havia alterado o endereço IP do servidor, mas não o endereço de ligação no arquivo my.cnf. Depois de alterar o endereço de ligação para corresponder, a atualização não foi interrompida e foi concluída com êxito.

Andrew
fonte
1

Enfrentei o mesmo problema e passei mais de um dia depurando-o.

Quando removi o diretório do banco de dados /var/lib/mysql/, a instalação ocorreu sem problemas.

Puru Choudhary
fonte
2
Isso deve ser feito com cautela, certo?
slhck
1

Eu estava tendo esse problema exato, mas nenhuma das soluções existentes parecia apropriada. Forçar uma desinstalação é desnecessário em qualquer * nix e definitivamente não é o KISS. No meu caso, descobri que a causa era simples. O MySQL estava se recusando a iniciar porque ainda estava em execução! Quando o apt tentou parar o MySQL, ele estava ativo e nunca parou.

Como sempre, verifique se você tem backups!

Interrompa o serviço:

sudo service mysql stop

Verifique se o serviço não está mais em execução:

sudo ps ax | grep mysql

Se ainda estiver em execução, aguarde algum tempo:

sudo kill <pid>

Mas, eventualmente, se ainda estiver em execução, você deve matá-lo agressivamente:

sudo kill -9 <pid>

Depois de confirmar que não está mais em execução, você pode continuar com a atualização.

Após a atualização ser concluída, especialmente se você tiver que matar -9, execute o mysqlcheck para garantir que o que possa ter causado o serviço não seja interrompido não seja uma tabela corrompida ou quebrada. Verifique também se você possui backups regulares (e verifique se esses backups realmente funcionam!).

zaTricky
fonte
0

No meu caso, houve um problema com um /etc/mysql/my.cnf existente. A verificação do log de erros em /var/log/mysql/error.log revelou:

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

Obviamente, pode haver um problema diferente com o my.cnf, mas no meu caso, estávamos tentando ligar a um endereço IP antigo. Mudando para:

bind 127.0.0.1

corrigido isso e iniciar sem problemas.

rainkinz
fonte