Tengo una configuración maestro -> esclavo donde el maestro falló. He podido restablecer el viejo esclavo para que sea un maestro y el viejo maestro para que sea esclavo de él. Multa.
Lo que parece que no puedo hacer es eliminar la información maestra del viejo esclavo que ahora es el nuevo maestro. Veo:
mysql> show slave status \G
*************************** 1. row ***************************
Slave_IO_State:
Master_Host: 10.1.2.101
Master_User: replicationSlave
Master_Port: 3306
...
Slave_IO_Running: No
Slave_SQL_Running: No
He leído mucha documentación de MySQL pero todavía no he encontrado una manera de borrar la información del esclavo del nuevo maestro. He intentado:
RESET SLAVE
que no parece borrar esa configuración. [[En realidad, elimina elmaster.info
archivo pero no la configuración de memoria. Vea abajo.]]CHANGE MASTER TO MASTER_HOST=''
que solo escupe un error ya que fue desaprobado recientemente.- Comprobando
my.cnf
cuál no tiene la información maestra ya que se agregaron mediante programación. RESET MASTER
porque algunos documentos de mysql lo recomiendan. Eso solo restablece los registros de bin.- Hurgando en las tablas internas de MySQL para ver si puedo encontrar los campos para borrar.
¿Cuál es la forma correcta de hacer esto en MySQL ~ 5.5.9? Gracias por cualquier ayuda.
Editar:
Resulta que RESET SLAVE
elimina el master.info
archivo como implica @RolandoMySQLDBA. Sin embargo, aún necesita reiniciar el servidor antes de eliminar la información del esclavo.
¿Hay alguna forma de eliminar esta información esclava sin tener que reiniciar mysqld?
fuente
Respuestas:
En MySQL 5.5.16 y posterior, puede
RESET SLAVE ALL
hacer todo lo queRESET SLAVE
hace y restablecer los parámetros de conexión desde la memoria, de esta manera no requiere un reinicio de mysqld.fuente
La forma más rápida y sucia de borrar la información del esclavo de una instancia de MySQL
skip-slave-start
a /etc/my.cnf bajo[mysqld]
service mysql stop
rm -f /var/lib/mysql/master.info /var/lib/mysql/relay-*
service mysql start
skip-slave-start
de /etc/my.cnf¡Eso debería hacerlo por ti!
Esto sería necesario porque de acuerdo con la documentación de MySQL sobre
RESET SLAVE
:Por lo tanto, la información de replicación todavía está en la memoria. Un reinicio de mysql es el único camino a seguir.
fuente
master.info
archivo. ¿Eso siempre está ahí en un "maestro" o "esclavo"?RESET SLAVE
seguido de un reinicio no borra la información del esclavo en lo que respecta a phpmyadmin. También necesitas configurarCHANGE MASTER TO MASTER_HOST=''
.fuente
Recomendaría mantener el comando skip-slave-start en su archivo de configuración ('en /etc/my.cnf') debajo de 'mysqld' para evitar la anulación de los datos maestro-esclavo. Para darle un ejemplo: cuando trabaje en un entorno de nube, digamos que un viejo maestro se bloquea y luego se reinicia con éxito cuando su proveedor soluciona cualquier problema: el viejo esclavo (ahora nuevo maestro) se replicará desde el viejo maestro, anulando los datos antes el DBA tiene la oportunidad de darse cuenta de esto.
Por cierto, esto también es relevante en un entorno no en la nube. Si, digamos, otro administrador saca el viejo maestro sin coordinarlo. Además, otro problema es por qué es una buena idea mantener el comando 'skip-slave-start' incluso si es un esclavo, sin replicación automática, lo que significa que tiene más control sobre la prevención de resultados impredecibles. :)
fuente