atualização 16.04 quebrou o servidor mysql

109

Minha atualização geral correu bem, mas eu fiquei com uma questão criticamente persistente de o servidor mysql não conseguir se instalar, e nada do que estou tentando faz com que funcione.

Este é o erro que vejo ao tentar instalar / reinstalar:

Setting up mysql-server-5.7 (5.7.11-0ubuntu6) ...
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.
                   Processing triggers for systemd (229-4ubuntu4) ...
Processing triggers for ureadahead (0.100.0-19) ...
Errors were encountered while processing:
 mysql-server-5.7
 mysql-server
E: Sub-process /usr/bin/dpkg returned an error code (1)

Eu tentei removê-lo completamente, embora isso tente instalar o MariaDB por causa de dependências (?). Qualquer sugestão sobre o que posso fazer para corrigir isso seria muito bem-vinda.

EDITAR: Parece que eu não sou o único: link

    
por TheGremlyn 22.04.2016 / 19:53
fonte

8 respostas

107

As instruções do @ andrew-beerman postadas estão no caminho certo, embora não sejam muito claras para mim e pareçam recomendar mais do que o necessário. Eu reuni a resposta do acima e uma postagem útil no tópico do bug.

Estes são os passos que tomei para corrigir isto:

  1. Faça o backup de seu my.cnf file em /etc/mysql e remova-o ou renomeie-o

    sudo mv /etc/mysql/my.cnf /etc/mysql/my.cnf.bak
    
  2. Remova a pasta /etc/mysql/mysql.conf.d/ usando

    sudo rm -r /etc/mysql/mysql.conf.d/
    
  3. Verifique se você não tem um arquivo my.cnf armazenado em outro lugar (eu fiz em meu diretório home) ou em /etc/alternatives/my.cnf use

    sudo find / -name my.cnf
    
  4. Faça backup e remova os arquivos /etc/mysql/debian.cnf (não tenho certeza se necessário, mas apenas por precaução)

    sudo mv /etc/mysql/debian.cnf /etc/mysql/debian.cnf.bak
    sudo apt purge mysql-server mysql-server-5.7 mysql-server-core-5.7
    sudo apt install mysql-server
    
  5. No caso do seu syslog mostrar um erro como "mysqld: Não é possível ler o diretório '/etc/mysql/conf.d/'" crie um link simbólico:

    sudo ln -s /etc/mysql/mysql.conf.d /etc/mysql/conf.d
    

    Em seguida, o serviço deve começar com sudo service mysql start .

Isso funcionou!

    
por TheGremlyn 25.04.2016 / 15:38
fonte
51

Hoje eu peguei o mesmo problema, depois de tentar muitas soluções descobri que o problema era o comando sudo systemctl disable mysql.service que eu usava para desabilitar o auto start do MySQL, então para ele funcionar eu reativei novamente o servidor MySQL usando o comando sudo systemctl enable mysql.service e execute novamente o processo de atualização e terminou perfeitamente.

    
por Naruto Biju Mode 26.04.2016 / 00:37
fonte
17

As instruções aqui foram corrigidas no meu servidor: link

  

Eu posso entender a dor de ter seu sistema em estado inconsistente   mas não vamos nos preocupar com toda a situação e levá-la passo a passo   para limpar o sistema.

     

Primeiro, vamos ver o estado atual de todos os pacotes mysql na máquina   usando: dpkg -l | grep mysql (Por favor, cole a saída excluindo o último   coluna)

     

A primeira coluna indica o status atual do pacote. Aqui estão   as opções possíveis:

     

ii) Instalado rc) Arquivos de configuração removidos mantidos (Este deve ser o estado   de todos os pacotes que você removeu com 'apt-get remove' que não   não remover arquivos de configuração em / etc)

     

Para que isso funcione, você precisará executar 'apt-get purge' até   você não vê nenhum pacote na lista acima.

     

Por favor lembre-se que alguns pacotes não-mysql-server   python-mysql.connector e python-mysqldb, se instalados, não precisam ser   removido como eles não têm qualquer efeito sobre esta situação, mas se   removida pode causar problemas aos aplicativos que os usam.

     

Nós definitivamente tentaremos visitar nossos documentos para ver como podemos   proteger os usuários de se meterem nesse problema. Obrigado por compartilhar   seu feedback em detalhes com a gente.

    
por Andrew Beeman 23.04.2016 / 00:05
fonte
17

Sua mensagem de erro contém esta linha:

subprocess installed post-installation script returned error exit status 1

No entanto, esse installed post-installation script não é mencionado pelo nome. Depois de muito mexer, descobri que seu nome é (no meu caso) /var/lib/dpkg/info/mysql-server-5.7.postinst .

