Replicar una base de datos en otro ordenador


Índice

¿Para qué sirve?

La replicación te permite tener una copia exacta de una base de datos alojada en un servidor (maestro) que se guardará en otro servidor (esclavo). Todas las modificaciones que se hagan en la base de datos del servidor maestro se actualizarán inmediatamente en el servidor esclavo.

NOTA: Esto NO es una copia de seguridad, ya que si borramos una fila en la base de datos maestra, también se borrará en la base de datos esclava.

[Arriba]

 

Configurar el servidor maestro

Editamos el fichero /etc/my.cnf y comentamos las siguientes líneas (si existen):

#skip-networking
#bind-address = 127.0.0.1

Además, debemos especificar qué esquemas queremos que se repliquen, el fichero de log que se utilizará para la replicación y que este servidor ejercerá de maestro. Por ejemplo, para replicar los esquemas sch1 y sch2, escribiremos:

log-bin = mysql-bin
binlog-do-db = sch1
binlog-do-db = sch2
server-id = 1

Ahora reiniciamos MySQL: /etc/init.d/mysql restart

Entramos en la base de datos como root y creamos un usuario con privilegios para replicación:

mysql -u root -p
Enter password:

GRANT REPLICATION SLAVE ON *.* TO 'slave_user'@'%' IDENTIFIED BY 'password';
FLUSH PRIVILEGES;
USE sch1;
USE sch2;
quit;

Ahora hay que extraer el contenido de los esquemas a replicar para poder luego guardarlo en el servidor esclavo:

mysqldump -u root -p<password> --opt sch1 >sch1.sql
mysqldump -u root -p<password> --opt sch2 >sch2.sql

Importante: NO hay espacio entre -p y la clave <password>

Con esto concluimos la configuración en el maestro y pasamos al esclavo.

[Arriba]

 

Configurar el servidor esclavo

Lo primero que debemos hacer es crear los esquemas en el servidor esclavo. Siguiendo con el mismo ejemplo, hacemos:

mysql -u root -p
Enter password:

CREATE DATABASE sch1;
CREATE DATABASE sch2;
quit;

Añadimos los datos a los esquemas creados. Para esto utilizamos los ficheros generados en el servidor maestro:

mysql -u root -p<password> sch1 <sch1.sql
mysql -u root -p<password> sch2 <sch2.sql

Importante: NO hay espacio entre -p y la clave <password>

Ahora necesitamos especificar que éste es el servidor, que su maestro está en la dirección xxx.xxx.xxx.xxx, y que los esquemas que queremos replicar son sch1 y sch2. Para esto editamos el archivo /etc/my.cnf y ponemos:

server-id = 2
master-host = xxx.xxx.xxx.xxx
master-user = slave_user
master-password = password
master-connect-retry = 60
replicate-do-db = sch1
replicate-do-db = sch2

Y reiniciamos MySQL: /etc/init.d/mysql restart

Necesitamos cierta información del servidor maestro, así que volvemos a él y escribimos:

mysql -u root -p
Enter password:

SHOW MASTER STATUS;
quit;

Y obtendremos algo así:

File Position Binlog_do_db Binlog_Ignore_DB
mysql-bin.006 183 sch1,sch2  

Una vez obtenida la información, volvemos al servidor esclavo y hacemos:

mysql -u root -p
Enter password:

SLAVE STOP;

CHANGE MASTER TO MASTER_HOST='xxx.xxx.xxx.xxx', MASTER_USER='slave_user', MASTER_PASSWORD='password', MASTER_LOG_FILE='mysql-bin.006', MASTER_LOG_POS=183;

START SLAVE;
quit;

Y con esto concluimos. Ahora los esquemas sch1 y sch2 están replicados, así que cualquier cambio en el servidor maestro se verá reflejado en el servidor esclavo.

[Arriba]