Replicacion en MYSQL entre 2 servidores Apache2 con Debian Squeeze « [email protected]

6
7/21/2019 Replicacion en MYSQL entre 2 servidores Apache2 con Debian Squeeze « [email protected] http://slidepdf.com/reader/full/replicacion-en-mysql-entre-2-servidores-apache2-con-debian-squeeze-carphomepdf 1/6 8/12/2015 Replicac ion en M YSQL entr e 2 s er vidor es Apac he2 c on Debian Squeez e « c ar p@hom e http://www.danieldemichele.com.ar/2011/10/09/replicacion-en-mysql-entre-2-servidores-apache2-en-debian-squeeze/ CARP@HOME EXPLICANDO LO QUE NADIE ME EXPLICO  Suscríbete vía RSS Replicacion en MYSQL entre 2 servidores Apache2 con Debian Squeeze ¿Que es la replicacion? La Replicación es un mecanismo mediante el cual los cambios efectuad os a una base de datos (MASTER) impactan inmediatamente sobre otra/s (SLAVES) permitiendo poseer contenido sincronizado y distribuído entre varios servidores mysql: ideal para balancear carga entre nodos. Sin embargo, replicar de este modo no constituye un método eficiente para garantizar la integridad de la información ni una solución de Backup dado que un e ventual daño a la BD MASTER se replicará inmediatamente a las SLAVES. Este método (MASTER->SLAVE) supone además la limitación de que só lo la Base de Datos Master es suceptible de operaciones INSERT/UPDATE/DELETE, en tanto que la Slave se encuentra limitada a SELECTS. Si bien no es la mejor solución para desa rrollar una estrategia de HA veremos cómo implementarla y dejaremos para la próxima edición un modelo de Replicación más efectivo (MASTER-MASTER) a la hora de pensar en Loa d Balancing y HA. Editado 25-11-2011: el post Replicación Master-Master en Mysql ya se encuentra disponible. Presentacion del Escenario  Vamos a explicar cómo implementar un mecanismo de Replicación MASTER-SLAVE entre dos bases de datos Mysql alojadas en dos Servidores Apache2 corriendo Debian Squeeze. Este artículo asume que se poseen dos computadoras en Red corriendo Linux con LAMPP instalado en ambos casos. Presentemos el escenario: Server 1 (Master): 192.168.1.33 Server 2 (Slave): 192.168.1.34 Base de Datos MYSQL en Server 1: mibase (la base de datos debe tener al menos 1 tabla con datos para poder verificar la replicación) Manos a la Obra: configurando el MASTER (192.168.1.33) Trabajaremos primero en el Servidor MASTER. Vamos a realizar las configuraciones pertinentes al archivo my.cnf  y crearemos un usuario mysql con privilegios ALL + REPLICATION. A lo largo de este breve tutorial trabajaremos exclusivamente con una terminal o en modo texto. Esta es una buena práctica dado que la mayoría de las veces realizaremos estas tareas administrativas vía ssh en servidores remotos o bien en boxes que, por cuestiones de rendimiento, no tienen Interface Gráfica. Lo primero que haremos es editar el archivo de configuración de MYSQL que se encuentra en /etc/mysql/my.cnf. Recordemos que para editar estos archivos debemos loguearnos como root. admin@server1:~$ su root ingresamos pass de root root@server1:/# pico /etc/mysql/my.cnf  Al abrir el fichero nos encontraremos con los parametros que configuran el Motor de Base de Datos Mysql. Buscamos en el archivo la sección con cabecera [mysqld]. Lo primero es encontrar la línea bind-address  cuyo valor estará por defecto en 127.0.0.1. Esta línea limita el alcance del Servicio M s l al Servidor 1 dado ue necesitaremos comunicarnos con el Carp está leyendo ... Categorías Discovering Linux High Availability Mysql Seguridad Sysadmin Website Optimization  Archivo abril 2013  junio 2012 diciembre 2011 noviembre 2011 octubre 2011 INICIO

Transcript of Replicacion en MYSQL entre 2 servidores Apache2 con Debian Squeeze « [email protected]

Page 1: Replicacion en MYSQL entre 2 servidores Apache2 con Debian Squeeze « carp@home.pdf

7/21/2019 Replicacion en MYSQL entre 2 servidores Apache2 con Debian Squeeze « [email protected]

http://slidepdf.com/reader/full/replicacion-en-mysql-entre-2-servidores-apache2-con-debian-squeeze-carphomepdf 1/6

