!Registra tu dominio ya!


Respuesta
  #1 (permalink)  
Antiguo 07-May-2010, 14:21
SrJacob
Guest
 
Mensajes: n/a
Thumbs up Replicacion Maestro Esclavo en Mysql

Replicación Mysql Maestro Esclavo

La replicación en MySQL funciona de una manera muy sencilla. Existe un maestro, que es el encargado de propagar los cambios y los esclavos, que son los que reciben estos cambios a fin de tener una copia exacta de lo que tiene el maestro

Para que esto suceda, los esclavos tienen una conexión abierta contínua con el maestro para recibir estos cambios. Con esta conexión se comprueba desde el esclavo la última posición escrita en el log binario del maestro, se replican por medio del log binario. Cuando sucede algún cambio en el log binario del maestro, se remiten estos cambios a los esclavos, que posteriormente ejecutan estos cambios en sus tablas.

Opciones de Replicacion.-

1. Se pueden replicar todas las bases de datos del master, una sóla e incluso tablas sueltas si se quiere.
2. En una replicacion Asincrona como la que vamos a ver, el Maestro puede transferir al Esclavo pero no al revés.
3. Tanto el Maestro como todos los Esclavos han de tener una ID única, esto se hace mediante la directiva server-id que puede variar en un rango de números entre el 0 y el 65534, si no se especifica la ID por defecto será 0.
4. A cada esclavo hemos de pasarle la información del master con la directiva CHANGE MASTER TO, todos los detalles se guardan en el archivo master.info.
5. Es aconsejable crear un usuario de replicación para el master, ya que la clave está escrita en texto plano en el archivo antes mencionado master.info, ese usuario será únicamente para la replicación y no tendrá más privilegios que el de replicar.
6. Hemos de habilitar el binary logging de lo contrario no será posible la replicación.

Configuración del Maestro

Ingresamos a la consola Mysql.-
en windows entramos por cmd a la carpeta donde se encuentra instalado nuestro servicio mysql
en mi caso C:/Appserv/mysql/bin y si estamos en un entorno linux se ingresa directamente a la consola, y
tipeamos lo siguiente

Código:
#mysql -h servidor -u usuario -p password
donde
-h: es el nombre del servidor puede ser tambien el ip del servidor o localmente(localhost)
-u: usuario con el cual vamos a loguearnos
-p: password de autentificacion del usuario

2.-Creamos un nuevo usuario de replicación en el Maestro.-
Hay que tener en cuenta que el usuario de replicación tiene que tener derechos globales, lo que significa que no se le pueden dar permisos para una sola base, hay que darle permisos para todas, pero sólo de replicación.
Código:
mysql> GRANT REPLICATION SLAVE ON *.* TO 'usuario_replicacion'@'%' IDENTIFIED BY 'contraseña_replicacion';
mysql> FLUSH PRIVILEGES;
mysql> quit
donde:
*%*: significa que nuestros esclavos pueden acceder desde cualquier servidor si ud quiere limitar a un solo servidor para el esclavo ud. tiene que poner la IP del servidor esclavo.
*.*: significa que estamos dando privilegios en todas las base de datos del servidor maestro,pero ojo solo es privilegios de replicacion.

3.- Ahora pasamos a configurar el my.conf del Maestro.-
Para ello añadimos las siguientes líneas, en el contenedor mysqld, del archivo “/etc /my.conf” (comprueba que no tengas ya alguna de ellas en tu configuración para no repetir las líneas y sobre todo si has cambiado el data dir debes direccionar todo a esa carpeta), en windows se encuentra en mi caso en la carpeta "C:/Appserv/Mysql/my.ini".
Código:
[mysqld]
server-id=1
datadir=/var/lib/mysql/mysql.sock
user=mysql
port=3306
tmpdir=/tmp
pid-file=/var/run/mysqld/mysqld.pid
log_bin=/var/lib/mysql/mysql-bin.log
expire_logs_days=10
max_binlog_size=100M
El siguiente parámetro se lo pasamos sólo si en vez de todas las bases de datos queremos replicar sólo una, en este caso la bd prueba.
Código:
 binlog_do_db=prueba
En cualquier caso debemos asegurarnos de que la opción skip-networking esté deshabilitada.

4.- Ahora debemos reiniciar el servicio.-
Código:
# /etc/init.d/mysqld restart
Binary-Log: Es el que marca la posición desde donde debe replicarse el o los esclavos, cada esclavo, guarda en su master.info el log binario por el que se guían a la hora de sincronizarse, de ahí su importancia.
Si la base de datos a replicar ya existía y contiene datos habrá que importar esos datos al servidor/es esclavo/s, asegurándonos de bloquear las sentencias que se ejecutan en el máster para que cuadre.

5.- Bloqueamos las tablas.-

Si queremos replicar una sóla base de datos pondríamos los tres comandos (cambiando test_replication por el nombre que corresponda a tu base), en cambio si queremos replicar todas las bases de datos de mysql pondríamos los dos últimos comandos:
Código:
mysql> USE test_replication;
mysql>FLUSH TABLES WITH READ LOCK;
mysql>SHOW MASTER STATUS;
Esto nos mostrará una tabla como la que sigue:
Código:
mysql> show master status;
+------------------+----------+--------------+---------------------------------+
| File                        | Position     | Binlog_Do_DB  | Binlog_Ignore_DB |
+------------------+----------+--------------+---------------------------------+
| mysql-bin.000022 |       98       | test_replication|                               |
+------------------+----------+--------------+---------------------------------+
1 row in set (0.00 sec)
De esta tabla nos tenemos que quedar con la información File y Position para pasársela más tarde a nuestro esclavo.

