Configuración de replicación - base de datos
Se explica como configurar dos servidores para que haya una replicación con delay personalidazado
Glosario:
Replicación: Segundo servidor de base de datos, que reproduce (replica) sentencia a sentencia lo que ocurre en un servidor ‘primario’
Master: Servidor de base de datos principal, en él se escriben y se leen datos. Es el que el Slave utiliza para copiar todo lo que en dicho servidor se ejecute.
Slave: Es el servidor que se conecta y replica en sí mismo todas las sentencias ejecutadas en el Master.
CONFIGURACIÓN MASTER:
Primero, vamos a configurar el master. Este proceso necesita tomar una imagen consistente de la base de datos,
lo que implica configurar un bloqueo global de lectura, esto significa
que la base de datos será de solo lectura y todo lo que se escribe será bloqueado durante
el bloqueo. Vas a necesitar un plan para este tiempo fuera.
1) ACTUALIZANDO LA CONFIGURACIÓN:
En el archivo /etc/mysql/mysql.conf.d/mysqld.cnf descomentar, o configurar lo siguiente:
bind-address = 192.168.99.251
#Esto hace que el master escuche sobre su IP privada
server-id = 1
# Configura el server-id a 1 (el cual debe ser único por cada nodo entre un conjunto de nodos maestro y esclavo conectados)
log_bin = /var/log/mysql/mysql-bin.log
#Y habilita el ingreso binario
2) REINICIAR EL SERVICIO DE MYSQL PARA QUE SE REALICEN LOS CAMBIOS:
sudo systemctl restart mysql
3) CREAR UN USUARIO PARA REPLICAR:
Tenemos que configurar el esclavo para conectarlo con el master vía una cuenta dedicada.
La cuenta necesita privilegios PARA REPLICAR EL ESCLAVO. Aquí usamos el nombre de usuario “repl”.
$ mysql -u root -p
Password:
4) BLOQUEAR EL MAESTRO:
Ahora, necesitamos bloquear el master para obtener una imagen coherente del arranque del slave.
Tenga en cuenta que este bloqueo se libera al salir del cliente CLI de mysql o al abrir UNLOCK TABLES.
El bloqueo debe permanecer en su lugar hasta que se complete el mysqldump en el paso 6 a continuación.
5) ANOTAR LA POSICIÓN DEL REGISTRO DE REPLICACIONES DE MASTER:
Esta información será necesaria para inicializar el slave en un paso posterior.
6) DUMPEA LA BASE DE DATOS DEL MASTER:
Nota: también puedes detener mysqld y transferir los archivos de la base de datos.
7) DESBLOQUEAR LA BASE DE DATOS DEL MASTER:
Puedes hacerlo tanto por tu mysql CLI shell existente, o ejecutando:
8) COPIAR EL ARCHIVO AL SLAVE:
Transferir el archivo de dumpeo con seguridad al slave, por ej: usando scp:
SLAVE SETUP
1) ACTUALIZAR LA CONFIGURACIÓN:
En el archivo /etc/mysql/mysql.conf.d/mysqld.cnf, descomentar o configurar lo siguiente:
Al igual que para el master, esto hace que el slave escuche en la misma IP privada, establece el server-id (esta vez en 2),
y habilita el logueo binario. Por más de que el logueo binario no sea estrictamente necesario,
tiene sentido mantener la configuración del slave tan cerca del master como sea posible, en caso de que el slave sea ascendido a master.
Esto también permite al slave a actuar como el master para otro slave.
2) REINICIA EL SERVICIO MYSQL PARA QUE LOS CAMBIOS HAGAN EFECTO:
3) IMPORTA EL DUMP DE LA BASE DE DATOS:
Importa el archivo dump que creaste en el master y copiaste al slave:
4) CONFIGURAR EL SLAVE PARA QUE SE COMUNIQUE CON EL MASTER:
En este punto, el slave está sincronizado con el master y listo para aceptar y replicar los cambios hechos
al master. Los valores mysql-bin.000001 y 613 vienen de la salida del SHOW MASTER STATUS que ejecutaste previamente.
VERIFICAR SI LA REPLICACIÓN ESTÁ FUNCIONANDO:
Y listo! Si llegaste hasta aquí sin errores, crea una nueva tabla/tupla en el master.
Los cambios se propagaron casi instantáneamente al slave. Chequea si los cambios aparecen en el slave.
Artículos Relacionados
https://www.opsdash.com/blog/mysql-replication-howto.html
https://dev.mysql.com/doc/refman/5.7/en/change-master-to.html
https://dev.mysql.com/doc/refman/5.7/en/replication-delayed.html