REPLICACION EN MYSQL Bases de Datos
Universidad de El Salvador
Facultad Multidisciplinaria de Occidente
Departamento de Ingeniería y Arquitectura
En que consiste la replicación??
La replicación en MySQL se basa en un servidor maestro que toma nota de todos los cambios en las bases de datos (actualizaciones, borrados, y así) en los logs binarios. Por lo tanto, para usar replicación, debe activar el log binario en el servidor maestro.
Ventajas
Poder realizar copia de nuestras bases de datos en emplazamientos muy distantes entre sí, permitiéndonos una rápida recuperación en caso de problemas en el sitio principal.
Replicar los datos que necesitamos. Se pueden realizar copias de todas las bases de datos, de las que nos interesen o solamente de unas tablas en concreto.
Permite aislar la base de datos principal para escrituras.
Tipos de Replicación
Maestro –Esclavo – Todas las actualizaciones sobre el servidor maestro son
replicadas en el esclavo.
Maestro-Maestro – En este esquema, ambos servidores replican sobre los
otros, es decir, ambos son a la vez master y esclavo.
Funcionamiento
El servidor maestro escribe actualizaciones en el fichero de log binario
Estos logs sirven como registros de actualizaciones para enviar a los servidores esclavos
Cuando un esclavo se conecta al maestro, informa al maestro de la posición
El esclavo recibe cualquier actualización que han tenido lugar
Funcionamiento
Es extremadamente importante tener en cuenta que el log binario simplemente es un registro que comienza en un punto fijo en el tiempo en el que activa el log binario.
Cualquier esclavo que inicialice necesita copias de las bases
de datos del maestro tal y como estaban en el momento en que activó el log binario en el maestro. Si arranca sus esclavos con bases de datos que no están en el mismo estado que las del maestro cuando arrancó el log binario, es muy posible que fallen sus esclavos
Configurar Replicación
Maestro--Esclavo
CONFIGURACION MASTER
En el servidor maestro, agregar/modificar, la sección [mysqld] del archivo de configuración my.cnf o my.ini (/etc/mysql/my.cnf en debian):
server-id = 1
log-bin=mysql-bin.log
Creamos el usuario que se conectara al master para la replicación:
GRANT REPLICATION SLAVE ON *.* TO
‘usuario’@’host’ IDENTIFIED BY ‘contraseña’;
Configurar Replicación
Maestro--Esclavo
FLUSH PRIVILEGES; Decir al servidor que vuelva a leer las tablas de permisos.
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 ‘UNLOCK TABLES;’
En el servidor maestro, reiniciar el demonio (o servicio) mysqld
En el servidor maestro, ejecutar ‘SHOW MASTER STATUS;’ en el maestro y guardar los valores para la posterior configuracion del esclavo.
• En el servidor esclavo, modificar el archivo my.cnf o my.ini: [mysqld]
server-id=2
master-host = Ip Master
master-user= usuario
master-password= contraseña
master-connect-retry= 60
master-port=3306
master-log-file=mysql-bin.000005
master-log-pos=98
binlog-do-db= bd a replicar
• Ajustar los valores de acuerdo al usuario creado y los valores obtenidos al realizar el ‘SHOW MASTER STATUS’ anterior.
Configuración de Esclavo
• Ejecutamos la sentencia para ajustar los valores de la replicacion. STOP SLAVE;
CHANGE MASTER TO MASTER_HOST=’Ip Master’, MASTER_USER=’usuario’, MASTER_PASSWORD=‘contraseña’ MASTER_PORT=3306 ,
MASTER_LOG_FILE=’mysql-BIN.000001′, MASTER_LOG_POS=98;
(Según la información de la sentencia SHOW MASTER STATUS). • En el servido esclavo, ejecutar:
START SLAVE;
Configuración de Esclavo
Configurar Replicación
Master-Master
CONFIGURACION MASTER 1 Configuramos de la misma forma y modificamos el archivo
my.cnf omy.ini (/etc/mysql/my.cnf en debian): server-id = 1
log-bin=mysql-bin.log
master-host = Ip Master2
master-user= usuario
master-password= contraseña
master-connect-retry= 60
master-port=3306
binlog-do-db= bd a replicar
• Creamos el usuario para el Master 2 GRANT REPLICATION SLAVE ON *.* TO ‘usuario2’@’host2’ IDENTIFIED BY ‘contraseña2’;
• FLUSH PRIVILEGES;
• Configuramos el Master 1 como esclavo de Master 2 CHANGE MASTER TO MASTER_HOST=’Ip Master2’, MASTER_USER=’usuario2’, MASTER_PASSWORD=‘contraseña2’ MASTER_PORT=3306,
MASTER_LOG_FILE=’mysql-BIN.000003′, MASTER_LOG_POS=106 ;
(Según la información de la sentencia SHOW MASTER STATUS). START SLAVE;
Configurar Replicación
Master-Master
CONFIGURACION MASTER 2 Se configura de la misma forma que el master 1 En el servidor master 2, modificar el archivo my.cnf o my.ini:
[mysqld]
server-id=2
log-bin=mysql-bin.log
master-host = Ip Master1
master-user= usuario
master-password= contraseña
master-connect-retry= 60
master-port=3306
binlog-do-db= bd a replicar
Configurar Replicación
Master-Master
• Creamos el usuario para el Master 1 GRANT REPLICATION SLAVE ON *.* TO ‘usuario1’@’host1’ IDENTIFIED BY ‘contraseña1’; FLUSH PRIVILEGES;
• Configuramos el Master 2 como esclavo de Master 1 CHANGE MASTER TO MASTER_HOST=’Ip Master1’, MASTER_USER=’usuario’, MASTER_PASSWORD=‘contraseña’ MASTER_PORT=3306,
MASTER_LOG_FILE=’mysql-BIN.000003′, MASTER_LOG_POS=106;
(Según la información de la sentencia SHOW MASTER STATUS). START SLAVE;
Configurar Replicación
Master-Master
De la información del SLAVE nos interesa que los valores:
Slave_IO_Running y Slave_SQL_Running estén en YES en ambos casos. Si todo está funcionando podemos probar la Replicación ingresando al phpmyadmin de uno de los Servers para agregar un valor y verificar que éste se haya replicado en la BD del otro Server.
Configurar Replicación
Master-Master