Replicación en mysql

De WikiSalud
(Diferencias entre revisiones)
Saltar a: navegación, buscar
(Procedimiento para resincronizar)
(Agregado contenido de quitaestaticos.txt)
 
(No se muestran 3 ediciones intermedias realizadas por 2 usuarios)

Última revisión de 14:57 2 feb 2016

[editar] Configuración de replicación de MySQL (maestro-esclavo)

a) Configuración

Maestro: /etc/mysql/my.cnf

# para que otro servidor pueda conectarse
bind-address            = 0.0.0.0 
# cosas propias de la replicación
server-id               = 1
log_bin                 = /var/log/mysql/mysql-bin.log
expire_logs_days        = 1
max_binlog_size         = 10M

(hacer restart)

Esclavo: /etc/mysql/my.cnf

# cosas propias de la replicación
server-id               = 2
# para que se pueda hacer respaldo incremental, también le activamos las bitácoras al esclavo
log_bin                 = /var/log/mysql/mysql-bin.log 
expire_logs_days        = 1
max_binlog_size         = 10M
# si se quiere limitar la replicación a una BD en concreto. Si se quiere varias, debe repetirse la sentencia por cada una, NO USAR COMAS.
replicate-do-db         = egresos

(hacer restart)

b) Usuario Ejecutar en el maestro las siguientes sentencias para crear el usuario de replicación:

CREATE USER 'replicante'@'la-ip-del-esclavo' IDENTIFIED BY 'clavedelreplicante';
GRANT REPLICATION SLAVE ON *.* TO 'replicante'@'la-ip-del-esclavo';

c) Obtener el punto de sincronización del maestro En el maestro ejecutar dos terminales. En la primera hacer un bloqueo de tablas:

FLUSH TABLES WITH READ LOCK;

En la segunda hacer:

SHOW MASTER STATUS ;

La columna File muestra el nombre del fichero de bitácora y Position la posición dentro del fichero. Recordar estos valores para indicárselos al esclavo, pues representan las coordenadas donde el esclavo deberá procesar las actualizaciones realizadas por el maestro.

d) levantar el respaldo de datos -> Parar el maestro (sólo es necesario si puede haber tablas InnoDB, pero por si acaso...). Dejar abierta la sesión donde se ejecutó el FLUSH TABLES WITH READ LOCK; -> Copiar/transferir las bases de datos a replicar (/var/lib/mysql) en maestro y esclavo, que queden igualitas! -> Iniciar el maestro (si es que lo habíamos parado) -> Ejecutar UNLOCK TABLES; en el cliente abierto

e) activar la sincronización ejecutar en el esclavo

CHANGE MASTER TO
         MASTER_HOST='la-ip-del-maestro',
         MASTER_USER='replicante',
         MASTER_PASSWORD='clavedelreplicante',
         MASTER_LOG_FILE='recorded_log_file_name',
         MASTER_LOG_POS=recorded_log_position;

y reiniciar el esclavo.


[editar] Procedimiento para resincronizar

Ejecutar en este orden

Esclavo: Suposición: sólo hay una aplicación que escribe en el maestro (p.e. Apache), para nuestro ejemplo está en el esclavo. Si hubiera más, hay que pararlas TODAS

/etc/init.d/apache2 stop 
mysql -u root -p
stop slave;
\q
/etc/init.d/mysql stop

Maestro:

/etc/init.d/mysql stop
cd /var/lib/mysql

Suposición: hay que transferir las tablas que han podido cambiar del maestro al esclavo, en nuestro ejemplo comienzan por la palabra egresos, pero eliminamos varias antiguas que sabemos que no han cambiado y que se encuentran en el fichero "quitaestaticos.txt"

tar cf egresos.tar egresos --exclude-from=quitaestaticos.txt
scp egresos.tar administrador@la-ip-del-esclavo:
rm egresos.tar

Esclavo:

cd /var/lib/mysql
mv /home/administrador/egresos.tar .
tar xf egresos.tar
rm egresos.tar

Maestro:

/etc/init.d/mysql start
mysql -u root -p
SHOW master STATUS;

(copiar nombre de archivo de bitácora y posición)

Esclavo:

/etc/init.d/mysql start
mysql -u root -p
stop slave;

(cambiar en la siguiente línea el nombre de la bitácora y posición)

CHANGE MASTER TO MASTER_LOG_FILE='mysql-bin.000006', MASTER_LOG_POS=106;
START slave;
\q

Reiniciamos los procesos que acceden a la BD con operaciones de escritura

/etc/init.d/apache2 start


[editar] quitaestaticos.txt

consultas2005*
consultas2006*
consultas2007*
consultas2008*
consultas2009*
consultas2010*
consultas2011*
consultas2012*
consultas2013*
consultas2014*
egresos2002*
egresos2003*
egresos2004*
egresos2005*
egresos2006*
egresos2007*
egresos2008*
egresos2009*
egresos2010*
egresos2011*
egresos2012*
egresos2013*
egresos2014*
Herramientas personales
Espacios de nombres

Variantes
Acciones
Navegación
Herramientas