8/12/2015 Replicacion en MYSQL entre 2 servidores Apache2 con Debian Squeeze « carp@home

http://www.danieldemichele.com.ar/2011/10/09/replicacion-en-mysql-entre-2-servidores-apache2-en-debian-squeeze/

CARP@HOMEEXPLICANDO LO QUE NADIE ME EXPLICO Suscríbete vía RSS

Replicacion en MYSQL entre 2 servidores Apache2

con Debian Squeeze

¿Que es la replicacion?La Replicación es un mecanismo mediante el cual los cambios efectuad os a una base de datos(MASTER) impactan inmediatamente sobre otra/s (SLAVES) permitiendo poseer contenidosincronizado y distribuído entre varios servidores mysql: ideal para balancear carga entrenodos. Sin embargo, replicar de este modo no constituye un método eficiente para garantizarla integridad de la información ni una solución de Backup dado que un e ventual daño a la BDMASTER se replicará inmediatamente a las SLAVES.

Este método (MASTER->SLAVE) supone además la limitación de que só lo la Base de DatosMaster es suceptible de operaciones INSERT/UPDATE/DELETE, en tanto que la Slave seencuentra limitada a SELECTS. Si bien no es la mejor solución para desa rrollar una estrategia

de HA veremos cómo implementarla y dejaremos para la próxima edición un modelo deReplicación más efectivo (MASTER-MASTER) a la hora de pensar en Loa d Balancing y HA.

Editado 25-11-2011: el post Replicación Master-Master en Mysql ya se encuentradisponible.

Presentacion del Escenario Vamos a explicar cómo implementar un mecanismo de Replicación MASTER-SLAVE entre dosbases de datos Mysql alojadas en dos Servidores Apache2 corriendo Debian Squeeze. Esteartículo asume que se poseen dos computadoras en Red corriendo Linux con LAMPP instaladoen ambos casos. Presentemos el escenario:

Server 1 (Master): 192.168.1.33Server 2 (Slave): 192.168.1.34Base de Datos MYSQL en Server 1: mibase (la base de datos debe tener al menos 1 tablacon datos para poder verificar la replicación)

Manos a la Obra: configurando el MASTER (192.168.1.33)Trabajaremos primero en el Servidor MASTER. Vamos a realizar las configuracionespertinentes al archivo my.cnf y crearemos un usuario mysql con privilegios ALL +REPLICATION. A lo largo de este breve tutorial trabajaremos exclusivamente con unaterminal o en modo texto. Esta es una buena práctica dado que la mayoría de las vecesrealizaremos estas tareas administrativas vía ssh en servidores remotos o bien en boxes que,

por cuestiones de rendimiento, no tienen Interface Gráfica.

Lo primero que haremos es editar el archivo de configuración de MYSQL que se encuentra en/etc/mysql/my.cnf. Recordemos que para editar estos archivos debemos loguearnos comoroot.

admin@server1:~$ su root

ingresamos pass de root

root@server1:/# pico /etc/mysql/my.cnf

Al abrir el fichero nos encontraremos con los parametros que configuran el Motor de Base deDatos Mysql. Buscamos en el archivo la sección con cabecera [mysqld]. Lo primero esencontrar la línea bind-address cuyo valor estará por defecto en 127.0.0.1. Esta línea limita

el alcance del Servicio M s l al Servidor 1 dado ue necesitaremos comunicarnos con el

Carp está leyendo ...

Categorías

Discovering Linux

High Availability

Mysql

Seguridad

Sysadmin

Website Optimization

Archivo

abril 2013

junio 2012

diciembre 2011

noviembre 2011

octubre 2011

INICIO

Page 2: Replicacion en MYSQL entre 2 servidores Apache2 con Debian Squeeze « carp@home.pdf

7/21/2019 Replicacion en MYSQL entre 2 servidores Apache2 con Debian Squeeze « [email protected]

http://slidepdf.com/reader/full/replicacion-en-mysql-entre-2-servidores-apache2-con-debian-squeeze-carphomepdf 2/6

8/12/2015 Replicacion en MYSQL entre 2 servidores Apache2 con Debian Squeeze « carp@home

http://www.danieldemichele.com.ar/2011/10/09/replicacion-en-mysql-entre-2-servidores-apache2-en-debian-squeeze/

Servidor 2, la comentamos agregado un # delante de suerte que quedará:

#bind-address = 127.0.0.1

Si bajamos un poco más en el fichero (siempre dentro de la cabecera [mysqld])encontraremos los siguientes valores que estarán comentados con # y deben serdescomentados y configurados del siguiente modo:

