domingo, 26 de junio de 2011

Bases de datos distribuidas con Mysql

Una Base De Datos Distribuida (BDD) es un conjunto de múltiples bases de datos lógicamente relacionadas las cuales se encuentran distribuidas en diferentes espacios lógicos e interconectados por una red de comunicaciones, tienen la capacidad de realizar procesamientos autónomos y globales (replicarse).


Es un sistema de base de datos almacenado en varios servidores y que es vista por el cliente como una sola, esto con el objetivo de mantener redundancia, balanceo de carga, etc.

 “Ante el usuario, un sistema distribuido debe lucir exactamente igual que un sistema que no es distribuido”

La replicación en MySql se puede dar de forma síncrona (clustering) o asíncrona, para el primero se utiliza MySql clúster mientras que para el segundo, un gestor de base de datos Mysql común. En nuestro caso la versión 5.5.8. Actualmente (Junio-2011), mysql clúster existe solamente para plataformas Linux.
La replicación copia y mantiene los objetos de las bases de datos en las múltiples bases de datos que levantan un sistema distribuido. La replicación puede mejorar el funcionamiento y proteger la disponibilidad de las aplicaciones, por que alterna opciones de acceso de los datos existentes.


Ahora bien, se explicaran las ventajas y desventajas de poseer una base de datos distribuida con mysql de forma asíncrona.     


VENTAJAS

  • Disponibilidad: un fallo en una parte del sistema solo afectará a un fragmento, en lugar de a toda la base de datos, el sistema sigue funcionando aún en caso de caída de uno de los nodos.
  • Aumento del paralelismo: Varios nodos pueden realizar consultas en paralelo sobre la misma tabla.
  • Aumento de la sobrecarga en las actualizaciones: El sistema debe asegurar que todas las réplicas de la tabla sean consistentes. Cuando se realiza una actualización sobre una de ellas, los cambios deben propagarse a todas a lo largo del sistema distribuido.
  • Rendimiento: Los sistemas trabajan en paralelo, lo cual permite balancear la carga en los servidores, se hacen todas las consultas SELECT a un servidor esclavo, mientras las actualizaciones se realizan en el maestro. 
  • Modularidad: se pueden modificar, agregar o quitar sistemas de la base de datos distribuida sin afectar a los demás sistemas (módulos).

DESVENTAJAS

  • Complejidad: Se debe asegurar que la base de datos sea transparente, se debe lidiar con varios sistemas diferentes que pueden presentar dificultades únicas. El diseño de la base de datos se tiene que trabajar tomando en cuenta su naturaleza distribuida, por lo cual no podemos pensar en hacer consultas JOIN que afecten varios sistemas.
  • Seguridad: se debe trabajar en la seguridad de la infraestructura así como cada uno de los sistemas. 
  • Carencia de estándares: aún no existen herramientas o metodologías que ayuden a los usuarios a convertir un DBMS (Sistema de Administración de Base de Datos) centralizado en un DBMS distribuido. 
  • Mayor probabilidad de errores: Como los nodos que constituyen el sistema funcionan en paralelo, es más difícil asegurar el funcionamiento correcto de los algoritmos, así como de los procedimientos de recuperación de fallos del sistema. 

¿COMO CONFIGURARLO?

