Replicación en mysql

De WikiSalud
Revisión a fecha de 19:32 27 jun 2014; Kadejo (Discusión | contribuciones)

(dif) ← Revisión anterior | Revisión actual (dif) | Revisión siguiente → (dif)
Saltar a: navegación, buscar

Configuración de replicación de MySQL (maestro-esclavo)

a) Configuración Maestro: /etc/mysql/my.cnf

  1. para que otro servidor pueda conectarse

bind-address = 0.0.0.0

  1. 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

  1. cosas propias de la replicación

server-id = 2

  1. 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

  1. 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.


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@10.10.20.16: 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 /etc/init.d/apache2 start

Herramientas personales
Espacios de nombres

Variantes
Acciones
Navegación
Herramientas