QUE ES REPLICA?
Un buen número de aplicaciones informáticas
están accesibles a través de la red,
siguiendo un modelo cliente-servidor.
En algunos casos, tiene gran importancia que tales servicios se
presten de manera continua. Para esto, se deben utilizar técnicas de replicación.
La
replicación es un mecanismo utilizado para propagar y diseminar datos en un ambiente distribuido,
con el objetivo de
tener mejor performance y confiabilidad, mediante la reducción de dependencia
de un sistema de base de datos centralizado.
La replicación de la información en una BDD
apunta a aumentar la disponibilidad de la información. Esta disponibilidad
puede observarse desde dos perspectivas:
·
Aumentar
el paralelismo en las consultas, dado que la misma información residirá en más
de una localidad de la red.
·
Mejorar
la disponibilidad de los datos ante eventuales caídas de nodos de la red.
El concepto de replicación es muy amplio e involucra
muchos aspectos que hacen al diseño de datos
de la BDD. Los protocolos de aseguramiento de integridad de la
información y los protocolos de actualización de las replicas son los puntos
más interesantes para ser tenidos en cuenta.
Beneficios de
la réplica de Datos en un DBMS
Con la replicación se pueden llegar a obtener
dos mejoras importantes:
·
1. Por
un lado, se garantiza que el servicio ofrecido por la aplicación, no se vea
interrumpido en caso de que se dé un fallo en alguna de las réplicas. Además,
el tiempo necesario
para restablecer el servicio en la aplicación podría llegar a ser grande en
algunos tipos de fallo.
·
2. Por
otra parte, la capacidad de servicio se ve incrementada cuando las peticiones
efectuadas por los clientes únicamente implican consultas.
- Disponibilidad.-El
modo en que la replicación incrementa la disponibilidad de los datos para
los usuarios y aplicaciones.
- Fiabilidad.- Al haber múltiples copias de
los datos disponibles en el sistema, se dispone de un mecanismo excelente
de recuperación cuando existan fallos en nodos.
- Rendimiento.- Se mejora para las
transacciones de consulta cuando se introduce la replicación en un sistema
que estuviera aquejado de sobrecarga de recursos centralizados.
- Reducción de la carga.- Modo en q se
utiliza la replicación para distribuir datos en ubicaciones remotas
- 4.
Procesamiento Desconectado.- Modo en que la replicación puede
implementarse mediante mecanismo instantáneas.
- Soporta
muchos usuarios.- Se puede crear múltiples instantáneas personalizadas que
satisfagan los requisitos de cada usuario o grupo de usuarios del sistema.
- Soporta
Aplicaciones Avanzadas.- Para OLPT(Online transaction Processing),
OLAP(Online Analitical Processing)
COMO
APLICARLO
Nota: este procedimiento
y algunos de los comandos de replicación SQL mostrados en secciones posteriores
necesita el privilegio
SUPER
.
1.
Asegúrese
de que las versiones de MySQL instalado en el maestro y en el esclavo son
compatibles según dice la tabla mostrada en Sección 6.5,
“Compatibilidad entre versiones de MySQL con respecto a la replicación”.
2.
Prepare
una cuenta en el maestro que pueda usar el esclavo para conectar. Este cuenta
debe tener el privilegio
REPLICATION SLAVE
.
Si la cuenta se usa sólo para replicación (lo que se recomienda), no necesita
dar ningún privilegio adicional.
Suponga que su dominio es mydomain.com y
que quiere crear una cuenta con un nombre de usuario de replque puedan usar los esclavos para
acceder al maestro desde cualquier equipo en su dominio usando una contraseña
de slavepass. Para crear la
cuenta, use el comando GRANT:
mysql>
GRANT REPLICATION SLAVE ON *.*
-> TO 'repl'@'%.mydomain.com' IDENTIFIED
BY 'slavepass';
Si quiere usar los comandos LOAD
TABLE FROM MASTER o LOAD
DATA FROM MASTER desde el servidor esclavo, necesita dar a esta
cuenta privilegios adicionales:
- De a
la cuenta el privilegio global SUPER y RELOAD .
- De
el privilegio SELECT para
todas las tablas que quiere cargar. Cualquier tabla maestra desde la que
la cuenta no puede hacer un SELECT se
ignoran por LOAD DATA FROM
MASTER.
5.
Si
usa sólo tablas
MyISAM
, vuelque todas las tablas y bloquee
los comandos de escritura ejecutando un comandoFLUSH TABLES WITH READ LOCK
:6. mysql> FLUSH TABLES WITH READ LOCK;
Para
usar tar para
crear un archivo que incluya todas las bases de datos, cambie la localización
en el directorio de datos del maestro, luego ejecute el comando:
shell> tar -cvf /tmp/mysql-snapshot.tar .
Si quiere que el
archivo sólo incluya una base de datos llamada
this_db
, use este comando:shell> tar -cvf /tmp/mysql-snapshot.tar ./this_db
Luego copie el
archivo en el directorio
/tmp
del
servidor esclavo. En esa máquina, cambie la localización al directorio de datos
del esclavo, y desempaquete el fichero usando este comando:shell> tar -xvf /tmp/mysql-snapshot.tar
Puede no querer
replicar la base de datos
mysql
si el servidor esclavo tiene un
conjunto distinto de cuentas de usuario a la existente en el maestro. En tal
caso, debe excluírla del archivo. Tampoco necesita incluir ningún fichero de
log en el archivo, o los ficheros master.info
o relay-log.info
files.
Mientras el bloqueo
de
FLUSH TABLES WITH READ LOCK
está en efecto, lee el valor del
nombre y el desplazamiento del log binario actual en el maestro:mysql > SHOW MASTER STATUS;
+---------------+----------+--------------+------------------+
| File | Position | Binlog_Do_DB | Binlog_Ignore_DB |
+---------------+----------+--------------+------------------+
| mysql-bin.003 | 73 | test | manual,mysql |
+---------------+----------+--------------+------------------+
Una vez que tiene los
datos y ha guardado el nombre y desplazamiento del log, puede reanudar la
actividad de escritura en el maestro:
mysql> UNLOCK TABLES;
Si está usando tablas
InnoDB
,
debería usar la herramienta InnoDB Hot Backup
.
Realiza una copia consistente sin bloquear el servidor maestro, y guarda el
nombre y desplazamiento del log que se corresponden a la copia para usarlo
posteriormente en el esclavo.
Para guardar los
nombres de ficheros actual y desplazamientos, debe ejecutar el siguiente
comando antes de parar el servidor:
mysql> FLUSH TABLES WITH READ LOCK;
mysql> SHOW MASTER STATUS;
Tras
guardar el nombre del log y el desplazamiento, pare el servidor sin bloquear las tablas para asegurarse
que el servidor para con el conjunto de datos correspondiente al fichero de log
correspondiente y desplazamiento:
shell> mysqladmin -u root shutdown
Asegúrese
que la sección
[mysqld]
del fichero my.cnf
en el maestro incluye una opción log-bin
.
Esta sección debe también tener la opción server-id=master_id
, donde master_id
debe
ser un entero positivo de 1 a 2^32 - 1. Por ejemplo:[mysqld]
log-bin=mysql-bin
server-id=1
Si estas opciones no están presentes, añádalas y reinicie
el servidor.
Pare
el servidor que se vaya a usar como esclavo y añada lo siguiente a su fichero
my.cnf
:[mysqld]
server-id=slave_id
El valor
slave_id
,
como el valor master_id
, debe ser un entero positivo de 1 a
2^32 - 1. Además, es muy importante que el ID del esclavo sea diferente del ID
del maestro. Por ejemplo:[mysqld]
server-id=2
1. Si hace una copia de seguridad de los datos del
maestro usando mysqldump,
cargue el fichero de volcado en el esclavo:
shell> mysql -u root -p < dump_file.sql
2. Ejecute los siguientes comandos en el esclavo,
reemplazando los valores de opciones con los valores relevantes para su
sistema:
3. mysql> CHANGE MASTER TO
4.
-> MASTER_HOST='master_host_name',
5.
-> MASTER_USER='replication_user_name',
6. -> MASTER_PASSWORD='replication_password',
7.
-> MASTER_LOG_FILE='recorded_log_file_name',
->
MASTER_LOG_POS=recorded_log_position;
La siguiente tabla muestra la longitud máxima para
las opciones de cadenas de caracteres:
MASTER_HOST
|
60
|
MASTER_USER
|
16
|
MASTER_PASSWORD
|
32
|
MASTER_LOG_FILE
|
255
|
8. Arranque el flujo esclavo:
mysql>
START SLAVE;
Si
olvida asignar un valor para
server-id
en el esclavo, obtiene el siguiente
error en el log de errores:Warning: You should set server-id to a non-0 value if master_host is set;
we will force server id to 2, but this MySQL server will not act as a slave.
También encuentra mensajes de error en el log de errores
del esclavo si no es capaz de replicar por ninguna otra razón.