Não é possível iniciar / parar o serviço mysql

28

Adquirir um servidor da web Debian Etch com o MySQL em execução.

Normalmente inicio, paro e reinicio o msyql usando:

/etc/init.d/mysql restart

Por alguma razão nesta configuração, recebo o seguinte:

: ~ # /etc/init.d/mysql stop

Parando o servidor de banco de dados MySQL: mysqld falhou!

O processo mysql está funcionando bem:

:~# ps aux | grep mysql 
root      2045  0.0  0.1   2676  1332 ?        S    Jun25   0:00 /bin/sh /usr/bin/mysqld_safe
mysql     2082  0.6 10.7 752544 111188 ?       Sl   Jun25  18:49 /usr/sbin/mysqld --basedir=/usr --datadir=/var/lib/mysql --user=mysql --pid-file=/var/run/mysqld/mysqld.pid --skip-external-locking --port=3306 --socket=/var/run/mysqld/mysqld.sock
root      2083  0.0  0.0   1568   504 ?        S    Jun25   0:00 logger -p daemon.err -t mysqld_safe -i -t mysqld
root     11063  0.0  0.0   2856   716 pts/0    S+   17:29   0:00 grep mysql

Tenho certeza de que há uma maneira muito fácil de fazer isso, mas quero entender o que está acontecendo também. Por que a maneira típica não funciona para mim?

EDIT UPDATE como uma atualização:

JBRLSVR001:/var/log/mysql# mysqladmin shutdown
JBRLSVR001:/var/log/mysql# dpkg --list mysql\*
Desired=Unknown/Install/Remove/Purge/Hold
| Status=Not/Installed/Config-files/Unpacked/Failed-config/Half-installed 
|/ Err?=(none)/Hold/Reinst-required/X=both-problems (Status,Err: uppercase=bad)
||/ Name                                         Version                                      Description
 +++-============================================-============================================-========================================================================================================
un  mysql-client                                 <none>                                       (no description available)
un  mysql-client-4.1                             <none>                                       (no description available)
ii  mysql-client-5.0                             5.0.32-7etch8                                mysql database client binaries
ii  mysql-common                                 5.0.32-7etch8                                mysql database common files (e.g. /etc/mysql /my.cnf)
un  mysql-common-4.1                             <none>                                       (no description available)
ii  mysql-server                                 5.0.32-7etch8                                mysql database server (meta package depending on the latest version)
un  mysql-server-4.1                             <none>                                       (no description available)
ii  mysql-server-5.0                             5.0.32-7etch8                                mysql database server binaries

O mysqladmin shutdown funciona, mas ainda estou curioso por que os comandos /etc/init.d/mysql não estão funcionando.

Derek Organ
fonte
Para mim, o problema era que a instalação artesanal procurava, e /tmp/mysql.socknão /var/run/mysqld/mysqld.sock. Portanto, o script dos mantenedores do Debian estava emitindo um erro silenciosamente. Você só precisa consertar socket=o /etc/mysql/debian.cnf
código

Respostas:

25
mysqladmin shutdown

deve funcionar para desligar o servidor.

Eu vejo duas possibilidades prováveis:

  1. O MySQL tem um problema e está se recusando a desligar por algum motivo.
  2. O administrador anterior fez algo estranho. Modificou o script init.d ou não se incomodou em usar os pacotes Debian para instalar o MySQL.

O que dpkg --list mysql\*diz?

O que diz /var/log/mysql.err? Ou os outros logs do mysql?

EDITAR:

Então mysqladmin shutdowntrabalhou?

De acordo com isso, o pacote mysql-server está instalado (mysql-server-5.0; o pacote mysql-server provavelmente é apenas um esboço). Então eles podem ter instalado sobre ele? Correr debsums mysql-server-5.0pode lhe dizer mais. dpkg --listfiles mysql-server-5.0poderia ajudar também ...

