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:
- 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.
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 datosbd_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:- [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. - [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 archivobackup.sql
. - [esclavo]:
<MYSQL_HOME>/bin/mysql --user=root --password=<contraseña> bd_autentia < backup.sql
Para restaurar la copia de seguridad en el esclavo. - [esclavo]:
<MYSQL_HOME>/bin/mysqladmin -u root --password=<contraseña> shutdown
Detenemos el servidor esclavo - [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) - [esclavo]:
<MYSQL_HOME>/bin/mysqld-nt --defaults-file="<MYSQL_HOME>\my.ini" MySQL
Iniciamos el servidor el cual tomará la nueva configuración. - [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