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