O que realmente está no /etc/init.d/mysql? Eu não verifiquei essa versão específica do pacote, mas ele deve tentar usar mysqladmin shutdown... Talvez você tenha sorte e eles apenas quebraram isso ...

freiheit
fonte
Saúde, adicionou mais algumas informações ao post.
Derek Organ
Eu suspeito que eles não usaram os pacotes Debian para instalar o mysql
Derek Organ
alguém usou um pacote Debian pelo menos uma vez. Eles podem ter compilado a partir da fonte e substituiu os arquivos reais, ou quebrou alguma outra maneira ...
Freiheit
22

Porque isso está acontecendo

Este é um problema comum se você fizer uma importação do mysql e sobrescrever o próprio banco de dados mysql, como quando estiver restaurando a partir de um backup do mysqldump -A.

Isso é uma coisa boa: você provavelmente deseja fazer backup de todos os seus usuários mysql, permissões, etc - mas pode causar estragos em coisas como o usuário debian-sys-maint usado para encerrar o mysql de forma limpa.

Embora esse novo banco de dados possivelmente mude a senha root e a senha debian-sys-maint, é claro que não mudará automaticamente a senha esperada debian-sys-maint em /etc/mysql/debian.cnf. De fato, a menos que você também tenha feito o backup desse arquivo, você provavelmente nem sabe mais qual é a senha!

Redefinindo a senha root do mysql (opcional)

Primeiras coisas primeiro. Se a senha root do mysql for diferente entre servidores antigos e novos, você poderá usar o mysqladmin para corrigi-lo:

mysql -p -u root password 'newpassword'

No entanto, quando você instalou o mysql-server, provavelmente solicitou a nova senha root do mysql e você provavelmente usou a mesma que estava usando anteriormente.

Corrija a senha do debian sys maint.

Então agora procure a senha do debian sys maint que o debian criou para você quando você a instalou no novo servidor. (Você precisa do sudo porque este deve ser um arquivo altamente protegido.)

sudo cat /etc/mysql/debian.cnf

Agora, entre no mysql usando a senha root que você definiu acima:

mysql -p -u root   # use your new password when prompted

Redefina a senha do usuário debian-sys-maint e não se esqueça de liberar privilégios:

>  SET PASSWORD FOR 'debian-sys-maint'@'localhost' = PASSWORD('samepassword');
>  FLUSH PRIVILEGES;
>  QUIT

Teste para ter certeza de que funciona:

sudo /etc/init.d/mysql restart

Dica rápida

Se você precisar redefinir a senha root do servidor sem precisar desativá-lo, essa conta de usuário terá autoridade para fazê-lo - basta acessar o arquivo debian.cnf e fazer login com esse usuário. NB Proteja esta conta de usuário como root.

Jamieson Becker
fonte
2
Obrigado, Jamieson, isso potencialmente me salvou horas de trabalho.
slhck
1
Impressionante e totalmente bem-vindo! Eu tive que cair para trás sobre esse arquivo com mais freqüência do que eu gostaria de admitir;)
Jamieson Becker
1
Resposta brilhante. Importar um despejo de banco de dados (e com ele, a senha root) foi exatamente o motivo no meu caso. A única diferença é que meu arquivo debian.cnf usou o usuário "root" do mysql em vez de "debian-sys-maint". Eu simplesmente coloquei a senha root no debian.cnf e agora posso controlar o mysql através de "service mysql <comando>".
Tomasz P. Szynalski
6

Mais 2 dicas:

sh -x /etc/init.d/mysql restart

Isso mostrará os comandos executados pelo script init.

instale os debsums do pacote e você poderá testar quais pacotes foram modificados (verifique também está disponível para o RPM, mas o IMHO funciona melhor).

elcuco
fonte
1
Eu tinha o mesmo problema do OP e a execução deste comando sugeria "Access denied for user 'debian-sys-maint'@'localhost'", o que era absolutamente correto: meu banco de dados mysql ainda não havia atribuído nenhuma permissão, portanto mysql stop, não possuía as permissões no próprio banco de dados para desligar. Um manual mysqladmin shutdownfuncionou perfeitamente.
Jevon
5
pkill mysql

