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
No hay comentarios:
Publicar un comentario