atualização 16.04 quebrou o servidor mysql

113

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

8 respostas

112

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
54

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
17

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

% bl0ck_qu0te%     
por Andrew Beeman 23.04.2016 / 00:05
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
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
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
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 install mysql-server
    
por ostrokach 25.09.2017 / 19:19
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:

% bl0ck_qu0te%

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