server‐id=1

log_bin = /var/log/mysql/mysql‐bin.log

binlog_do_db = nombredelabasededatos

Guardamos los cambios al fichero my.cnf y luego reiniciamos MYSQL

root@server1:/# /etc/init.d/mysql restart

Con esto tenemos la configuración lista. Procedemos a la creación de un usuario mysql queserá el encargado de tramitar la Replicación. Para mantener los comandos claros digamos queel usuario mysql que crearemos tendrá como nombre daniel y como clave demichele.Procedemos entonces a la creación del usuario ingresando a mysql como root

root@server1:/# mysql ‐u root ‐p

clave de root mysql> GRANT REPLICATION SLAVE ON *.* TO 'daniel'@'%' IDENTIFIED BY 'demichele';

mysql> GRANT ALL PRIVILEGES ON *.* TO 'daniel'@'%';

mysql> FLUSH PRIVILEGES;

mysql> USE mibase;

mysql> FLUSH TABLES WITH READ LOCK;

mysql> SHOW MASTER STATUS;

Cada uno de los comandos escritos en la shell de mysql terminan en ; y deben ingresarse dea uno seguidos de la tecla Enter. Terminada esta rutina, el comando SHOW MASTER STATUS nos mostrará una tabla de este tipo:

Al finalizar la configuración del Server 2 necesitaremos los datos que aparecen listados en lascolumnas File y Position de la tabla obtenida por lo que es recomendable guardarlos.

Por último quitamos el Read Lock que habíamos puesto a las tablas y salimos de la shellmysql. Hemos terminado la configuración del Server 1 con la Base de Datos MASTER.

mysql> UNLOCK TABLES;

mysql> QUIT;

root@server1:/#

Configurando el Server Slave (192.168.1.34) Vamos a comenzar nuevamente por editar el fichero de configuración de MYSQL, ubicado en/etc/mysql/my.cnf .

Al igual que en servidor MASTER, comentaremos la línea que limita el alcance del servicio a lainterface local (bind-address).

Comentada la línea debemos introducir los siguientes cambios bajo la cabecera [mysqld] demodo que el fichero quede así:

root@server2:/# pico /etc/mysql/my.cnf

Page 3: Replicacion en MYSQL entre 2 servidores Apache2 con Debian Squeeze « carp@home.pdf

7/21/2019 Replicacion en MYSQL entre 2 servidores Apache2 con Debian Squeeze « [email protected]

http://slidepdf.com/reader/full/replicacion-en-mysql-entre-2-servidores-apache2-con-debian-squeeze-carphomepdf 3/6

8/12/2015 Replicacion en MYSQL entre 2 servidores Apache2 con Debian Squeeze « carp@home

http://www.danieldemichele.com.ar/2011/10/09/replicacion-en-mysql-entre-2-servidores-apache2-en-debian-squeeze/

#bind‐address = 127.0.0.1

server‐id=2

master‐host=192.168.1.33

master‐user=daniel

master‐password=demichele

master‐connect‐retry=60

replicate‐do‐db=mibase

Guardamos los cambios y reiniciamos Mysql:

root@server2:/# /etc/init.d/mysql restart

Aquí debemos detenernos un segundo para explicar un posible problema con el que yo me

encontré y quizás muchos se ahorren.

Hemos, en los ficheros my.cnf de los dos servidores, comentado la línea bind-address =127.0.0.1 por la evidente razón de que necesitaremos que mysql interactuara dentro de laRed local con su box vecino (por ejemplo, le decimos al Slave que su Master está en192.168.1.33).

Ahora bien, MYSQL utiliza el puerto 3306 y ocurre, en algunos casos, que este puerto no seencuentra abierto (ya sea en el Firewall del OS o bien en el Router). Uno puede realmenteperder mucho tiempo recibiendo errores de acceso denegado para el usuario mysql creadohasta darse cuenta de que no hay comunicación entre los boxes.

Para verificar que el usuario creado (daniel) desde el Server MASTER tiene acceso al SLAVE(es decir, que hay comunicación vía el puerto 3306 entre los 2 equipos) intentaremosloguearnos a mysql en el SLAVE del siguiente modo:

root@server2:/# mysql ‐u daniel ‐h 192.168.1.33 ‐p

Ingresamos la clave demichele

Si obtenemos la shell mysql (mysql>) entonces estamos listos para continuar. Si, por elcontrario, recibimos un error que alude a que el usuario no posee acceso, tendremos queabrir el puerto vía iptables del siguiente modo:

