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

28

Assumindo um servidor web Debian Etch com o MySQL rodando.

Eu normalmente começo, paro e reinicio o msyql usando:

/etc/init.d/mysql restart

Por algum motivo, nessa configuração, recebo o seguinte:

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

Stopping MySQL database server: mysqld failed!

O processo mysql está rodando 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 também quero entender o que está acontecendo. Por que a maneira típica não funciona para mim?

EDITAR ATUALIZAÇÃO 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 para saber porque os comandos /etc/init.d/mysql não estão funcionando.

    
por Derek Organ 27.06.2009 / 18:31

11 respostas

24
mysqladmin shutdown

deve funcionar para desligar o servidor.

Eu vejo duas possibilidades possíveis:

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

O que o dpkg --list mysql\* diz?

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

EDITAR:

Então mysqladmin shutdown funcionou?

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

O que é realmente em /etc/init.d/mysql? Eu não chequei essa versão específica do pacote, mas deve tentar usar mysqladmin shutdown ... Talvez você tenha sorte e eles só quebraram isso ...

    
por 27.06.2009 / 18:58
21

Por que isso está acontecendo

Este é um problema comum se você faz uma importação de mysql e sobrescreve o próprio banco de dados mysql, como quando você pode estar restaurando de um mysqldump -A backup.

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

Embora este novo banco de dados possivelmente mude tanto a senha root quanto a senha debian-sys-maint, é claro que não mudará automaticamente a senha esperada do debian-sys-maint em /etc/mysql/debian.cnf. Na verdade, a menos que você tenha feito o backup desse arquivo, você provavelmente nem sabe mais o que é essa senha!

Redefinindo a senha raiz do mysql (opcional)

Primeiras coisas primeiro. Se a senha do mysql root fosse diferente entre servidores antigos e novos, você pode usar o mysqladmin para consertá-la:

mysql -p -u root password 'newpassword'

No entanto, quando você instala o mysql-server, provavelmente lhe pedirá a nova senha de root do mysql e provavelmente usou a mesma que estava usando antes.

Corrija a senha do debian sys maint.

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

sudo cat /etc/mysql/debian.cnf

Agora, faça o login no mysql usando a senha de root que você definiu acima:

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

Redefina a senha para o usuário debian-sys-maint e não esqueça de liberar os 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

Quick tip

If you ever need to reset the root password for the server without having to bring down the server, this user account has the authority to do it -- just cat the debian.cnf file and log in with that user. N.B. Protect this user account just like root.

    
por 23.08.2012 / 00:07
6

Mais 2 dicas:

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

Isso mostrará os comandos executados pelo script de inicialização.

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

    
por 27.06.2009 / 19:45
5
pkill mysql

definitivamente funcionará

    
por 28.06.2009 / 01:10
2

Assumindo que o pacote é 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 ser escrito ou o script init está procurando pelo arquivo mysqld.pid em outro lugar. Se você puder consertar a incompatibilidade de arquivos init / pid, as coisas provavelmente funcionarão.

    
por 27.06.2009 / 19:49
2

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

    
por 28.06.2009 / 00:06
1

Você pode tecnicamente terminar com:

pkill -9 mysqld

Mas você pode perder dados?

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

    
por 27.06.2009 / 18:38
1

Usar "pkill mysql" também provavelmente perderá seus dados, particularmente se invocado como "pkill -9": (

Eu também recomendaria usar 'sh -x' para ver qual seria o problema com o script init, e você também pode dar uma espiada nos logs de erros do MySQL (/ var / log / mysql ou / var / lib / mysql, dependendo da configuração) para ver se ele está preso em uma consulta muito longa realmente ou algo assim e, portanto, não está disposta a sair com bastante graça ainda.

    
por 28.06.2009 / 12:08
1

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

A questão é que o socket padrão é /tmp/mysql.sock com fonte do MySQL, e /var/run/mysqld/mysqld.sock com binários Debian.

A solução é corrigir o caminho do soquete em /etc/mysql/debian.cnf , fornecendo o bom socket= . Ou mantendo-o, mas depois mude o em /etc/mysql/my.cnf .

Veja como eu descobri isso: em /etc/init.d/mysql quando há a mensagem «failed», 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 para $MYADMIN ping , que é mysqladmin --defaults-file=/etc/mysql/debian.cnf ping . Executar este mesmo comando termina em:

/usr/bin/mysqladmin: connect to server at 'localhost' failed

error: 'Can't connect to local MySQL server through socket '/var/run/mysqld/mysqld.sock' (2)'

Check that mysqld is running and that the socket: '/var/run/mysqld/mysqld.sock' exists!

Então, eu dei uma olhada em /etc/mysql/debian.cnf e descobri que era o mau soquete.

    
por 12.01.2015 / 19:44
0

use o seguinte comando:

$ mysqladmin shutdown

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

    
por 28.06.2009 / 13:17
0

você precisa ser um super usuário para iniciar o stop 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

  • faça login como root
  • coloque sudo antes do seu comando /etc/init.d/mysql restart (ele lhe pedirá sua senha e você precisará estar no grupo sudoers)
por 28.06.2009 / 14:24