Cómo configurar la replicación MySQL con un tiempo de inactividad mínimo

12

Básicamente tenemos una gran base de datos MySQL y estamos buscando hacer una replicación a un esclavo (configuración maestro esclavo). ¿Tienen alguna guía paso a paso sobre cómo hacer esto con el tiempo mínimo de inactividad en la base de datos? Hacer una copia de seguridad de la base de datos y transferir la copia de seguridad al servidor esclavo (incluso a través de una red privada) lleva aproximadamente 40 minutos. Un tiempo de inactividad bastante largo.

Patricio
fuente

Respuestas:

15

Supongo que usa InnoDB como motor de almacenamiento. Si es así, debe activar bin-logging . Si no está activado ahora, debe reiniciar MySQL después de modificar my.cnf. Es el único tiempo de inactividad, después del cual puede realizar un volcado de la base de datos con la posición binlog sin bloquear la base de datos:

mysqldump --skip-lock-tables --single-transaction --flush-logs --hex-blob --master-data=2 -A

Según esta copia de seguridad, restaure los datos en el esclavo. Después de esto, puede seguir cualquier tutorial de replicación de MySQL y dejar que el esclavo se ponga al día / ejecute junto con el maestro.

pQd
fuente
¿Qué pasaría si algunas tablas no están usando innodb? ¿Y la copia de seguridad anterior seguiría siendo válida si uso --databases para volcar un subconjunto de las bases de datos en lugar de -A?
Mathieu
Si algunas tablas no usan innodb, la copia de seguridad puede ser inconsistente. ver aquí: stackoverflow.com/a/7461466/104398 ; la copia de seguridad no contendrá esas bases de datos omitidas. Si configura la replicación basada en dicha copia de seguridad y no filtra lo que se replica, su replicación se interrumpirá tan pronto como haya alguna operación en las bases de datos omitidas.
pQd
Ok, convertí mis tablas restantes de myisam a innodb y me aseguré de que solo las bases de datos que quiero sean replicadas / respaldadas.
Mathieu
3

Para iniciar una replicación necesita una copia consistente de su base de datos en el esclavo

¿están respaldadas sus mesas myisam o innodb? para averiguar el problema

show table status

y mira la columna 'Motor'

si todas las tablas son innodb, entonces puede hacer una configuración de tiempo de inactividad cero usando mysqldump --single-transaction e importar eso al esclavo

si las tablas son myisam, deberá haber un tiempo de inactividad ya que deberá bloquear las tablas para escribir mientras se copian. mysqlhotcopy es la herramienta para ayudarte con eso.

alternativamente, si está utilizando LVM (administrador de volumen lógico), puede detener la base de datos, tomar una instantánea de LVM en unos segundos e iniciar el db nuevamente. Luego puede hacer una copia consistente de la instantánea.

Aleksandar Ivanisevic
fuente
1

Para configurar el esclavo, deberá tomar una instantánea de los datos y registrar la posición del registro binario. Hacer una copia de seguridad de la base de datos no debería causar tiempo de inactividad, aunque sí reducirá el rendimiento, pero de todos modos ya está haciendo una copia de seguridad de la base de datos, ¿verdad? Puede encontrar que la copia de seguridad necesita bloquear algunas tablas y esto puede causar bloqueos en su aplicación, realmente necesita ver cómo se implementa para eso.

¿Puedes tomar una foto del disco? Eso reduciría considerablemente el tiempo de inactividad si puede hacer una copia de seguridad.

hellomynameisjoel
fuente