jueves, 26 de junio de 2014

Replicación Mysql

Universidad de El Salvador à Facultad Multidisciplinaria de Occidente à Departamento de Ingeniería y Arquitectura



  

     Replicación en MYSQL

 
 




Presentado por:    
                                   Rosales Martínez, Juan Carlos               
                                   Cárcamo González, Carlos Alexander
                                   Zeceña Andaluz, Alba Angelica
                                   Rodríguez Cerna, Laura Isabel
                                   Umaña Umaña, Onil                                                                  
      

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.

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 maestros 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

IP Maestro: 192.168.1.1
IP Esclavo: 192.168.1.2
Usuario: replicador
Password: 123456

Configuración Previa (Maestro y Esclavo)

1. Instalar mysql-server en ambos servidores
$ apt-get install mysql-server

2. Deshabilitar Network Manager  en ambos servidores
$ service network-manager stop

3. Asignar direcciones IP del mismo segmento
$ ifconfig eth0 192.168.1.1/24 up   en el maestro.
$ ifconfig eth0 192.168.1.2/24 up   en el escavo.

4. Probar conectividad en ambos servidores
$ ping 192.168.1.1    en el esclavo.
$ ping 192.168.1.2    en el maestro.

Configuración Maestro

1. Modificar archivo my.cnf:
$ nano /etc/mysql/my.cnf

2. Agregar las siguientes líneas:
server-id=1
log-bin=mysql-bin
binlog_format=mixed
sync_binlog=1
max-binlog-size=500M
expire_logs_days=4
innodb_flush_log_at_trx_commit=1




3. Modificar la línea bind-address con la IP del master
bind-address = 192.168.1.1
                  


4. Reiniciar el servicio de MySql:
$ service mysql restart

5. Abrir MySql con el usuario root:
$ mysql –u root –p

6. Insertar las siguientes instrucciones:
mysql > GRANT REPLICATION SLAVE ON *.* to 'replicador'@'%' IDENTIFIED BY '123456';
mysql> FLUSH PRIVILEGES;
mysql> GRANT RELOAD ON *.* TO 'replicador'@'%';
mysql> GRANT SUPER ON *.* TO 'replicador'@'%';
mysql> FLUSH PRIVILEGES;
mysql> SHOW MASTER STATUS;

Donde
replicador: Es el nombre de usuario creado.
123456: Es la contraseña para el usuario creado.
FLUSH PRIVILEGES: Se establecen los privilegios.
GRANT REPLICATION SLAVE…: se asignan privilegios de replicación, cabe aclarar que el comando grant sirve para asignar permisos a un usuario pero si este no existe lo crea.
SHOW MASTER STATUS: Se obtiene la información del servidor maestro.


Almacenar la información arrojada por este último comando.


7- verificamos que se haya creado el usuario
SELECT User,Host FROM mysql.user;

Esto nos mostrará los usuarios que tenemos en mysql.

8- verificar que el usuario creado tenga los permisos de replicación
show grants for replicador;                                   

Configuración Esclavo

1. Abrir MySql con su usuario maestro:
$ mysql –u root –p

2. Insertar las siguientes instrucciones:
Mysql >STOP SLAVE;
mysql > CHANGE MASTER TO MASTER_HOST='192.168.1.1', MASTER_PORT=3306, MASTER_USER='replicador', MASTER_PASSWORD='123456';

Dónde:
STOP SLAVE: Detener los procesos del esclavo.
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.

3. Modificar archivo my.cnf:
$ nano /etc/mysql/my.cnf

4. Agregar la siguiente línea:
server-id=2

5. Modificar la línea bind-address con la IP del slave:
bind-address = 192.168.1.2
                  
6. Reiniciar el servicio de MySql:
$ service mysql restart



7. Abrir MySql de nuevo y ejecutar las siguientes líneas:
mysql> STOP SLAVE;
mysql > CHANGE MASTER TO MASTER_LOG_FILE='mysql-bin.0000XX', MASTER_LOG_POS=XXX;
mysql> START SLAVE;

Nota.
Estos datos son tomados del servidor maestro, cuando ejecutamos
SHOW MASTER STATUS;.

Donde.
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.


8. Verificar si todo salió bien con:
Mysql > SHOW SLAVE STATUS\G;

Si visualizamos las líneas
Slave_IO_State: Waiting for master to send event  y Slave_IO_Running: True  
todo salió bien.


Prueba
En el servidor Maestro entrar a mysql
Mysql –u root -p

Crear una base de datos
mysql > create database db_prueba;

agregar una tabla a dicha base de datos, e ingresar valores.
mysql >use db_prueba;
mysql >create table alumnos(carnet varchar(5), nombres varchar(20));
mysql >Insert into alumnos values(‘Rm08106’,’Juan carlos’);

Desde el servidor esclavo, comprobar la sincronización:
mysql > show databases;
mysql >use db_prueba;
mysql >show tables;
mysql >select * from  alumnos;

Podremos ver la nueva base creada y la tabla y los datos agregados desde el servidor esclavo.



No hay comentarios: