11 Mar 2015

Configurar replicación en MySQL

Configurar replicación en MySQL

La replicación es una buena alternativa para tener disponibilidad de información cuando un servidor se cae. Estono 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.

Ahora veremos como crear un esquema Master-Slave, es decir, que las afectaciones hechas sobre el servidor Maestro se reflejen en el Esclavo.

Hay que mencionar que si se hacen cambios sobre el esclavo, estas no se hacen efectivas en el maestro. 

1. Configurar el Master

  • 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

Con esto le decimos al servidor que utilice un archivo de log de operaciones y que las transmita después de un commit.


  • Reiniciar el demonio (o servicio) mysqld.

  • 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’;
  • Ejecutar ‘FLUSH TABLES WITH READ LOCK;’, para prevenir la escritura a base de datos en el maestro (por lo que el uso de la base de datos se debe restringir durante la operación).

  • Ejecutar ‘SHOW MASTER STATUS;’  y recordar los valores File y Position.

  • Ejecutar ‘UNLOCK TABLES;’ para permitir de nuevo la escritura (y el uso de la base de datos)


2. Configurar el Slave

  • Modificar el archivo my.cnf o my.ini para definir el id del servidor:


[mysqld]
server-id=2
  • Reiniciar el servicio de mysqld.

  • Ejecutar las siguientes instrucciones (ajustar los valores de acuerdo al usuario creado y los valores obtenidos al realizar el ‘SHOW MASTER STATUS’ en el punto 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;
  • Ejecutar: START SLAVE;


3. Validar

Desde el slave, ejecutar

SHOW SLAVE STATUS \G;

Si el valor de Seconds_Behind_Master no es nulo, quiere decir que ya tenemos la replicación trabajando. Con esto, si se presentaran problemas en nuestra base de datos principal, fácilmente podemos direccionar nuestra aplicación a la replicación y continuar con la operación.

Artículos relacionados