Recursos:
  • Dos pc’s, una que desempeñará el papel de maestro y la otra de esclavo.
  • Software de Mysql instalado (Descargar mysql 5.5.8.rar
  • Conexión física y configuraciones de red entre ambos equipos.
  •           Base de datos “Agenda” (Descargar base de datos).
Procedimiento:

Configurando el servidor Maestro

  • Editar el archivo "C:\Program Files\MySQL\MySQL Server 5.5\my.ini" con los siguientes datos:
[mysqld]
# Id del servidor de BD, no se debe de repetir entre ellos.
server-id=3
#Archivo log, en él se guardarán las actualizaciones y se utilizará para sincronización y
#replicación. Si no existe, crearlo en cualquier ruta con un Notepad.
log-bin="C:\Mysql\mysql_log.bin"
#Base de Datos a vincular y replicar entre ambos servidores.
binlog-do-db=agenda
replicate-do-db=agenda


  • Reiniciar el servicio de Mysql.



  • Acceder a la consola Mysql (colocando los datos correctos en donde aparecen corchetes): 
C:\>mysql –u [usuario] -p
Si no reconoce el comando, ejecutarlo en la ruta:

C:\Program Files\MySQL\MySQL Server 5.5\bin> mysql –u [usuario] –p
  • Crear usuario para replicación:
Mysql> grant replication slave on *.* to ‘usuario’@’dominio’ identified by 'password';

El dominio puede ser la IP de la pc esclavo, o sustituirlo por el porcentaje ‘%’. Se puede crear un usuario de forma gráfica, se detallará más adelante. 


  • Otorgar privilegios

Mysql>flush privileges;
Mysql>use agenda;
Mysql>flush tables with read lock;


  • Parámetros de configuración
Mysql>show master status;

Anotar los parámetros mostrados en la tabla, ya que se utilizarán para configurar el esclavo.

  • Hacer un back up de la base de datos “agenda” para crearla en el servidor esclavo. 
C:\>mysqldump –u root –p --opt agenda > agenda.sql



Configurando el servidor Esclavo

  • Editar el archivo my.ini, agregando la misma configuración que en el maestro.
  • Reiniciar el servicio de mysql.
  • Crear la base de datos (desde la consola de mysql):

Mysql> create database agenda;
Mysql> exit;

C:\> mysql –u root –p agenda < c:\agenda.sql
Esto suponiendo que el archivo .sql se ha colocado en C:\

  • Sincronización de maestro y esclavo para replicación, supondremos la ip:192.168.1.2 para el servidor maestro y haremos uso de los datos de la figura anterior: 
Mysql> slave stop;

Mysql> change master to mater_host=’192.168.1.2’, master_user=’wil’, master_password=’p123’, master_log_file=’mysql_log.000026’, master_log_pos=107;

Mysql> start slave;

  • Para verificar el estado de la replicación, podremos ejecutar el siguiente comando: 
Mysql> show slave status;



Ahora solo nos queda probar la replicación agregando/editando registros en un servidor y comprobándolos en el otro.

Recordemos que con esta configuración solamente se ha creado replicación en una dirección, es decir, hay solo un maestro y un esclavo que replica en él los cambios del maestro, mas no en sentido contrario. Para tener una configuración maestro-maestro y que los cambios en cualquier servidor se vean reflejados en el otro, es necesario hacer ambos servidores maestro y esclavo a la vez con la configuración antes mencionada.


CREANDO USUARIOS Y RESTAURANDO BD DE FORMA GRÁFICA

Se aconseja utilizar Mysql Workbench, ya que se encuentra disponible en el sitio web de mysql.

Para la creación del usuario es igual de sencillo que en la consola de mysql, en la ventana principal de mysql elegir la opción Manage Security.




La ventana siguiente nos muestra las opciones de administración de seguridad que mysql workbench nos ofrece para nuestros esquemas.



En la parte de usuarios y privilegios, dar clic en Agregar Cuenta, luego agregamos los datos correspondientes para crear el usuario, recordando que el símbolo % significa “cualquier host” y posteriormente aplicar los cambios. En la pestaña de Roles Administrativos se conceden los permisos que se deseen al usuario. Con esto, se crea de forma diferente un usuario para replicación.

Para Exportar o importar bases de datos, accedemos a "Exportar y Extraer datos" en "Administración de Seguridad" o "Manage Security". 

Para exportar una base de datos y guardarla en un archivo *.sql, seleccionar la pestaña "Exportar en disco".
En las opciones, seleccionamos la base o bases de datos a exportar, seguido en "Exportar autocontenido a archivo" indicamos la ruta y nombre del archivo donde se guardará la base de datos. Como siguiente paso nada mas nos queda comenzar a exportar.

Para restaurar una base de datos basta con dar clic en la pestaña "Importar desde archivo" :
Se nos presentan diversas opciones para restaurar una base de datos, clic en la opción "Importar auto-contenido desde archivo" y elegimos la ruta del archivo *.sql.
Finalmente damos clic en "comenzar a importar" y ya tendremos cargada la base de datos en nuestro sistema.

Hemos tratado de presentar una opción para mantener nuestras bases de datos a prueba de fallos de hardware principalmente, sin embargo resulta necesario aplicar técnicas más avanzadas de seguridad si queremos tener integridad en nuestros datos.

Esperamos este post sea de utilidad, cualquier comentario u observación no duden en contribuir.

------------------- o -------------------------------- o ---------------------------------- o
by...
Verónica Esmeralda Mejía Quintanilla (vmq1986@hotmail.com)
Nelson Arnoldo Jiménez Martínez (jmnel_mar@hotmail.com)
Mauricio Armando Canizález Ramírez. (macr_n3d@hotmail.com)
William Ernesto Alfaro Avila (alfarowil@hotmail.com)
-------------------- o ------------------------------ o ----------------------------------- o



7 comentarios:

Unknown dijo...

no me aparece el archivo My.ini, que debo hacer?

Unknown dijo...

Muy buena la explicacion, tengo una duda de como hacer para sincronizar 2 bases del mismo servidor (busco informacion pero no logro encontrarlo) me refiero a en este ejemplo sincronizas del maestro unjicamente la base "agenda"
replicate-do-db=agenda

si ademas de "agenda" tengo otra base de otro sistema llamada "clientes" puedo hacer que se sincronize tambien?

Unknown dijo...

El link de descarga de la BD de la agenda esta caida

Unknown dijo...

Como conectar esas bases de datos a php?

Unknown dijo...

Como conectar esas bases de datos a php?

Scarleth dijo...

Saludos por favor podrías ayudar con El link de descarga de la BD de la agenda, la que esta en la pagina esta caída.
De antemano muchas gracias.

Deadjoss dijo...

A te mamaste