sábado, 15 de junio de 2013

Autores:
Jacqueline Gómez
Luis Morán
Edwin Urquilla

Conceptos:

MySQL
Es un sistema de gestión de bases de datos relacional, distribuido y multihilo. Es código abierto y el soporte es brindado por Oracle. La más reciente distribución es la 5.6.11 y fue lanzada el 25 de abril de 2013.

Replicación
Es el proceso de copiar y mantener objetos de las base de datos en múltiples bases de datos que forman un sistema de bases de datos distribuido. La replicación permite que los datos de un servidor de bases de datos (el maestro), sean replicados en uno o más servidores de bases de datos (los esclavos).

Replicación en MySQL.
Las características de MySQL soportan replicación asíncrona unidireccional: un servidor actúa como maestro y uno o más actúan como esclavos.

¿Cómo funciona la replicación?
El servidor maestro escribe actualizaciones en el fichero de log binario, y mantiene un índice de los ficheros para rastrear las rotaciones de logs. Estos logs sirven como registros de actualizaciones para enviar a los servidores esclavos. Cuando un esclavo se conecta al maestro, informa al maestro de la posición hasta la que el esclavo ha leído los logs en la última actualización satisfactoria. El esclavo recibe cualquier actualización que ha tenido lugar desde entonces, y se bloquea y espera para que el master le envíe nuevas actualizaciones.

Un esclavo servidor puede servir como maestro si quiere preparar una cadena de replicaciones de replicación.

Debe tenerse en cuenta que cuando se usa replicación, todas las actualizaciones de las tablas que se replican deben realizarse en el servidor maestro. De otro modo, se debe ser cuidadoso para evitar conflictos entre actualizaciones que hacen los usuarios a las tablas en el maestro y las actualizaciones que hacen en las tablas de los esclavos.
Ventajas de la Replicación:

La replicación unidireccional tiene beneficios para la robustez, velocidad, y administración del sistema:
  • La robustez se incrementa con un escenario maestro/esclavo. En caso de problemas con el maestro, puede cambiar al esclavo como copia de seguridad.
  • Puede conseguirse un mejor tiempo de respuesta dividiendo la carga de consultas de clientes a procesar entre los servidores maestro y esclavo. Se puede enviar consultas SELECT al esclavo para reducir la carga de proceso de consultas del maestro. Sin embargo, las sentencias que modifican datos deben enviarse siempre al maestro, de forma que el maestro y el esclavo siempre estén sincronizados. Esta estrategia de balanceo de carga es efectiva si dominan consultas que no actualizan datos, pero este es el caso más habitual.
  • Otro beneficio de usar replicación es que puede realizar copias de seguridad usando un servidor esclavo sin molestar al maestro. El maestro continúa procesando actualizaciones mientras se realiza la copia de seguridad


Desarrollo:


Se va a resolver un escenario en el cual se tiene un servidor de Bases de Datos actuando como Maestro o Master y un servidor de Bases de Datos actuando como Esclavo o Slave; en caso se pueden realizar la misma configuración para varios esclavos y la replicación seguirá funcionando de la misma manera. El escenario es el siguiente:

                                   


Las configuraciones se realizan bajo dos computadoras con Sistema Operativo Debian Wheezy 7.0.

Si aún no se tiene instalado el servidor MySQL se instalará en una Terminal con la línea de comando:
apt-get install mysql-server

SERVIDOR MAESTRO:

Una vez instalado el servidor MySQL se procederá a las configuraciones correspondientes; primeramente se realizará la configuración del servidor Maestro:

1.       Se modifica con vim, nano o cualquier editor de texto, el archivo my.cnf
# nano /etc/mysql/my.cnf

Y se modifican y/o agregan las siguientes líneas de código:

log-bin = /var/log/mysql/mysql-bin.log
binlog-do-db=DATABASE_TO_BE_REPLICATED
server-id=1
skip-host-cache
skip-name-resolve

Donde DATABASE_TO_BE_REPLICATED es el nombre de la base de datos que se va a replicar.
                                         


2.       Se reinicia el servicio mysql:
# /etc/init.d/mysql restart

3.       Se accede como root a mysql, pedirá la contraseña del servidor, ésta será la que se ha configurado en la instalación:
# mysql –u root –p

4.       Dentro de la consola de MySQL se creará una Base de Datos
mysql > CREATE DATABASE ReplicacionDB;

                     

5.       Se crean los privilegios para la Replicación:
mysql > GRANT REPLICATION SLAVE ON *.* TO 'USER'@'%' IDENTIFIED BY 'PASSWORD';

Donde
USER: Es el nombre del usuario del esclavo.
       % : Es la dirección donde está almacenado el esclavo, puede determinarse que la dirección sea
       cualquiera, ubicando el símbolo % en lugar de la dirección.
       PASSWORD: Es la contraseña del usuario esclavo.

6.       Se establecen los privilegios:
mysql > FLUSH PRIVILEGES;

7.       Se obtiene la información del servidor maestro:
mysql > SHOW MASTER STATUS;

Este comando nos devolverá el archivo y la posición de la Base de Datos, es importante, tener presentes estos datos, ya que serán utilizados en la configuración del esclavo.

8.       Se accede a la base de datos:
mysql > USE ReplicacionDB;

9.       Se congelará la base de datos para poder obtener el respaldo de la misma y poder restaurarla en el servidor esclavo.
mysql > FLUSH TABLES WITH READ LOCK;