Abra este arquivo com sudo vi /var/lib/dpkg/info/mysql-server-5.7.postinst ou seu editor preferido.

Na parte superior, altere a linha 3 (ou mais): set -e to set -x , salve o arquivo. (opção -e é "sair nos erros", -x significa "mostrar explicitamente o comando executado", presumivelmente)

Executar sudo dpkg --configure -a --log /tmp/dpkg.log (a opção --log é opcional). Você também pode simplesmente executar apt upgrade se souber que será o único pacote que será atualizado.

Agora você obtém uma saída detalhada do script mysql-server-5.7.postinst bash e pode descobrir o que está errado.

No meu caso ele tentou (re) executar mysql_upgrade , mas isso não foi necessário para minha instalação personalizada do mysql. Eu estava certo Eu corri manualmente antes, com sucesso, e tudo estava bem.

Então eu saí da linha 321 (para versões mais antigas do mysqld tente a linha 281),

#mysql_upgrade --defaults-file=/etc/mysql/debian.cnf || result=$?

e o comando que falhou antes, sudo apt upgrade (execute-o novamente), terminou com sucesso e o dpkg removeu o status de erro deste pacote.

Agora você pode recuperar o set -x para set -e (mencionado acima). E, opcionalmente, descomente a linha de upgrade do mysql.

Um trabalho extra pode ser necessário se você tiver movido sua partição de dados mysql para um local fora do padrão. Mudei o meu de /var/lib/mysql/data para um drive diferente via symlink. Então você pode ter que remover o link simbólico temporariamente, antes da manipulação do script postinst . Em seguida, recrie-o após executar a atualização do pacote.

Após a próxima atualização da versão secundária do pacote mysqld debian, este problema com o script /var/lib/dpkg/info/mysql-server-5.7.postinst pode aparecer novamente.

    
por knb 01.07.2016 / 14:03
fonte
3

No meu caso, com strace, vi que / var / run / mysqld / não existia e o mysqld não pode criar o arquivo mysqld.sock.

Esses comandos resolveram meu problema:

mkdir /var/run/mysqld
chown mysql.mysql /var/run/mysqld
chmod 700 /var/run/mysqld

Agora:

systemctl start mysql

E o mysql funciona de novo:)

    
por Leonardo Catalinas 27.04.2016 / 10:14
fonte
3

No meu caso, posso resolver o problema adicionando

# Allow log file access
/home/system/var/log/mysql.err rw,
/home/system/var/log/mysql.log rw,
/home/system/var/log/mysql/ r,
/home/system/var/log/mysql/** rw,

para /etc/apparmor.d/local/usr.sbin.mysqld

Para mais detalhes, veja meu answer (por ChristophS) em stackoverflow.

    
por ChristophS 29.04.2016 / 14:30
fonte
1

Nenhuma das respostas nesta página funcionou para mim.

Acabei indo para a página de downloads da Oracle , baixando mysql-apt-config_0.8.8-1_all.deb e instalando o MySQL do repositório Oracle:

sudo dpkg -i mysql-apt-config_0.8.8-1_all.deb
sudo apt update
sudo apt isntall mysql-server
    
por ostrokach 25.09.2017 / 19:19
fonte
0

Eu tive o mesmo problema. Eu tentei reinstalar o mysql várias vezes, mas não tive sucesso.

Eu descobri que o problema para mim era que outro processo do mysql já estava rodando.

Em detalhes:

Depois de ler atentamente, efetue login em /var/log/mysql/error.log e localize:

  

[ERRO] Não é possível iniciar o servidor: Vincular na porta TCP / IP: endereço já em   use

     

[ERRO] Você já tem outro servidor mysqld rodando na porta:   3306?

Parece que outro aplicativo já estava usando a porta.

Eu verifiquei usando ps -aux | grep 3306 :

$ ps -aux | grep 3306
milkovs+  6802  0.0  0.0  16336  1084 pts/19   S+   21:39   0:00 grep --color=auto 3306
mysql    14706  0.0  0.3 1270192 13916 pts/2   Sl   Aug19   0:29 /usr/sbin/mysqld --basedir=/usr --datadir=/var/lib/mysql --plugin-dir=/usr/lib/mysql/plugin --user=mysql --skip-grant-tables --log-error=/var/log/mysql/error.log --pid-file=/var/run/mysqld/mysqld.pid --socket=/var/run/mysqld/mysqld.sock --port=3306 --log-syslog=1 --log-syslog-facility=daemon --log-syslog-tag=

E eu matei o processo em execução sudo kill -15 14706

Então eu iniciei o mysql: /etc/init.d/mysql start

Finalmente o mysql funciona para mim! Espero que ajude alguém.

    
por milkovsky 20.08.2016 / 22:02
fonte