Ahora sin salir de la consola donde pusimos la sentencia de bloquear las tablas (digo sin salir de esa consola puesto que si salimos las tablas dejaran de estar bloqueadas y antes de eso tendremos que hacer una copia a la base de datos que queremos replicar), abrimos una nueva consola:
# Para replicar todas las bases de datos de nuestro mysql:
Código:
$ mysqldump --all-databases --lock-all-tables > backdb.sql
# Para replicar una sola base de datos hacemos back up de esa base únicamente:
Código:
$ mysqldump -u root -pcontraseña --opt test_database > test.sql
Ahora volvemos a la primera consola para desbloquear las tablas, podemos hacerlo simplemente saliendo de ella con quit o con la sentencia UNLOCK TABLES;.



Configuración del Esclavo.-


Ahora pasamos a configurar la parte del esclavo:
Código:
# vi /etc/my.cnf
En la configuración y siempre bajo el contenedor [mysqld] escribimos:
Código:
server-id=2
master-connect-retry=60
Donde:
Master-connect-retry: Es el intervalo de tiempo en el que el esclavo intenta conectarse al maestro si la conexión falla.

Si queremos únicamente una base de datos a replicar ponemos este parámetro, si no, lo omitimos.
replicate-do-db=test_replication

Ahora debemos reiniciar el servicio:
Código:
# /etc/init.d/mysqld restart
El siguiente paso a realizar es para el esclavo para importar las base de datos
Código:
/usr/bin/mysqladmin --user=root --password=contraseña stop-slave.
Importamos todas las bases a nuestro servidor esclavo
Código:
mysql>  mysql -u usuario –p contraseña < backdb.sql
O para una sóla base (previamente tenemos que crear la base de datos):
Código:
 $ mysql -u usuario -pcontraseña test_database < test.sql
Una vez restaurado la base de datos en el esclavo, ahora necesitamos pasarle los parámetros del maestro para que el esclavo pueda sincronizarse, vamos a suponer que nuestro maestro tiene la ip privada 192.168.1.131. Recuerda que aquí necesitaremos la file y la position de la tabla que sacamos de la consulta “Show master status;”.

Código:
mysql> CHANGE MASTER TO MASTER_HOST='192.168.1.131',MASTER_USER='usuario_replica',MASTER_PASSWORD='contraseña_replica', MASTER_LOG_FILE='mysql-bin.000002',MASTER_LOG_POS=98;
Iniciamos el esclavo:
Código:
mysql> START SLAVE;
Comprobamos que funciona con el siguiente comando:
Código:
mysql> SHOW SLAVE STATUS \G
La salida del comando anterior debe ser algo parecido a esto:


Cita:
Slave_IO_State:Waiting for master to send event
Master_Host:192.168.1.131
Master_User:usuario_replica
Master_Port: 3306
Connect_Retry:60
Master_Log_file:mysql-bin.000002
Read_Master_Log_Pos:98
Relay_Log_File:mysqld-relay-bin.000002
Relay_Log_Pos:251
Relay_Master_Log_File:mysql-bin.000001
Slave_IO_Running:Yes
Slave_SQL_Running:Yes
Replicate_DO_DB:test_database //Si lo hacemos para todas las base de datos este valor aparecera en blanco
Replicate_Ignore_DB:
Replicate_Do_Table:
Replicate_Ignore_Table:
Replicate_Wild_Do_Table:
Replicate_Wild_Ignore_Table:
Last_Errno:0
Last_Error:
Skip_Counter:0
Exec_Master_Log_Pos:89
Relay_Log_Space:407
Until_Condition:None
Until_Log_File:
Until_Log_Pos:0
Master_SSL_Allowed:No
Master_SSL_CA_File:
Master_SSL_CA_Path:
aster_SSL_Cert:
Master_SSL_Cipher:
Master_SSL_Key:
Second_Behind_Master:0

Los campos marcados en negrita son los campos en los que tenemos que fijarnos, nosotros mismos le hemos pasado los parámetros así que comprobamos que esten bien.
Si en Seconds_Behind_Master: 0 nos da NULL, quiere decir que existe un error que no deja que se sincronize, entonces debemos fijarnos en Last_Errno: 0 que en vez de 0 nos dará un error a solucionar.
Puede que no haya un error en Last_Errno: entonces nos fijamos en que Slave_IO_State: Waiting for master to send event esté así, si no está mal y deberemos buscar la solución, en la mayoria de casos es un error de conexión con el maestro, fijate que el puerto 3306 este habilitado
Por último no olvides abrir el puerto 3306 (si no lo has cambiado) en Maestro y Esclavos.

Y esos serian los pasos para crear una arquitectura maestro esclavo con MYSQL.
Responder Citando
 
Respuesta

Etiquetas
arquitectura mysql, base de datos, maestro esclavo, mysql

Herramientas
Desplegado

Normas de Publicación
No puedes crear nuevos temas
No puedes responder mensajes
No puedes subir archivos adjuntos
No puedes editar tus mensajes

Los Códigos BB están Activado
Las Caritas están Activado
[IMG] está Activado
El Código HTML está Desactivado
Trackbacks are Activado
Pingbacks are Activado
Refbacks are Activado