10.    Sale de mysql.
mysql > EXIT;



11.    Con mysqldump se va a crear un backup de la base de datos, para que luego sea restaurada en el servidor esclavo.
# mysqldump -u root -p DATABASE_TO_BE_REPLICATED > DATABASE_TO_BE_REPLICATED.sql

Donde DATABASE_TO_BE_REPLICATED es el nombre de la base de datos que se replicará.
Este comando generará un archivo .sql, el cual contendrá el backup de la base de datos, éste se almacenará en la dirección hacia la cual apunta la terminal.

12.    Luego se accede a la consola de mysql nuevamente para descongelar las tablas de la base de datos que replicamos:
# mysql –u root –p

mysql > USE ReplicacionDB;
mysql > UNLOCK TABLES;
mysql > EXIT;
                           


SERVIDOR ESCLAVO:

En el servidor esclavo, será necesario copiar el archivo .sql que fue generado, para restaurar la base de datos a partir de él, puede ser copiado a través de una memoria usb, transferencia punto a punto o por llaves SSH, tal cual es el ejemplo de la configuración aquí detallada:

1.       A través de claves SSH, se transfiere el archivo de la máquina que sirve como servidor maestro a la que sirve como servidor esclavo:
# scp DATABASE_TO_BE_REPLICATED.sql > user@direccionIP:/rutaAlmacenamiento

Donde:
DATABASE_TO_BE_REPLICATED.sql: Es el archivo que se generó con mysqldump en el servidor maestro.
user: Es el nombre del usuario de la computadora remota.
direccionIP: Es la dirección IP a la cual se copiará el archivo.
rutaAlmacenamiento: Es la ruta donde se almacenará el archivo.

                   


2.       Se crea la base de datos en el servidor esclavo, por medio del archivo que contiene el backup de la misma.
# mysql –u root –p DATABASE_TO_BE_REPLICATED < DATABASE_TO_BE_REPLICATED.sql

3.       Con un editor de texto, ya sea vim, nano o cualquier otro se abre el archivo de configuración my.cnf
# nano /etc/mysql/my.cnf

Y se modifican o agregan las líneas:
server-id=2
replicate-do-db=DATABASE_TO_BE_REPLICATED  
skip-host-cache
skip-name-resolve

       

4.       Se reiniciará el servicio mysql para poder aplicar los cambios.
# /etc/init.d/mysql restart

5.       Se accederá la consola de MySQL para configurar el esclavo:
# mysql –u root –p

6.       Se detienen los procesos del esclavo:
mysql > SLAVE STOP;

                           


7.       Luego se hará referencia al servidor maestro del cual obtendrá las actualizaciones el servidor esclavo:
mysql > CHANGE MASTER TO MASTER_HOST='192.168.56.1',
         -> MASTER_USER='user',
   -> MASTER_PASSWORD='password',
   -> MASTER_LOG_FILE='/var/log/mysql/mysql-bin.0000XX',
   -> MASTER_LOG_POS=XXX;
Dónde:
MASTER_HOST: Hace referencia a la dirección IP en la cual está el servidor maestro.
MASTER_USER: Usuario del servidor maestro con el cual se accede a MySQL.
MASTER_PASSWORD: Contraseña del servidor maestro con el cual se accede a MySQL.
MASTER_LOG_FILE: La dirección y el número que se obtuvo cuando se realizó el SHOW MASTER STATUS.
MASTER_LOG_POS: Posición de los logs, también obtenida con SHOW MASTER STATUS en el servidor maestro.

8.       Se inicia el servidor esclavo:
mysql > SLAVE START;

9.       Se verifica el estado del servidor esclavo:
mysql > SHOW SLAVE STATUS;



DEMOSTRACIÓN:

1.       En el servidor maestro se creará una Tabla llamada Alumno:
# mysql –u root –p
mysql > USE ReplicacionDB
mysql > CREATE TABLE Alumno (nombre VARCHAR(10));

Y luego verificamos las tablas con el comando:
mysql > SHOW TABLES;

Y se podrá comprobar que la tabla efectivamente ha sido creada:

                                                                           

2.       En el servidor esclavo, se accederá a MySQL y se verán reflejados los cambios de la tabla creada en el servidor maestro:
# mysql – u root –p
mysql > SHOW DATABASES;
mysql > USE ReplicacionDB;
mysql > SHOW TABLES;

Y se podrá ver que el cambio ha sido aplicado en la base de datos.

                                               


 Referencias:

·        Wallen J., Set up MySQL database replication to ensure up-to-date backups. Obtenida el 31 de abril de 2013 en http://www.techrepublic.com/blog/itdojo/set-up-mysql-database-replication-to-ensure-up-to-date-backups/3340?pg=1

·        Oracle MySQL, Capítulo 6. Replicación en MySQL. Obtenida el 3 de mayo de 2013 en http://dev.mysql.com/doc/refman/5.0/es/replication.html

·        Campos M., Flores C., Ortiz R., Zuniga C,. Replicación en MySQL. Obtenida el 5 de mayo de 2013 en http://basesdedatosues.blogspot.com/2012/06/replicacion-mysql-replicacion-en-mysq.html


Si deseas conocer más acerca de Replicación en MySQL puedes consultar el siguiente video tutorial:




No hay comentarios: