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.
/tmp/mysql.sock
não/var/run/mysqld/mysqld.sock
. Portanto, o script dos mantenedores do Debian estava emitindo um erro silenciosamente. Você só precisa consertarsocket=
o/etc/mysql/debian.cnf
Respostas:
deve funcionar para desligar o servidor.
Eu vejo duas possibilidades prováveis:
O que
dpkg --list mysql\*
diz?O que diz /var/log/mysql.err? Ou os outros logs do mysql?
EDITAR:
Então
mysqladmin shutdown
trabalhou?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.0
pode lhe dizer mais.dpkg --listfiles mysql-server-5.0
poderia 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 ...fonte
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:
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.)
Agora, entre no mysql usando a senha root que você definiu acima:
Redefina a senha do usuário debian-sys-maint e não se esqueça de liberar privilégios:
Teste para ter certeza de que funciona:
fonte
Mais 2 dicas:
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).
fonte
"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, portantomysql stop
, não possuía as permissões no próprio banco de dados para desligar. Um manualmysqladmin shutdown
funcionou perfeitamente.definitivamente funcionará
fonte
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.
fonte
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.
fonte
Você pode finalizá-lo tecnicamente com:
Mas você pode perder dados?
Talvez seja melhor perguntar a alguém em http://www.serverfault.com
fonte
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.
fonte
Para acompanhar o comentário da sua pergunta, escreverei uma resposta completa:
O problema é que o soquete padrão é
/tmp/mysql.sock
com a fonte MySQL e/var/run/mysqld/mysqld.sock
com os binários Debian.A solução é corrigir o caminho tomada em
/etc/mysql/debian.cnf
, fornecendo o bemsocket=
. Ou mantendo-o, mas depois troque o que está dentro/etc/mysql/my.cnf
.Aqui está como eu descobri isso:
/etc/init.d/mysql
quando 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:Então, dei uma olhada
/etc/mysql/debian.cnf
e descobri que esse era o problema.fonte
use o seguinte comando:
$ mysqladmin shutdown
isso deve estar disponível no diretório / usr / bin no seu caso.
fonte
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
fonte