Não é possível reinstalar o mysql-server após sua limpeza

22

Eu recentemente fiz uma nova instalação do Ubuntu 16.04. Eu também instalei mysql-server e mysql-client (sua versão padrão 5.7.12) via apt-get install .

Como o 5.7.12 estava mostrando alguns problemas, decidi desinstalá-lo. Eu tentei apt-get remove mysql-server mysql-client primeiro, mas vi que artefatos como /etc/mysql e /var/lib/mysql não foram removidos.

Eu então tentei apt-get --purge removed mysql-server mysql-client , mas ainda não há diferença.

Então, eu os removi manualmente (via rm -rf ). Também removi manualmente todos os arquivos *mysql* em /usr/ que vieram de qualquer pacote de dependência mysql-* , como mysql-common .

No entanto, agora, quando desejo reinstalar o mysql-server and -client , estou descobrindo que não posso.

Na verdade, agora estou em um estado em que não posso nem apt-get remove mysql-server nem apt-get install mysql-server !

Como consertar a situação em que estou? Se meus metadados do repositório de pacotes local foram corrompidos, como faço para repará-lo?

Eu odiaria reinstalar todo o sistema operacional com todos os meus outros aplicativos e ambiente, mais uma vez por causa de mysql-server .

O seguinte, por exemplo, é o erro que recebo quando tento remover 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 ao tentar instalar, recebo este erro:

$ 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)

Aqui está a saída de 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)
    
por Harry 27.04.2016 / 06:25

6 respostas

64

Editado em 10 de janeiro de 2017 : esta é uma das principais revisões deste post para corrigir problemas sérios neste post.

O erro no coração

O problema é que o pacote ainda está no sistema em um estado semi-instalado e semi-configurado e precisa ser explicitamente removido.

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)

O que realmente está dizendo é que o pacote mysql-server-5.7 é uma dependência para mysql-server , já está instalado, mas não está configurado. Então você precisa purge para remover os breadcrumbs deixados por mysql-server-5.7 .

sudo apt purge mysql-server mysql-server-5.7

Justificativa

Quando você instala o software usando apt , ele também processa as dependências automaticamente para você.

Quando você remove certos pacotes, pode não lidar com essas mesmas dependências. No caso desta postagem, essa dependência é mysql-server-5.7 .

Você pode verificar o estado de um pacote emitindo o seguinte comando.

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

Normalmente, se você vir o código un ou rc à esquerda do nome do pacote, será possível dizer se realmente é um pacote corrompido.

Quando enfrentei esse problema, ele estava com libapache2-mod-php e libapache2-mod-php7.0 . Esta foi a minha saída.

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)

No meu caso, alegou que o status do meu pacote é desconhecido e que não está instalado (o código un ) no meu sistema.

Quando você diz apt a remove something, pode deixar pacotes, arquivos de configuração e outros itens que podem ser problemáticos durante instalações automatizadas.

Quando você diz a apt para purge algo que faz, é melhor remover as migalhas de pão que remove pode ter deixado.

Originalmente, afirmei que assumi que o processo ainda estava em execução, mas provavelmente estava inativo ou morto.

A melhor maneira de verificar se o serviço está interferindo na remoção do pacote é verificar primeiro o serviço.

1) Investigando o mysql service

Usando o erro do sistema dado a nós por apt , podemos usar systemctl para investigar o erro verificando o status do mysql service

sudo systemctl status [pattern]

No nosso caso, queremos ver se o mysql está rodando, assim podemos digitar

systemctl status mysql.service

Você deve ver esta saída se o serviço estiver sendo executado

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 o serviço estiver inoperante, você verá uma pequena mensagem indicando que não há nenhum serviço com esse nome em execução e pule para a etapa 3.

2) Parando o serviço mysql usando systemctl

nota: [padrão] deve ser o nome listado por service ou initctl . o motivo pelo qual eu uso pattern é porque systemctl usa correspondência de expressão regular, portanto, tenha cuidado se você precisar usar o argumento kill .

sudo systemctl stop [pattern]

onde pattern representa o nome do daemon / serviço do mysql. se parar não funcionar tente

sudo systemctl kill [pattern]

Por exemplo

sudo systemctl stop mysql

3) Desinstalar / limpar mysql

Se precisar limpar totalmente, verifique se o serviço ou processo foi interrompido primeiro e, em seguida, certifique-se de remover os arquivos e diretórios corretos!

Observação: verifique se você está segmentando a versão mysql correta. Por exemplo, se você usar 5.5, ajuste o número da versão adequadamente.

AVISO: as etapas a seguir excluirão seus dados! (o primeiro comando deve ser executado para fazer um backup)

source: Como eu desinstalo o 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) Corrigindo pacotes quebrados e manipulando dependências ausentes

Se as etapas anteriores não funcionarem para você, talvez seja necessário executar apt com a opção --fix-broken para reparar qualquer dano causado.

Certifique-se de que apt update primeiro e, em seguida, apt install

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

5) Quando tudo mais falhar, crie e instale mysql yourself

Se nenhum dos itens acima funcionar, você terá que baixar manualmente o código-fonte, compilar e usar o make ou o bash para instalar a partir daí (não tão doloroso quanto parece, já que é totalmente automatizado).

    
por jargonjunkie 27.04.2016 / 10:46
5

O problema com o primeiro post é que você não pode reconfigurar um meta-pacote bem, não para os itens sql. Você precisa especificar o item de lançamento atual.

Diga o uso;

apt search mysql-server

Isso deve exibir uma lista de pacotes, ou seja,

"mysql-server-5.7" "mysql-server-core-5.7" ou versões posteriores

então;

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

concluído.

    
por e8hffff 16.03.2017 / 17:52
1

Eu vi isso

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.

como um indício de que ainda existia um roteiro de start-up errôneo.

Procure /etc/init.d/mysql e quaisquer links simbólicos para ele. Removendo estes apareceram para corrigir meus problemas de reinstalação após a remoção.

    
por ghatzhat 22.06.2016 / 23:04
1

Esta é a solução correta para você

Primeiro, você terá que remover todos os pacotes do servidor mysql:

  

AVISO: as etapas a seguir excluirão seus dados! Faça um backup primeiro!

sudo rm -rf / var / lib / mysql Em seguida, instale:

sudo apt-get instala o servidor da lâmpada ^

Ou você pode fazer:

sudo apt-get instala o mysql-server

    
por Tarun Sharma 14.07.2017 / 13:21
0

Esse erro também aconteceu ao trocar do MySQL para o MariaDB ( link ) .

Os arquivos de dados binários do MySQL não eram compatíveis com o MariaDB, então eu mudei de volta para o MySQL porque eu não tinha tempo para mexer com o mysqldump.

Primeiro eu tive que mover os dados do MariaDB para /var/lib/mysql , depois instalar o MySQL e depois mover meus dados originais de /var/lib/mysql-5.7 (esse backup foi criado automaticamente antes do erro) para /var/lib/mysql .

    
por baptx 06.11.2017 / 17:52
-3

Tente apt-get -f install para consertar seu pacote SQL quebrado e se você ainda estiver com problemas com o gerenciador de pacotes, faça o download do código-fonte do servidor SQL e compile-o !! Mas tente o comando acima e use também dpkg -l | grep sql para descobrir que o gerenciador de pacotes ainda pensa em SQL ou não ..

    
por Ali Ghasempour 27.04.2016 / 06:35

Tags