jueves, 19 de agosto de 2010

Replicación Maestro->Esclavo1->Esclavo2 en mySQL

A continuación les dejo una chuleta (cheat sheet) para configurar bases de datos mySQL de forma Maestro->Esclavo1->Esclavo2.

Configuración inicial

Maestro: host localhost, port 17050
Esclavo1: host localhost, port 17051
Esclavo2: host localhost, port 17052

Configurando Maestro-Esclavo1

Primero: Configuración del Maestro
  1. Debe tener log-bin (bajo [mysqld] en my.cnf)
  2. Debe tener un usuario para replicación
    GRANT REPLICATION SLAVE ON *.* TO 'repl'@'localhost' IDENTIFIED BY '123456';
  3. Debe extraer los parámetros de configuración para Esclavo1
    SHOW MASTER STATUS;

Segundo: Configuración del Esclavo1
  1. Debe tener log-bin (bajo [mysqld] en my.cnf)
  2. Debe tener log-slave-updates (bajo [mysqld] en my.cnf)
  3. Debe tener un usuario para replicación
    GRANT REPLICATION SLAVE ON *.* TO 'repl'@'localhost' IDENTIFIED BY '123456';
  4. Debe configurar Esclavo1 como esclavo de Maestro, para lo cual deberá introducir los parámetros obtenidos arriba en el paso 3.
    CHANGE MASTER TO MASTER_HOST='localhost', MASTER_PORT=17050, MASTER_USER='repl', MASTER_PASSWORD='123456', MASTER_LOG_FILE='mysql-bin.000001', MASTER_LOG_POS=202
  5. Debe comenzar la replicación
    START SLAVE;

Incorporando al Esclavo2

Una vez que el esquema Maestro-Esclavo1 se encuentre funcionando correctamente, se procederá a configurar el Esclavo2.

Primero: Extracción del dump (a partir de Esclavo1)
  1. Debe detener la replica como esclavo y liberar sus logs (en Esclavo1):
    STOP SLAVE;
    FLUSH LOGS;
  2. Debe extraer un dump (de Esclavo1)
    mysqldump -u root --password=msandbox --port=17051 --host=127.0.0.1 --master-data=2 test > dump1.sql
  3. Reiniciar la replica como esclavo (en Esclavo1 - volviendo a la normalidad):
    START SLAVE;

Segundo: Configuración del Esclavo2
  1. Restaurar el dump (en Esclavo2)
    mysql -u root --password=msandbox --port=17051 --host=127.0.0.1 test < dump1.sql
  2. Extraer parámetros de configuración del maestro. Para ello deberá buscar en el dump (dump1.sql) una línea como la siguiente:
    -- CHANGE MASTER TO MASTER_LOG_FILE='mysql-bin.000003', MASTER_LOG_POS=106
  3. Configurar Esclavo2 como esclavo de Esclavo1. Deberá copiar los parámetros extraidos en el paso 2 e introducirlos en este comando:
    CHANGE MASTER TO MASTER_HOST='localhost', MASTER_PORT=17051, MASTER_USER='repl', MASTER_PASSWORD='123456', MASTER_LOG_FILE='mysql-bin.000003', MASTER_LOG_POS=106
  4. Iniciar el esclavo (en Esclavo2)
    START SLAVE;

NOTA: La configuración inicial Maestro-Esclavo se asume desde el inicio, antes de que la base de datos tuviese registro alguno.

Para este ejercicio utilicé MySQL Sandbox

Y para realizar inserciones -sin parar- en las tablas del maestro utilicé el siguiente script:

#!/bin/bash

x=0;     # initialize x to 0
#while [ "$x" -le 10 ]; do
while true; do
    mysql -u root --password=msandbox --port=17050 --host=127.0.0.1 -e "INSERT INTO test.a VALUES($x)"   
    # increment the value of x:
    x=$(expr $x + 1)
    sleep 2
done

OJO: La tabla que uso es muy sencilla: CREATE TABLE a (a int); dentro del esquema test que instala por defecto MySQL Sandbox.


No hay comentarios:

Publicar un comentario en la entrada