Configurar replicación en MySQL

La replicación es una buena alternativa para tener disponibilidad de información cuando un servidor se cae. La replicación no suplanta los backups, sino, simplemente garantiza la operatividad.

MySQL soporta un esquema de replicación asincrónica de un servidor maestro a uno o varios servidores esclavos. El “master” escribe las transacciones en un log binario, que sirve como registro de actualizaciones para enviar a los servidores esclavos.

En esta oportunidad solo veremos una configuración Master-Slave, es decir, todas las actualizaciones sobre el servidor maestro son replicadas en el esclavo. Si se realizan actualizaciones sobre el esclavo, estas no se hacen efectivas en el maestro. Para crear un esquema de replicación maestro-maestro es necesario crear un esquema circular, donde cada servidor es maestro y esclavo, a la vez, del otro.

Los pasos para configurar la replicación Maestro-Esclavo son:

  • En el servidor maestro, agregar/modificar, la sección [mysqld] del archivo de configuración my.cnf o my.ini (dependiendo del sistema operativo):

[mysqld]

log-bin=mysql-bin
server-id=1
innodb_flush_log_at_trx_commit=1
sync_binlog=1

  • En el servidor maestro, reiniciar el demonio (o servicio) mysqld
  • En el servidor maestro, crear un usuario con el privilegio “REPLICATION SLAVE”. El usuario no necesita otro privilegio.

CREATE USER ‘user’@ ‘host’ IDENTIFIED BY ‘password’ ;
GRANT REPLICATION SLAVE ON *.* TO ‘user’@host’ IDENTIFIED BY ‘password’;

  • En el servidor maestro, ejecutar ‘FLUSH TABLES WITH READ LOCK;’, para prevenir la escritura a base de datos en el maestro.
  • En el servidor maestro, ejecutar ‘SHOW MASTER STATUS;’ en el maestro y recordar los valores para más adelante
  • En el servidor maestro, ejecutar ‘UNLOCK TABLES;’
  • En el servidor esclavo, modificar el archivo my.cnf o my.ini y reiniciar el daemon:

[mysqld]

server-id=2


En el servidor esclavo, ejecutar las siguientes instrucciones (ajustar los valores de acuerdo al usuario creado y los valores obtenidos al realizar el ‘SHOW MASTER STATUS’ anterior.

CHANGE MASTER TO
MASTER_HOST=’host’,
MASTER_USER=’user’,
MASTER_PASSWORD=’password’,
MASTER_PORT=3306,
MASTER_LOG_FILE=’mysql-BIN.000001′,
MASTER_LOG_POS=98,
MASTER_CONNECT_RETRY=10;

  • En el servido esclavo, ejecutar:

START SLAVE;

  • En el servidor esclavo, para asegurarnos que la replicación se inició satisfactoriamente, en el log de mysql deberíamos ver algo así:

080609 8:47:02 [Note] Slave I/O thread: connected to master ‘root@host:3306′, replication started in log ‘mysql-bin.000001′ at position 98


Vía: Hackosis

9 comentario en este artículoDeje el suyo
  1. tengo entendido que para poder sincronizar necesito tener la misma estructura en ambas bases de datos, osea las mismas tablas con los mismos campos en cada una. si esto es cierto, como hago para poder sincronizar solo una o unas pocas tablas de la base de datos del maestro al esclavo, sin tener que mantener en ambos la totalidad de las tablas?. Ayuda por favor

  2. Si, puedes replicar solo algunas tablas.
    Fíjate este my.cnf, de un servidor Master, de ejemplo:

    replicate-do-db = db_a_replicar
    replicate-ignore-table = db_a_replicar.tabla1_ignorada
    replicate-ignore-table = db_a_replicar.tabla2_ignorada

    Creo que este sencillo ejemplo es suficiente ¿no?

    Saludos.

  3. ok, es claro, pero tengo una ultima inquietud. no es necesario entonces en el esclavo tener todas las tablas del maestro, sino solo aquellas que se van a sincronizar?. muchisimas gracias por su colaboracion.

  4. Efectivamente, en el esclavo puedes tener solo las tablas que quieras. Es decir, en tu Slave podrás tener solo algunas tablas del Master, así como también podrás tener tus propias tablas (que no necesariamente estarán en el Master)

    Saludos.

  5. muchisimas gracias, por la calidad de la respuesta y la oportunidad de la misma. colaboraciones como esta es la que enriquece nuestra labor. Felicitaciones y muchas gracias.

  6. Y que con en engine de las tablas de las bases de datos.? vos pusiste “innodb_flush_log_at_trx_commit=1″ y que con MyISAM? Tocaría cambiarle?
    Y que pasa si en la BD tengo tablas con diferente engine?

    Y de paso muchas gracias por la guia que pusiste.

  7. como puedo modificar my ini

  8. es posible replicar solo algunos datos de una tabla, por ejemplo solo los registros de una determinada ciudad

  9. Hola.. mi pregunta es la siguiente.. luego de q se ha configurado todo para la replicacion de datos… cuando se realizan nuevas actualizaciones en el maestro estas deberian actualizarce en el esclavo de forma automatica??

    Gracias

2 menciones a este artículo
Deje su comentario

Por favor, ingrese su nombre

Por favor, ingrese un correo-e válido

Por favor, ingrese su mensaje

luauf.com 2012

WordPress