Tengo la replicación de MySQL configurada en producción de la siguiente manera:
DB1->DB2 DB1 -> BAK
Donde DB2
y BAK
son esclavos de DB1
. Los 3 servidores están sincronizados (0 segundos detrás del maestro) y tienen más de 30 GB de datos.
Me gustaría poner los servidores en una nueva configuración maestro-esclavo de la siguiente manera:
DB1 -> DB2 -> BAK
¿Cuál es la mejor manera de cambiar el host maestro BAK
?
¿Hay alguna manera de evitar tener que detener el subproceso esclavo DB2
y obtener un mysqldump durante BAK
(procesos de 5 a 6 horas)?
Respuesta1
A esto lo llaman replicación en cascada maestro-esclavo-esclavo. Debe habilitar log-bin y log-slave-updates en DB2, consulte aquí:
Una vez que se esté ejecutando en BD2, en BAK necesita cambiar el maestro y restablecer el esclavo para borrar su información de registro, ala:
mysql> stop slave;
mysql> change master to MASTER_HOST="BAK name or IP", .....
mysql> reset slave;
mysql> start slave
Donde '...' son las opciones habituales de:http://dev.mysql.com/doc/refman/5.0/en/change-master-to.html
En teoría, eso debería hacerlo por usted sin tener que hacer un nuevo volcado e importarlo. Me aseguraría de ejecutar un vaciado de registros en el maestro y hacer copias de seguridad de BAK si lo desea en caso de que algo salga mal al obtener su registro. posiciones incorrectas o algo así...
Respuesta2
Como usted dice, el volcado y la importación pueden llevar una eternidad. Una opción mucho mejor es usarxtracopia de seguridad, que realizará una restauración tan rápido como pueda copiar los archivos en su lugar.Escribí un blog sobre esoHace un tiempo. Creo que es una forma perfecta de configurar esclavos, realmente rápida y sencilla. Las copias de seguridad llevan mucho tiempo, pero las restauraciones son realmente rápidas. También te recomiendo encarecidamente que utilicescerdoen lugar de gzip si está comprimiendo sus copias de seguridad, fácilmente hizo una diferencia de 4 factores en mis tiempos de copia de seguridad.
Si puede hacer arreglos para detener ambos esclavos al mismo tiempo (para que ambos apunten al mismo registro y posición en db1), por ejemplo, deteniendo DB1 momentáneamente, entonces puede volver a apuntar BAK a DB2 de manera segura usando su información maestra sin necesidad. para hacer una restauración larga. Como dice troyengel, lo más importante es que necesita las actualizaciones de log-slave para realizar la retransmisión; de lo contrario, solo las declaraciones que se originan en DB2 se enviarán a BAK.
También te recomiendo que configures DB2 como de sólo lectura. Esto no afectará la replicación, pero es más seguro ya que no terminará con datos en DB2 y BAK que no estén en DB1.