root@server2:/# /sbin/iptables ‐A INPUT ‐i eth0 ‐p tcp ‐‐destination‐port 3306 ‐j ACCEPT

root@server2:/# iptables‐save

Agregada la regla en el Server 2, reintentamos:

root@server2:/# mysql ‐u daniel ‐h 192.168.1.33 ‐p

Ingresamos la clave demichele

Si esto no funcionara, queda agregar al Firewall del Router una Regla LAN TO LAN quepermita el tráfico vía el puerto 3306. Este no es un escenario muy común, pero en mi opinión(IMHO) nada se pierde con agregar una regla en el ámbito local para garantizar que el tráficode box a box fluya por el puerto en cuestión.

Como último paso para probar la Replicación tendremos que crear una Base de Datos en elServidor Slave que lleve el mismo nombre que la MASTER (mibase). Para esto:

root@server2:/# mysql ‐u root ‐p

Ingresamos clave de root mysql> CREATE DATABASE mibase; mysql> LOAD DATA FROM MASTER;

mysql> QUIT;

Y ha llegado la hora de revisar la Base de Datos que acabamos de crear en el ServidorSLAVE: una copia exacta de los contenidos de la Base MASTER debería estar ahora en laSLAVE. Hemos replicado los contenidos con la instrucción LOAD DATA FROM MASTER.

Nos queda un último y fundamental paso: el de automatizar el proceso de Replicación demodo que los cambios realizados en la Base Master impacten a la Slave al instante y sinintervención de ninguna clase.

Para esto, reconectamos a la shell de mysql, detenemos la Base de Datos SLAVE,

Page 4: Replicacion en MYSQL entre 2 servidores Apache2 con Debian Squeeze « carp@home.pdf

7/21/2019 Replicacion en MYSQL entre 2 servidores Apache2 con Debian Squeeze « [email protected]

http://slidepdf.com/reader/full/replicacion-en-mysql-entre-2-servidores-apache2-con-debian-squeeze-carphomepdf 4/6

8/12/2015 Replicacion en MYSQL entre 2 servidores Apache2 con Debian Squeeze « carp@home

http://www.danieldemichele.com.ar/2011/10/09/replicacion-en-mysql-entre-2-servidores-apache2-en-debian-squeeze/

Archivado en: Mysql, Sysadmin Deja un comentario

Fernando Real27 abril, 2012 - 16:03

Dentro del apartado para configurar el MASTER al poner el comando SHOW MASTER STATUS; no me muestra el listados en las columnas File y Position de la tabla obtenida,solo presenta : empty set (0.00 sec)

( RESPONDER )

Carp De Michele28 abril, 2012 - 23:10

Hola Fernando. Una salida empty set como la que describis se debe a que no hayloggeo binario en el Master. Revisá tu /etc/mysql/my.cnf y asegurate de que estevalor log_bin = /var/log/mysql/mysql-bin.log esté correcto y descomentado. Enun fresh install de Debian 6 + mysql-server solo con realizar las primeras modificacionesdescriptas en este artículo al archivo my.cnf y reiniciar mysql, el comando SHOW MASTER STATUS ya imprime una tabla a la que aún le faltan valores pero que no es un empty set.La única forma que tengo de emular el empty set es comentando la línealog_bin en my.cnf y reiniciando mysql.

( RESPONDER )

Fernando Real15 mayo, 2012 - 18:33

Poniendo el paht y el nombre del archivo NAMEPC-PC-relay-bin.00001 en el log_bin pudehacerlo. Si funciona. Ahora como puedo volver a sincronizar las tablas si el slave pierde lacomunicación con el master? Saludos. De antemano GRACIAS.

( RESPONDER )

reemplazando los valores de MASTER_LOG_FILE y MASTER_LOG_POST por los obtenidos enla tabla que arrojó la sentencia SHOW MASTER STATUS en Server MASTER y, por útimo,volvemos a iniciar la Base SLAVE.

root@server2:/# mysql ‐u root ‐p

Ingresamos clave de root

mysql> SLAVE STOP;

mysql> CHANGE MASTER TO MASTER_HOST='192.168.1.33', MASTER_USER='daniel',

MASTER_PASSWORD='demichele', MASTER_LOG_FILE='VALOR_OBTENIDO',

MASTER_LOG_POS=VALOR_OBTENIDO; mysql> SLAVE START;

mysql> QUIT;

