Está en la página 1de 4

REPLICAR BASE DE DATOS MYSQL

El servidor esclavo necesita una cuenta en el servidor maestro para que pueda
conectarse.

Nos conectamos al servidor server-id=1 el cual sera el servidor maestro:


$> mysql -u root -p

En el servidor maestro, se configura una cuenta como ésta :


mysql> GRANT REPLICATION SLAVE ON *.* TO ‘usuario_esclavo’@'host_esclavo’
IDENTIFIED BY ‘contraseña_esclavo’;

Nota: Es aconsejable que las réplicas de las Bases de Datos MySql sean de la misma
versión y si es posible de la 5.x y activos los mismos motores en las 2 base de datos.

La actualización de la información de la Base de datos Mysql Master (total o parcial de sus


tablas), actualiza automáticamente unos ficheros de datos “mysql-bin.XXXXXX”. Una vez
actualizados estos ficheros se envía un evento al servidor con la base de datos Esclava y
ésta se comunica con el Servidor Esclavo para recibir la porción del fichero de “mysql-
bin.XXXXXX” que le falta; no todo el fichero sino la porción que le falta por tratar solamente
(esto se sabe por posiciones tratadas dentro del fichero, nº linea).

CONFIGURACIÓN DEL SERVIDOR MAESTRO MYSQL

Debajo de la etiqueta [mysqld] del fichero /etc/mysql/my.cnf del servidor maestro añadir las
líneas de la B.D. (nombre base de datos):

log-bin = mysql-bin #Nombre de los ficheros transmitidos entre servidores

server-id = 1 # Id del servidor (Diferente nº que todos los esclavos)

replicate-do-db = nombrebd1 # Base de datos a replicar

binlog-do-db = nombrebd1 # Base de datos a crear logs únicamente

Luego reiniciar el servicio MySql del Servidor Maestro. Con esto ya es suficiente.
CONFIGURACIÓN DEL SERVIDOR ESCLAVO MYSQL

1.- Definir variables globales para el servidor mysql:

Debajo de la etiqueta [mysqld] del fichero /etc/mysql/my.cnf del esclavo añadir las
siguientes líneas:

server-id = 2 #Id del servidor (Diferente nº del maestro y los esclavos)


replicate-do-db = nombrebd1 # Base de datos a replicar
binlog-do-db = nombrebd1 # Base de datos a crear logs únicamente

NOTA: Si la base en el server-id =1 tuviera datos, deberíamos bloquear la base de datos y hacer un
respaldo con SQL dump e importarlo en el server-id =2 para que ambas contengan los mismos datos
(no olvidar desbloquear server-id =1). A continuación un ejemplo:
server-id =1

Entrar al gestor de base datos en el server-id =1

Nos conectamos a la base de datos:

$> mysql -u root -p

mysql> USE nombrebd1;

mysql> FLUSH TABLES WITH READ LOCK;

Se verifica el estatus de la base de datos:


mysql> SHOW MASTER STATUS;

Resultado de un ejemplo:
+------------------+----------+--------------+------------------+
| File | Position | Binlog_Do_DB | Binlog_Ignore_DB |
+------------------+----------+--------------+------------------+
| mysql-bin.000009 | 98 | nombrebd1 | |
+------------------+----------+--------------+------------------+
1 row in set (0.00 sec)

No salir del MySQL en este caso, porque si nos vamos, remueve el lock de la base, abrir una
segunda consola para hacer el dump de server-id=1:

$> mysqldump -u root -p(password) --opt nombrebd1 > respaldonombrebd1.sql


Se copia el respaldo al servidor esclavo server-id=2. Después de copiar a server-id=2,
podemos cerrar esta consola, no la que contenía el estatus y el lock de la base de datos.

Volver al server-id=1 en la consola mysql para salir del modo lock de la base de datos:
server-id=1:
mysql> UNLOCK TABLES;
mysql> quit;

En server-id=2 se detiene el servicio de esclavo:

/usr/bin/mysqladmin --user=root --password=yourrootsqlpassword stop-slave


ó con
mysql> stop slave;

En el server-id=2 se crea la base de datos vacía con el siguiente comando:


mysql> create database nombrebd1;
mysql> quit;

Luego importamos el respaldo de la base de datos del server-id=1:


$> mysql -u root -p(password) nombrebd1 < respaldonombrebd1.sql

Ahora ejecutamos el siguiente comando para convertir a server-id=2 en esclavo de server-


id=1 (es importante que reemplacemos los valores correctos obtenidos en nuestra
sincronización luego de ejecutar el comando en server-id=1:

mysql> CHANGE MASTER TO MASTER_HOST='ip server-id=1',


MASTER_USER='usuario_esclavo', MASTER_PASSWORD='contraseña_esclavo',
MASTER_LOG_FILE='mysql-bin.000009', MASTER_LOG_POS=98;

Nota: todo esto es una sola línea de comando dentro del promt mysql.

Luego se inicia el servicio de esclavo en el servidor server-id=2

mysql> START SLAVE;

Se verifica el estado del servidor esclavo:

mysql> SHOW SLAVE STATUS\G;

Es importante que ambos valores, Slave_IO_Running and Slave_SQL_Running tengan el


valor "Yes" en la salida (sino, algo salio mal en los pasos anteriores):

Slave_IO_Running: Yes
Slave_SQL_Running: Yes

mysql> quit;

Finalmente probamos la replicación escribiendo datos sobre la base de datos del server-id=1
verificando que fueron copiados de forma automática en el server-id=2.

También podría gustarte