Sei sulla pagina 1di 18

2020

MySql: Replicación de bases de datos

Hernán Henao Hernández


MySql: Replicación de bases de datos

El proceso de replicación de una base de datos consiste en


replicar las consultas de actualización (tanto DML como DDL)
en una base de datos maestra (master) sobre una o varias
bases de datos esclavas (slave), de manera que tengamos
una copia de las mismas a lo largo del tiempo.

MySQL soporta replicación unidireccional asíncrona, es decir,


las consultas de actualización ejecutadas en el maestro son
replicadas en los servidores esclavos. Esta replicación se
realiza de forma transparente. Además es instantánea si los
servidores esclavos están levantandos y en estado de
replicación.

Hernán Henao Hernández


MySql: Replicación de bases de datos

Copia de seguridad:
En condiciones normales, una base de datos replicada de forma correcta es válida como copia de seguridad.

Además se puede realizar copias de seguridad usando un servidor esclavo para así no interferir al servidor
maestro.

Mejorar la escalabilidad:
Podríamos configurar nuestras aplicaciones para balancear las consultas de lectura (SELECT) entre los
servidores replicados.

Podríamos usar herramientas como MySQL Proxy para balancear las consultas de lectura entre los
servidores replicados y enviar las consultas de actualización de datos al maestro.

Alta disponibilidad:
En aplicaciones y entornos en donde sólo se requieren lecturas, podríamos configurar nuestras aplicaciones
para balancear las consultas de lectura (SELECT) entre los servidores replicados de manera que si uno se
cae se continué prestando servicio.

Hernán Henao Hernández


MySql: Replicación de bases de datos

El Log Binario.
El log binario es un archivo binario
gestionado por el servidor de base de datos
en el que se registran todas las sentencias
SQL de modificación de datos o estructura.

En el caso de la replicación es importante


saber que cada servidor esclavo se conecta
al servidor maestro y le solicita que le envié
las sentencias registradas en los logs
binarios a partir de una posición, para ello,
cada esclavo mantiene un archivo a modo
de índice en donde registra la posición
actual de la replicación.

Gracias a esto, podemos detener el esclavo (STOP SLAVE), que haya un corte de red, etc.. de manera que cuando se vuelva a iniciar la replicación (START
SLAVE) o se restablezca la comunicación… Pase el tiempo que pase) el esclavo solicitará al maestro todas las sentencias a ejecutar desde su estado actual y las
irá ejecutando secuencialmente de manera que en cuestión de segundos ambos servidores tendrán las bases de datos con el mismo contenido y estructura.

El log binario por defecto está ubicado en la carpeta <MYSQL_HOME>/data y se llama igual que la máquina con el sufijo -bin y un número como extensión.
Ejemplos: mysql-bin.00001, mysql-bin.00002, mysql-bin.00003

Hernán Henao Hernández


MySql: Replicación de bases de datos

Hernán Henao Hernández


MySql: Replicación de bases de datos

Hernán Henao Hernández


MySql: Replicación de bases de datos

Activo Pasivo

Hernán Henao Hernández


MySql: Replicación de bases de datos

Multi replica Replica tipo anillo

Hernán Henao Hernández


MySql: Replicación de bases de datos

Multi replica tipo cascada


Replica tipo anillo con replicas
Hernán Henao Hernández
MySql: Replicación de bases de datos

Los datos de DB1, están escritas


Agujero negro en Master1 y en replica

MySql soporta el motor de almacenamiento tipo: BLACKHOLE: Procesa todas las consultas pero no almacena los datos en
ningún sitio. Como si fuera un agujero negro
Hernán Henao Hernández
MySql: Replicación de bases de datos

sudo nano /etc/mysql/mysql.conf.d/mysqld.cnf

#bind-address = 127.0.0.1

#-----------------------------------------------------------------
#configuración para servidor de replicación
server-id=1
log_bin = /var/log/mysql/mysql-bin.log
binlog_do_db=nombre_base_de_datos_a_replicar

Nota: El server-id en el servidor siempre será 1, y los esclavos


serán 2, 3… n según sea el caso en binlog-do-db se pone el
nombre de la base de datos que replicara después de signo =
No olvidar reiniciar el servicio de mysql
Hernán Henao Hernández
MySql: Replicación de bases de datos

Crear un usuario con privilegios de replicación, preferiblemente hacerlo desde la consola de mysql (Shell), para ello vamos
Al terminal de putty y se escribe el comando:

mysql -u root -p

La terminal solicita la contraseña de mysql que se tenga Se crea el usuario con su

respectiva contraseña:

CREATE USER 'esclavo'@'%' IDENTIFIED BY 'claveEsclavo123!';


GRANT REPLICATION SLAVE ON *.* TO 'esclavo'@'%' IDENTIFIED BY 'claveEsclavo123!';
FLUSH PRIVILEGES;

Hernán Henao Hernández


MySql: Replicación de bases de datos

Seleccionar la base de datos a replicar y realice lo siguiente:


USE nombre_base_de_datos_a_replicar;
FLUSH TABLES WITH READ LOCK;
SHOW MASTER STATUS;

El resultado será algo similar a la figura:

La columna File muestra el nombre del log,


mientras que Position muestra el
desplazamiento*.

Por último desbloqueamos la base de datos con el comando:

UNLOCK TABLES;
quit;
Hernán Henao Hernández
MySql: Replicación de bases de datos

sudo nano /etc/mysql/mysql.conf.d/mysqld.cnf

#bind-address = 127.0.0.1

#-------------------------------------------------------------------
# Configuración como esclavo para replicar bases de datos
server-id=2
replicate-do-db=nombre_base_de_datos_a_replicar

REINICIAR SERVICIO DE MYSQL


service mysql restart

Hernán Henao Hernández


MySql: Replicación de bases de datos

Desde la terminal de mysql (Shell), le indicaremos al esclavo la dirección del maestro, el usuario, password y
directivas de control (master_log_file y master_log_pos)

CHANGE MASTER TO master_host='10.78.128.49', master_user='esclavo', master_password='claveEsclavo123!',


master_port=3306, master_log_file='mysql-bin.000001', master_log_pos=154;

Ahora iniciamos el esclavo y comprobamos su estado desde la misma terminal.


START SLAVE;
SHOW SLAVE STATUS\G;

Hernán Henao Hernández


MySql: Replicación de bases de datos

Saldrá una ventana como la siguiente, verificar si hay errores

Hernán Henao Hernández


MySql: Replicación de bases de datos

Realice un cambio en la base de datos (insertar/eliminar registros), del maestro y consulte en el esclavo si el
cambio se refleja de manera automática.

Consideraciones:
• No funciona en maquinas virtuales clonadas (el UUID de MySQL debe ser diferente)
• Realice cambios en el esclavo, y verifique el maestro.
• Realice un cambio de estructura de la base de datos (cambiar el nombre a una tabla), verifique el
cambio en el esclavo.
• Luego haga un cambio de estructura en una tabla, luego verifique el cambio en el esclavo.
• Los errores en el esclavo normalmente son por direcciones ip, o por los cambios en el tamaño del
desplazamiento.
• En caso de corregir algo en el esclavo detener el servicio con stop slave;

Hernán Henao Hernández

Potrebbero piacerti anche