Recarregue my.cnf sem reiniciar o serviço MySQL

26

Eu tenho que configurar um servidor MySQL para atuar como um mestre de replicação.

Modifiquei my.cnf para ativar logs binários, mas agora, para recarregar a configuração, tenho que recarregar o serviço /etc/init.d/mysqld restart. O problema é que o servidor recebe várias consultas por segundo e não quero perder todos os dados que possam chegar enquanto isso.

Existe uma maneira de recarregar o arquivo de configuração my.cnf sem reiniciar o serviço?

David Espart
fonte
3
/etc/init.d/restartreiniciaria o host inteiro. Você provavelmente está pensando em/etc/init.d/mysqld restart
Kevin M
Sim, eu inicio o mysqld restart. Editado. THX!
David Espart 30/10/09

Respostas:

28

MySQL Especificamente:
As opções no my.cnf são variáveis ​​do sistema . Essas variáveis ​​são dinâmicas (podem ser alteradas em tempo de execução) ou não dinâmicas. Os que são dinâmicos, podem ser alterados no tempo de execução com a sintaxe da variável SET. Você pode ver as variáveis ​​com SHOW VARIABLES;. Mas, de acordo com este link no manual , a opção de log binário não é dinâmica. Então parece que você precisa reiniciar. Você pode querer esperar que alguém que conhece o mysql um pouco melhor que eu confirme isso, no entanto.

Daemons em geral:
no Linux, o /etc/init.d/ contém scripts que iniciam e interrompem daemons (serviços). Como esses são scripts, você pode visualizá-los com um editor de texto. Muitos desses scripts terão um argumento de recarregamento. Olhando para o meu script mysql, recarregar como argumento usa o comando mysqladmin. Portanto, o manual do mysqladmin sob reload diz:

recarregar

Reload the grant tables.

Assim, parece que, em geral, não se trata de alterações de configuração, mas de privilégios (talvez o comando equivalente de privilégios de liberação?).

Kyle Brandt
fonte
2
Ei, muito boa explicação. Parece que não há como fazê-lo sem reiniciar. Se ninguém responder a uma solução ou solução alternativa, aceitarei sua pergunta. Obrigado.
David Espart 28/10/09
De acordo com o seu link, ele se parece com SET GLOBAL binlog_format = 'STATEMENT'; faria o truque?
Kyle Smith
Kyle: Parece que sim, mas acho que o log binário já teria que ser ativado para que isso fizesse qualquer coisa (e talvez seja definido). Essa variável foi introduzida posteriormente à minha versão atual do mysql 5.0.x, portanto, não posso testar.
Kyle Brandt
Eu tive que procurar a sintaxe do comando SET - aqui está um link para o caso de alguém precisar: dev.mysql.com/doc/refman/5.1/en/set-option.html
Mark McDonald
4
Também vale a pena mencionar quais variáveis ​​são mudanças dinâmicas conforme você experimenta as versões do MySQL. Por exemplo, no 5.x, você pode ativar o log de consultas lentas, mas no 4.x, não (como descobri ontem!).
Coops 03/03
1

Eu estive procurando uma solução para isso, mas não fiquei satisfeito com a ajuda limitada que encontrei. Um sujeito ofereceu uma morte - HUP .. não funcionou para mim ..

o que eu fiz foi pausar as instâncias do apache .. e depois continuá-las mais tarde .. funcionou como um encanto em um servidor onde eu tenho uma média de 25 solicitações ativas por segundo.

com sudo (obviamente) pkill -STOP httpd && /etc/init.d/mysqld restart && pkill -CONT httpd

é claro que o nome do processo apache e / ou os scripts de reinicialização do mysql podem variar dos meus, mas você entende a ideia!

hassan abdul rehman
fonte