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 apresentando alguns problemas, decidi desinstalá-lo. Tentei apt-get remove mysql-server mysql-client
primeiro, mas vi que os artefatos pareciam /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 *mysql*
os arquivos /usr/
provenientes de mysql-*
pacotes de dependência como mysql-common
.
No entanto, agora, quando desejo reinstalar mysql-server and -client
, descobri que não consigo.
Na verdade, agora estou num estado em que não posso apt-get remove mysql-server
nem apt-get install mysql-server
!
Como consertar a situação em que estou? Se os metadados do meu repositório de pacotes local forem corrompidos, como posso repará-los?
Eu odiaria reinstalar todo o abençoado sistema operacional com todos os meus outros aplicativos e ambiente, mais uma vez só por causa do mysql-server
.
A seguir, por exemplo, está 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á o resultado 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)
Responder1
Editado em 10 de janeiro de 2017: Esta é uma revisão importante desta postagem para corrigir problemas sérios nesta postagem.
O erro de coração
O problema é que o pacote ainda está no sistema meio instalado e meio configurado e precisa ser removido explicitamente.
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 mysql-server
, já está instalado, mas não está configurado. Então você precisa purge
remover as migalhas deixadas por mysql-server-5.7
.
sudo apt purge mysql-server mysql-server-5.7
Justificativa
Quando você instala o software usando o apt
, ele também lida automaticamente com as dependências para você.
Quando você remove determinados pacotes, ele pode não lidar com as mesmas dependências. No caso deste post, essa dependência é mysql-server-5.7
.
Você pode verificar o estado do 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, poderá saber se realmente é um pacote quebrado.
Quando tive esse problema, foi 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 ele não está instalado (o código un
) no meu sistema.
Quando você informa apt
algo remove
, pode deixar pacotes, arquivos de configuração e outros itens que podem ser problemáticos durante instalações automatizadas.
Quando você diz apt
algo purge
que ele faz, é melhor remover quaisquer migalhas que remove
possam ter ficado para trás.
Afirmei originalmente que presumi 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 esse serviço.
1) Investigando o mysql
serviço
Usando o erro de sistema fornecido por apt
, podemos realmente usar systemctl
para investigar o erro, verificando o status do mysql
serviço
sudo systemctl status [pattern]
No nosso caso, queremos ver se o mysql está rodando, então podemos digitar
systemctl status mysql.service
Você deverá ver esta saída se o serviço estiver em execução
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
observação: se o serviço estiver inativo, você verá uma mensagem curta indicando que não há nenhum serviço com esse nome em execução e pule para a etapa 3.
2) Parando o mysql
serviço usandosystemctl
observação: [padrão] deve ser o nome listado por service
ou initctl
. o motivo pelo qual uso pattern
é porque systemctl
usa correspondência de regex, portanto, tome cuidado se precisar usar o kill
argumento.
sudo systemctl stop [pattern]
onde pattern
representa o nome do daemon/serviço mysql. se parar não funcionar, tente
sudo systemctl kill [pattern]
Por exemplo
sudo systemctl stop mysql
3) Desinstalar/limparmysql
se você precisar limpar totalmente, certifique-se de que o serviço ou processo seja interrompido primeiro e, em seguida, certifique-se de remover os arquivos e diretórios corretos!
Observação: certifique-se de estar direcionando a mysql
versão 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)
fonte: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) Consertando pacotes quebrados e lidando com dependências ausentes
Se as etapas anteriores não funcionaram para você, pode ser necessário executar apt
a --fix-broken
opção de reparar qualquer dano causado.
Certifique-se apt update
primeiro e depoisapt install
sudo apt update
sudo apt install mysql-server mysql-client --fix-broken --fix-missing
5) Quando tudo mais falhar, construa e instale mysql
você mesmo
Se nenhuma das opções acima funcionar, você terá que baixar manualmente o código-fonte, compilar e usar make ou bash para instalar a partir daí (não é tão doloroso quanto parece, já que é tudo automatizado).
Responder2
O problema com a primeira postagem é que você não pode reconfigurar bem um meta-pacote, não para os itens sql. Você precisa especificar o item de lançamento atual.
Diga usar;
apt search mysql-server
Isso deve exibir uma lista de pacotes, nomeadamente
"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
feito.
Responder3
Esta é a solução correta para você
Primeiro, você terá que remover todos os pacotes do mysql-server:
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 install lamp-server^
Ou você pode fazer:
sudo apt-get install mysql-server
Responder4
Este erro também aconteceu ao mudar do MySQL para o MariaDB (https://bugs.launchpad.net/ubuntu/+source/mysql-5.7/+bug/1490071).
Os arquivos de dados binários do MySQL não eram compatíveis com o MariaDB, então voltei para o MySQL porque não tive tempo de mexer no mysqldump.
Primeiro tive que mover os dados do MariaDB /var/lib/mysql
, depois instalar o MySQL e depois mover meus dados originais /var/lib/mysql-5.7
(este backup foi criado automaticamente antes do erro) para /var/lib/mysql
.