Configurando replicación Master/Slave 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
Comentarios