Eu tenho um servidor Raspberry Pi com Raspbian OS:
Kernel: Linux 4.9.35+ #1014 Fri Jun 30 14:34:49 BST 2017 armv6l GNU/Linux
Description: Raspbian GNU/Linux 8.0 (jessie)
Release: 8.0
Codename: jessie
Hoje notei que as tentativas de uso mysql
terminam em falha de segmentação.
user@host~ $ mysql -u root -p
Enter password:
Segmentation fault
Isso acontece tanto para a senha errada quanto para a correta. Ou mesmo se eu inventasse um nome de usuário. Na verdade, verifica-se que mesmo executar o mysql
comando sem nenhum argumento tem o mesmo efeito.
O servidor Mysql ainda pode ser acessado via Python ( pymysql
) e Perl. Eu tenho scripts que escrevem e leem vários bancos de dados, todos funcionam sem problemas.
Shell scripts que usam o mysql
comando, todos eles falham. Por exemplo:
/home/user/example.sh: line 2: 27974 Segmentation fault /usr/bin/mysql -u dbuser -p$dbpass dbname --execute="select * from example;"
As falhas de segmentação começaram a aparecer hoje e não consigo descobrir o que as está causando agora. O servidor não foi inicializado em algumas semanas. Já se passou mais de uma semana desde a última atualização.
Não consigo encontrar nenhum erro que possa parecer relevante para esta situação nos logs ou syslog do Mysql.
Eu tentei:
- Reiniciando o Mysql
- Atualização do sistema e reinicialização
- Verificando o disco na reinicialização, nenhum erro encontrado
Como esses procedimentos não ajudaram, tentei usar gdb
conforme sugerido aqui:
O aplicativo em execução termina com "Falha de segmentação"
Isso é o que recebo ao depurar o comando mysql
sem nenhum parâmetro:
gdb mysql run run Iniciando o programa: /usr/bin/mysql
gdb mysql
run
Starting program: /usr/bin/mysql
Program received signal SIGSEGV, Segmentation fault.
elf_dynamic_do_Rel (skip_ifunc=<optimized out>, lazy=0, nrelative=<optimized out>, relsize=<optimized out>,
reladdr=<optimized out>, map=0xb6fff968) at do-rel.h:112
112 do-rel.h: No such file or directory.
Eu me pergunto o que eu poderia fazer para corrigir esse problema? (Além de fazer um relatório de bug sobre isso.)
Você provavelmente tem binários corrompidos/e/ou um sistema de arquivos/cartão SD corrompido.
Os cartões SD não são feitos para uso pesado de E/S e degradam com o tempo; Framboesa(s) também são conhecidos por corromper dados em cartões SD ao desligar ocasionalmente devido a características de seu design (eletrônica não é minha área, não posso entrar em detalhes).
Você pode muito bem ter uma corrupção no
mysql
binário ou nas bibliotecas associadas. (na verdade, ter umagdb
falha emdo-rel.h
sugere o último).Eu reinstalaria o
mysql
cliente e as bibliotecas associadas, como um comando semelhante a este (sua milhagem pode variar):Eu usaria este comando para ver qual pacote está fornecendo o
mysql
binário e o reinstalaria:Então, eu também veria quais bibliotecas
mysql
estão usando, se isso não resolver o problema:Você pode ter como último recurso reinstalar cada pacote que suporta cada uma dessas bibliotecas até que seu erro seja corrigido. Alguns deles são:
libaio1
,libjemalloc1
,libreadline5
. Há mais.No entanto, não há garantias de que você não tenha outros bits do seu sistema de arquivos corrompidos. Eu faria backup do banco de dados e reinstalaria o OS/MySQL do zero.
A boa notícia é que você mencionou que outras formas de acessar o banco de dados estão funcionando bem, isso significa que a corrupção está principalmente relacionada ao
mysql
cliente binário.No entanto, eu provavelmente reavaliaria a execução do Linux a partir de um cartão SD no futuro, especialmente se estiver usando MySQL.
PS. Como @cas aponta bem, "se você tiver
dlocate
ou estiverdebsums
instalado, poderá executardlocate --md5check PKGNAME
oudebsums PKGNAME
verificar os arquivos instalados do pacote em relação ao arquivo md5sum"Consulte Raspberry: inicializando a partir de uma pen USB em vez de um cartão SD