viernes, 3 de mayo de 2013

Replicacion

¿Que es Replicacion?
Es un proceso 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.

La replicación es útil para:
  1. 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.
  2. 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.
  3. 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.

Pasos para poner en marcha la replicación

A continuación vamos a exponer los pasos a realizar la replicación de una base de datos bd_autentia en un único servidor esclavo. Si quisieramos configurar más esclavos, los pasos a realizar serían los mismos sobre cada uno de los esclavos.

Creamos de un usuario MySQL en el servidor maestro con privilegios de replicación

El servidor esclavo se autenticará frente al servidor maestro como un usuario normal.
Para crear el usuario debemos ejecutar desde la consola de comandos de mysql las siguientes sentencias SQL:

Con la sentencia anterior el usuario sólo tendría permiso de acceso desde la máquina <slave_address>, en caso de no requerir esta medida de seguridad puedes sustituir el comodin % por el parámetro <slave_address>.

Configuración del servidor maestro

Deberemos agregar las siguientes lineas al final del archivo de configuración del servidor MySQL, por defecto: <MySQL_HOME>/my.ini

Configuración del servidor esclavo

Deberemos agregar las siguientes lineas al final del archivo de configuración del servidor MySQL, por defecto: <MySQL_HOME>/my.ini

Realizamos una copia de seguridad de la base de datos del maestro sobre el servidor el esclavo

Desde la consola ejecutamos los siguientes comandos:
  1. [maestro]: <MYSQL_HOME>/bin/mysql -u root --password=<contraseña> -e "FLUSH TABLES WITH READ LOCK"
    Para limpiar las caches y bloquear el acceso de cualquier aplicacion a la base de datos.
  2. [maestro]: <MYSQL_HOME>/bin/mysqldump --u root --password=<contraseña> --opt bd_autentia > backup.sql
    Realizamos una copia completa de la base de datos en el archivo backup.sql.
  3. [esclavo]: <MYSQL_HOME>/bin/mysql --user=root --password=<contraseña> bd_autentia < backup.sql
    Para restaurar la copia de seguridad en el esclavo.
  4. [esclavo]: <MYSQL_HOME>/bin/mysqladmin -u root --password=<contraseña> shutdown
    Detenemos el servidor esclavo
  5. [maestro]: <MYSQL_HOME>/bin/mysqladmin -u root --password=<contraseña> shutdown
    Detenemos el servidor maestro (Se desbloquearán las tablas de las bases de datos previamente bloquadas)
  6. [esclavo]: <MYSQL_HOME>/bin/mysqld-nt --defaults-file="<MYSQL_HOME>\my.ini" MySQL
    Iniciamos el servidor el cual tomará la nueva configuración.
  7. [maestro]: <MYSQL_HOME>/bin/mysqld-nt --defaults-file="<MYSQL_HOME>\my.ini" MySQL
    Iniciamos el servidor el cual tomará la nueva configuración.

Probando la replicación

  • En el servidor esclavo ejecute el comando SHOW SLAVE STATUS y observe que el mensaje que le muestra es un mensaje que indica que está esperando eventos del maestro...
  • Modifique algo en el maestro y verifique que instantaneamente se replica en el esclavo.
  • Detenga el esclavo durante un tiempo, realize cambios (cree tablas, modifique registros..) en el maestro e inicie el esclavo. En cuestion de milisegundos ambas bases de datos deberían de ser iguales.

video:

fuentes:
http://www.adictosaltrabajo.com/tutoriales/tutoriales.php?pagina=mysql_replicacion