Recharger my.cnf sans redémarrer le service MySQL

26

Je dois configurer un serveur MySQL pour agir en tant que maître de réplication.

J'ai modifié my.cnf pour activer les journaux binaires, mais maintenant, pour recharger la configuration, je dois recharger le service avec /etc/init.d/mysqld restart. Le problème est que le serveur reçoit plusieurs requêtes par seconde et je ne veux pas perdre toutes les données qui pourraient arriver entre-temps.

Existe-t-il un moyen de recharger le fichier de configuration my.cnf sans redémarrer le service?

David Espart
la source
3
/etc/init.d/restartredémarrerait l'hôte entier. Vous pensez probablement à/etc/init.d/mysqld restart
Kevin M
Oui, je mentionne le redémarrage de mysqld. Édité. THX!
David Espart

Réponses:

28

Plus précisément MySQL:
Les options de my.cnf sont des variables système . Ces variables sont soit dynamiques (peuvent être modifiées lors de l'exécution) soit non dynamiques. Ceux qui sont dynamiques peuvent être modifiés au moment de l'exécution avec la syntaxe de variable SET. Vous pouvez voir les variables avec SHOW VARIABLES;. Mais selon ce lien dans le manuel , l'option de journal binaire n'est pas dynamique. Il semble donc que vous deviez redémarrer. Vous voudrez peut-être attendre que quelqu'un qui connaît mysql un peu mieux que moi confirme cela cependant.

Démons en général:
sous Linux, /etc/init.d/ contient des scripts qui démarrent et arrêtent les démons (services). Comme ce sont des scripts, vous pouvez les visualiser avec un éditeur de texte. Beaucoup de ces scripts prendront un argument de rechargement. En regardant mon script mysql, recharger comme argument utilise la commande mysqladmin. Donc le manuel de mysqladmin sous rechargement dit:

recharger

Reload the grant tables.

Il semble donc qu'en général, ce n'est pas pour les changements de configuration, mais plutôt pour les changements de privilèges (Peut-être la commande équivalente de privilèges de vidage?).

Kyle Brandt
la source
2
Hé, très bonne explication. Il semble cependant qu'il n'y ait aucun moyen de le faire sans redémarrage. Si personne ne répond à une solution ou à une solution de contournement, j'accepterai votre question. Merci.
David Espart
Selon votre lien, il ressemble à SET GLOBAL binlog_format = 'STATEMENT'; ferait l'affaire?
Kyle Smith
Autre Kyle: Cela ressemble, mais je pense que la journalisation binaire devrait déjà être activée pour que cela fasse quoi que ce soit (et peut-être être défini). Cette variable a été introduite plus tard que ma version actuelle 5.0.x de mysql, donc je ne peux pas tester.
Kyle Brandt
J'ai dû rechercher la syntaxe de la commande SET - voici un lien au cas où quelqu'un d'autre en aurait besoin: dev.mysql.com/doc/refman/5.1/en/set-option.html
Mark McDonald
4
Il convient également de mentionner quelles variables sont des changements dynamiques au fur et à mesure des versions de MySQL. Par exemple, dans 5.x, vous pouvez activer le journal des requêtes lentes à la volée, mais dans 4.x vous ne pouvez pas (comme je l'ai découvert hier!).
Coops
1

J'ai cherché une solution pour cela, mais je n'ai pas été satisfait par l'aide limitée que j'ai trouvée. Un gars a offert un kill -HUP .. n'a pas fonctionné pour moi ..

ce que j'ai fait était de mettre en pause les instances d'apache .. puis de les poursuivre plus tard .. a fonctionné comme un charme sur un serveur où j'ai en moyenne 25 requêtes actives par seconde.

avec sudo (évidemment) pkill -STOP httpd && /etc/init.d/mysqld restart && pkill -CONT httpd

Bien sûr, le nom de votre processus apache et / ou les scripts de redémarrage de mysql peuvent différer du mien, mais vous avez compris l'idée!

hassan abdul rehman
la source