definitivamente funcionará

Jonathan
fonte
Isto é o que minha solução resolveu minha pergunta "O servidor de banco de dados mysql mysqld falhou". Você deve ganhar um milhão de pontos!
Hans Wassink
2

Supondo que o pacote seja um pouco estranho, o problema pode ser o arquivo pid. Eu suspeito que os novos pacotes ou instalação compilada não criaram / var / run / mysql / ou o que é padrão no Debian para o arquivo pid a ser gravado ou o script init está procurando o arquivo mysqld.pid em outro local. Se você pode corrigir a incompatibilidade do arquivo init / pid, as coisas provavelmente devem funcionar.

Kashani
fonte
O script init não usa o arquivo pid para parar o servidor.
theotherreceive
2

O script mysql shutdown usa o usuário debian-sys-maint para executar 'mysqladmin shutdown', lendo a senha para o usuário em /etc/mysql/debian.cnf. Você deve verificar se esse arquivo existe e se pode executar o mysqladmin shutdown como esse usuário.

theotherreceive
fonte
1

Você pode finalizá-lo tecnicamente com:

pkill -9 mysqld

Mas você pode perder dados?

Talvez seja melhor perguntar a alguém em http://www.serverfault.com

John Kurlak
fonte
Estou ciente de fazê-lo dessa maneira, mas não defo o que estou procurando fazer regularmente.
Derek Organ
1

O uso de "pkill mysql" provavelmente também perderá seus dados, principalmente se invocado como "pkill -9" :(

Eu também recomendo usar 'sh -x' para ver qual pode ser o problema com o script init, e você também pode dar uma olhada nos logs de erro do MySQL (/ var / log / mysql ou / var / lib / mysql, dependendo da configuração) para ver se está preso em uma consulta realmente longa ou algo assim e, portanto, não está disposto a sair normalmente.

nixgeek
fonte
1

Para acompanhar o comentário da sua pergunta, escreverei uma resposta completa:

O problema é que o soquete padrão é /tmp/mysql.sockcom a fonte MySQL e /var/run/mysqld/mysqld.sockcom os binários Debian.

A solução é corrigir o caminho tomada em /etc/mysql/debian.cnf, fornecendo o bem socket=. Ou mantendo-o, mas depois troque o que está dentro /etc/mysql/my.cnf.

Aqui está como eu descobri isso: /etc/init.d/mysqlquando há a mensagem «falhou», você tem esta linha chamada:

echo -e "$ps_alive processes alive and '$MYADMIN ping' resulted in\n$ping_output\n" | $ERR_LOGGER -p daemon.debug

Isso me apontou $MYADMIN ping, o que é mysqladmin --defaults-file=/etc/mysql/debian.cnf ping. A execução deste mesmo comando termina em:

/ usr / bin / mysqladmin: falha na conexão com o servidor em 'localhost'

erro: 'Não é possível conectar ao servidor MySQL local através do soquete' /var/run/mysqld/mysqld.sock '(2)'

Verifique se o mysqld está em execução e se o soquete: '/var/run/mysqld/mysqld.sock' existe!

Então, dei uma olhada /etc/mysql/debian.cnfe descobri que esse era o problema.

Yvan
fonte
0

use o seguinte comando:

$ mysqladmin shutdown

isso deve estar disponível no diretório / usr / bin no seu caso.

Masood Syed
fonte
0

você precisa ser um super usuário para começar a parar o mysql (e a maioria dos outros serviços) no debian.

Não tenho certeza se você já é ou não ... se não, você precisa fazer um dos

  • faça login como root
  • coloque o sudo antes do seu comando /etc/init.d/mysql restart (ele solicitará sua senha e você precisará estar no grupo sudoers)
Benlumley
fonte