Realizar ejercicio de activación de espejeo
de datos en un SGBD.
Actividad #25
• Realizar un espejeo en un SGBD.
Actividad #25
• Realizar un espejeo en un SGBD.
Base
de Datos Espejo (DatabaseMirroring) es una configuración donde dos o tres
servidores de dase de datos, ejecutándose en equipos independientes, cooperan
para mantener copias de la base de datos y archivo de registro de transacciones
(log).
Tanto
el servidor primario como el servidor espejo mantienen una copia de la base de
datos y el registro de transacciones, mientras que el tercer servidor, llamado
el servidor árbitro, es usado cuando es necesario determinar cuál de los los
otros dos servidores puede tomar la propiedad de la base de datos. El árbitro
no mantiene una copia de la base de datos.
El proceso de replicación de una base de
datos consiste en replicar las consultas de actualización (tanto DML como DDL)
en una base de datos maestra (master) sobre una o varias bases de datos
esclavas (slave), de manera que tengamos una copia de las mismas a lo largo del
tiempo.
MySQL soporta replicación unidireccional
asíncrona, es decir, las consultas de actualización ejecutadas en el maestro
son replicadas en los servidores esclavos. Esta replicación se realiza de forma
transparente. Además es instantánea si los servidores esclavos están levantandos
y en estado de replicación.
La replicación es útil para:
·
Copia de seguridad:
En
condiciones normales, una base de datos replicada de forma correcta es válida
como copia de seguridad.
Además se puede realizar copias de seguridad
usando un servidor esclavo para así no interferir al servidor maestro.
·
Mejorar la escalabilidad:
Podríamos configurar nuestras aplicaciones
para balancear las consultas de lectura (SELECT) entre los servidores
replicados.
Podríamos usar herramientas como MySQL Proxy
para balancear las consultas de lectura entre los servidores replicados y
enviar las consultas de actualización de datos al maestro.
·
Alta disponibilidad:
En aplicaciones y entornos en donde sólo se
requieren lecturas, podríamos configurar nuestras aplicaciones para balancear
las consultas de lectura (SELECT) entre los servidores replicados de manera que
si uno se cae se continue prestando servicio.
Aspectos importantes que debemos conocer:
El
log binario es un archivo binario gestionado por el
servidor de base de datos en el que se registran todas las sentencias SQL de
modificación de datos o estructura.
En el caso de la replicación es importante
saber que cada servidor esclavo se conecta al servidor maestro y le solicita
que le envié las sentencias registradas en los logs binarios a partir de una
posición, para ello, cada esclavo mantiene un archivo a modo de índice en donde
registra la posición actual de la replicación.
Gracias a esto, podemos detener el esclavo
(STOP SLAVE), que haya un corte de red, etc..
De manera que cuando se vuelva a iniciar la
replicación (START SLAVE) o se restablezca la comunicación... Pase el tiempo
que pase el esclavo solicitará al maestro todas las sentencias a ejecutar desde
su estado actual y las irá ejecutando secuencialmente de manera que en cuestión
de segundos ambos servidores tendrán las bases de datos con el mismo contenido
y estructura.
El log binario por defecto está ubicado en la
carpeta <MYSQL_HOME>/data y se
llama igual que la máquina con el sufijo -bin y un número como extensión.
Ejemplos: pccarlos-bin.00001, pccarlos-bin.00002, pccarlos-bin.00003
La
replicación:
Se trata de una de
las base de datos (master) hacer que genere un log y otra (slave) lo lea.Lo primero es añadir las siguientes líneas al fichero my.conf:(depende de que usemos si es Mysql Server, o por medio del Xammp, etc.)
log-bin=<nombre-fichero-log>
binlog-do-db=<nombre-base-datos>
server-id=<numero-servidor>
El nombre de
la base de datos sí que debe ser el mismo en ambos servidores, los otros dos
pueden ser cualesquiera, aunque el nombre del log suele ser el de host seguido
de “-bin” y el id del servidor suele ser “1″ para el maestro y “2″ para el
esclavo.
GRANT REPLICATION SLAVE ON *.* TO '<usuario>'@'%' IDENTIFIED BY '<contraseña>';
También se puede usar el nombre del servidor esclavo en vez
de %. Una vez creado el usuario, actualizamos los datos mediante FLUSH
PRIVILEGES y FLUSH TABLES.
Si ejecutamos SHOW MASTER STATUS nos devuelve unos datos que
son importantes para la replicación, sobre todo la columna File y la columna
Position.
Una vez que el maestro ya está configurado, podemos empezar
con la configuración del esclavo, eso sí, antes del inicio de la replicación
ambas bases de datos deben tener la misma información. Para configurar el
esclavo deberemos modificar su my.conf de la siguiente forma:
server-id=<numero-servidor>
Siendo el número distinto al que usamos en el maestro, en
nuestro ejemplo el maestro era “1″ y el esclavo “2″. Después deberemos ejecutar
la siguiente sentencia:
CHANGE MASTER TO MASTER_HOST='<servidor-maestro>',
MASTER_USER='<usuario-replicacion>',
MASTER_PASSWORD='<contraseña-replicacion>',
MASTER_LOG_FILE='<fichero-log>', MASTER_LOG_POS=<posición-log>;
Y ya por último reiniciamos MySQl, paramos el esclavo(STOP
SLAVE), cargamos los datos del maestro (LOAD DATA FROM MASTER) y arrancamos el
esclavo (START SLAVE).
Pasos:
Antes que nada debemos tener instalado el mysql en las dos máquinas.
Tenerlas en red para esto daremos direcciones IP a cada una de ellas.
Podemos
hacerlo de la siguiente manera:
Pulsamos
botón Inicio
>Panel
Control
>Centro
de redes y recursos compartidos
>Administrar
redes
>Estando
en las conexiones de red
>Pulsamos
clic derecho y en Propiedades
Nos
mostrara la siguiente ventana:.
Pulsamos
en propiedades y asignaremos la IP
Asignaremos
la dirección IP 192.168.1.1 y en la otra máquina 192.168.1.2
CONFIGURANDO MASTER.
Antes
de iniciar la replicación haremos un ping para verificar que hay conexión en
las dos máquinas.
Entramos
a la consola (cmd) .
Ejemplo:
ping 192.168.1.2
·
Podemos
apreciar que hay conexión.
Vamos
a buscar el archivo my.ini (esto depende de que estemos utilizando por ejemplo
si es mysql server C:Archivos de programaMySQLMySQL Server 5.0my.ini, si usamos el xampp puede estar dentro de la
carpeta en xammp>mysql>my-huge.
En este caso
C:APPSER/MYSQL/my.ini
·
Entramos
y abrimos el archivo my
·
Nos
aparece el archivo:
·
Agregaremos
las líneas e indicaremos
·
Se
indica cual va ser el maestro y la base de datos a replicar.
·
Guardamos
el archivo.
Después
de esto iremos a Panel de control> Herramientas administrativas>
Servicios
Y
Reiniciamos Mysql.
Entramos
a mysql desde consola
Mysql-u
root –p
Hacemos
la replicación usando el siguiente comando:
GRANT
REPLICATION SLAVE ON *.* TO ‘<nombre del esclavo>’@’<direccion de la
maquina esclavo>’ identifiedby ‘<contraseña del esclavo>’;
Recargamos los privilegios:
Mostramos
las bases de datos:
Show
databases;
Nuestra
base de datos es Agenda.
Mostrar
las tablas:
SHOW
TABLES;
Tenemos
la tabla registro;
·
Mostramos
los datos en esa tabla:
SELECT
* FROM registro;
·
Ejecutamos
la siguiente instrucción:
El
cual cierra todas las tablas abiertas y bloquea todas las tablas para todas las
bases de datos con un bloqueo de lectura hasta que se ejecute. Esto proporciona
una forma muy conveniente para hacer copias de seguridad.
·
Después
mostraremos el estado del Master:
Este
comando proporciona información de estado en los ficheros del log binario del
maestro de replicación.
Esa
información se guarda. Puedes almacenarla, anotarla pero debes tenerla segura.
·
Crearemos
la copia de la base de datos
Después
de hacerla entramos a mysql para desbloquear las tablas:
Con
el comando UNLOCK TABLES;
Libera
cualquier bloqueo para el hilo actual. Todas las tablas bloqueadas por el hilo
actual serán implícitamente desbloqueadas cuando el hilo realice otro LOCK
TABLES, o cuando la conexión con el servidor se cierre.
CONFIGURANDO EL ESCLAVO.
·
Hacemos
ping para verificar la conexión nuevamente. (Este paso ya es en la otra
máquina).
>Podemos
observar que si hay conexión.
·
Accedemos
a mysql
Creamos
la base de datos a replicar (en este caso agenda)
CREATE
DATABASE agenda;
Solo
se creara la base de datos sin tablas.
Importante:
Hay que copiar el respaldo del master a la unidad C:
Para
generar la copia del respaldo:
<c:respaldo1.sql
·
Y una vez mas reiniciamos el servicio Mysql.
Buscamos el archivo My.ini
(Ya lo habiamos utilizado para la configuracion del master)
Debemos tener estas lineas e indicar lo siguiente:
·
Guardamos
los cambios.
·
Y
reiniciamos MYSQL una vez mas (Recuerda que se encuentra en panel de
control>herramientas administrativas> servicios)
·
Accedemos
a Mysql
Mysql –u root –p
Password:<la contraseña que
tenemos>
·
Una
vez dentro ejecutaremos el siguiente comando:
Acerca de este comando:
Para el flujo
esclavo. STOP SLAVE necesita el permiso SUPER .
Como START SLAVE,
este comando puede usarse con las opciones IO_THREAD y SQL_THREAD para nombrar
el flujo o flujos a parar.
En versiones previas
de MySQL, este comando se llamó SLAVE STOP. Su uso se acepta en MySQL 5.0 por
compatibilidad con versiones anteriores, pero ahora está obsoleto.
·
Actualizaremos
la BD del esclavo:
CHANGE MASTER TO
MASTER_HOST=’<IP del master’>,MASTER USER=’<nombre del
master>,MASTER_PASSWORD=’<password asignado por el master’>,
MASTER_LOG_FILE=’<datos que se mostró en el master>,MASTER_LOG_POS=<la
posición que se mostró en el master>;
·
Ejecutaremos
la instrucción START SLAVE;
Acerca
de esta instrucccion:
Start Slave sin opciones arranca los flujos esclavos. El
flujo de entrada/salida lee consultas del servidor maestro y las almacena en el
log retardado. El flujo SQL lee el log retardado y ejecuta las consultas. START
SLAVE require el permiso SUPER.
Si START SLAVE tiene éxito al arrancar los flujos esclavos,
retorna sin ningún error.
Hasta aquí hemos terminado de
configurar el master y esclavo.
·
Vamos
a ingresar al master para ingresar registros.
Estando como Master:
Entramos y seleccionamos la base de
datos agenda
Insertamos datos en la tabla REGISTRO.
·
Mostramos
los datos de la tabla.
Podemos apreciar que se agregó el
nombre Juan.
·
AHORA
nos regresamos a ingresar como esclavo para VERIFICAR si se ingresó el registro
en la tabla.
·
Mostramos
los datos de la tabla registro.
Dato ingresado por el MASTER (indicado
por la flecha)
Y así hemos comprobado que se realiza
la replicación.
Alumno: Carlos
Adán Hernández González
Trabajo
individual.
No hay comentarios:
Publicar un comentario