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.


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 ...


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.


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).


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á


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.


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.


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


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.


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.


0

use o seguinte comando:

$ mysqladmin shutdown

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


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)
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.