Ahora nos vamos a la Base Master, realizamos cuantos cambios queramos y constatamos laReplicación inmediata en su par SLAVE. Si se diera el caso de que queremos optimizarrendimiento de Mysql a través de este modelo de Replicación podríamos instruir nuestraaplicación en Server para que Sirviera todos los requests que involucren SELECTS de SLAVE ytrabajara con MASTER sólo en los casos en que las operaciones de Alteración de datos sonrequeridas.

Espero poder subir en breve un tutorial similar pero con Réplica MASTER-MASTER Saludos!

Comentarios (8) Trackbacks (0) ( suscribirse a los comentarios de esta entrada )

Page 5: Replicacion en MYSQL entre 2 servidores Apache2 con Debian Squeeze « carp@home.pdf

7/21/2019 Replicacion en MYSQL entre 2 servidores Apache2 con Debian Squeeze « [email protected]

http://slidepdf.com/reader/full/replicacion-en-mysql-entre-2-servidores-apache2-con-debian-squeeze-carphomepdf 5/6

8/12/2015 Replicacion en MYSQL entre 2 servidores Apache2 con Debian Squeeze « carp@home

http://www.danieldemichele.com.ar/2011/10/09/replicacion-en-mysql-entre-2-servidores-apache2-en-debian-squeeze/

Carp De Michele16 junio, 2012 - 18:57

Hola Fernando. La resincronización de la información puede lograrse de distintas formassegún qué clase de problema lleve al box slave a desincronizarse. Si, por ejemplo, nossucediera que el box 2 requiere un reboot al reingresar al sistema la información quepudo haberse agregado al Master mientras Slave estaba offline será replicada a Slavedado que ambos boxes conservan una configuración válida a partir de la cual Master secomunica con Slave y transfiere sólo lo que resulta novedoso. Si sufireramos un daño enla configuración del Slave habría que estudiar la posibilidad de reconfigurarlo, volver acargar la data de MASTER con LOAD DATA FROM MASTER tal cual se explica en este

artículo y finalmente automatizar el procedimiento con CHANGE MASTER TO MASTER enel Slave. Cabe destacar que para la nueva configuración del Slave habrá que utilizar losdatos que SHOW MASTER STATUS muestre en su tabla al momento de reconfigurar (estodebido a que la posición habrá cambiado).

( RESPONDER )

Alan Lestrade2 marzo, 2013 - 06:46

Hola, y como se le puede hacer si quiero ingresar informacion en el Slave y que se veareflejada en el Master?

( RESPONDER )

Carp De Michele1 abril, 2013 - 07:59

Eso sería un MASTER-MASTER dado que la actividad y pasividad de los nodos enestos esquemas se define justamente por la dependencia (o no de otros). Siescribis un Slave y eso impacta en el Master, para esa operación al menos, tuSlave es Master y el Master Slave. En este sitio hemos desarrollado esaarquitectura

( RESPONDER )

Antonio10 diciembre, 2013 - 23:29

Genial tutorial, muy bien explicado, claro y conciso.

Una duda: teniendo ya montada y funcionando la estructura master-slave ¿es posiblehacer un mysqldump (como copia de seguridad externa) de la Slave mientras en lamáster se escriben datos? ¿cuando acabe el mysqldump, la Slave se volverá a sincronizarcon la máster?

( RESPONDER )

Rodrigo4 febrero, 2015 - 16:19

Hola Daniel, estoy teniendo problemas con la sintaxis LOAD DATA FROM MASTER enmysql 5.5. Como se puede actulizar el tuto?mil gracias!R

( RESPONDER )

Page 6: Replicacion en MYSQL entre 2 servidores Apache2 con Debian Squeeze « carp@home.pdf

7/21/2019 Replicacion en MYSQL entre 2 servidores Apache2 con Debian Squeeze « [email protected]

http://slidepdf.com/reader/full/replicacion-en-mysql-entre-2-servidores-apache2-con-debian-squeeze-carphomepdf 6/6

8/12/2015 Replicacion en MYSQL entre 2 servidores Apache2 con Debian Squeeze « carp@home

http://www.danieldemichele.com.ar/2011/10/09/replicacion-en-mysql-entre-2-servidores-apache2-en-debian-squeeze/

Copyright © 2015 carp@home · Creado con WordPress Lightword Theme translated by Der Tee Blog and Businessangels Arriba ↑

Optimizando el rendimiento de nuestro sitio web con AmazonS3 »

Leave a comment

Nombre (required)

Correo electrónico (required)

Web

Código CAPTCHA *

Enviar