Vuelva a cargar my.cnf sin reiniciar el servicio MySQL

26

Tengo que configurar un servidor MySQL para que actúe como maestro de replicación.

Modifiqué my.cnf para activar registros binarios, pero ahora para recargar la configuración tengo que recargar el servicio /etc/init.d/mysqld restart. El problema es que el servidor recibe varias consultas por segundo y no quiero perder todos los datos que podrían llegar mientras tanto.

¿Hay alguna manera de volver a cargar el archivo de configuración my.cnf sin reiniciar el servicio?

David Espart
fuente
3
/etc/init.d/restartreiniciaría todo el host. Probablemente estés pensando/etc/init.d/mysqld restart
Kevin M
Sí, ment mysqld reiniciar. Editado ¡Gracias!
David Espart

Respuestas:

28

MySQL específicamente: las
opciones en my.cnf son variables del sistema . Estas variables son dinámicas (se pueden cambiar en tiempo de ejecución) o no dinámicas. Los que son dinámicos, se pueden cambiar en tiempo de ejecución con la sintaxis de la variable SET. Puedes ver las variables con SHOW VARIABLES;. Pero de acuerdo con este enlace en el manual , la opción de registro binario no es dinámica. Entonces parece que tienes que reiniciar. Sin embargo, es posible que desee esperar a alguien que conoce mysql un poco mejor que yo para confirmar esto.

Daemons en general:
en Linux, /etc/init.d/ contiene scripts que inician y detienen daemons (servicios). Como se trata de scripts, puede verlos con un editor de texto. Muchos de estos scripts tomarán un argumento de recarga. Mirando mi script mysql, recargar como argumento usa el comando mysqladmin. Entonces el manual para mysqladmin bajo recarga dice:

recargar

Reload the grant tables.

Parece que, en general, esto no es para cambios de configuración, sino para cambios en los privilegios (¿Quizás el comando de privilegios de descarga equivalente?).

Kyle Brandt
fuente
2
Hola, muy buena explicación. Sin embargo, parece que no hay forma de hacerlo sin reiniciar. Si nadie responde una solución o una solución alternativa, aceptaré su pregunta. Gracias.
David Espart
De acuerdo con su enlace, se ve como SET GLOBAL binlog_format = 'STATEMENT'; haría el truco?
Kyle Smith
Otro Kyle: Parece, pero creo que el registro binario ya debería estar habilitado para que eso haga cualquier cosa (y tal vez esté configurado). Esa variable se introdujo más tarde que mi versión actual 5.0.x de mysql, así que no puedo probar.
Kyle Brandt
Tuve que buscar la sintaxis del comando SET: aquí hay un enlace en caso de que alguien más lo necesite: dev.mysql.com/doc/refman/5.1/en/set-option.html
Mark McDonald
44
También vale la pena mencionar qué variables son cambios dinámicos a medida que tenga la oportunidad de versiones de MySQL. Por ejemplo, en 5.x puede habilitar el registro de consulta lenta sobre la marcha, pero en 4.x no puede (como descubrí ayer!).
Coops
1

He estado buscando una solución para esto, pero no estoy satisfecho con la ayuda limitada que encontré. Un tipo ofreció un kill -HUP ... no funcionó para mí ...

lo que hice fue pausar las instancias de apache ... y luego continuarlas más tarde ... funcionó de maravilla en un servidor donde tengo un promedio de 25 solicitudes activas por segundo.

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

por supuesto, el nombre de su proceso de apache y / o los scripts de reinicio de mysql pueden diferir del mío, ¡pero tiene la idea correcta!

Hassan Abdul Rehman
fuente