La replicación de una base de datos en tiempo real siempre es conveniente entre otras cosas para la alta disponibilidad. Aquí explicaré como hacer la replicación en MySQL en un Sistema Operativo GNU/Linux.

Instalé MySQL server en el servidor maestro y servidor esclavo

apt-get install mysql-sever

Comenzaremos configurando servidor Maestro.

Edité el archivo de configuración de MySQL

vim /etc/mysql/my.cnf

busqué el apartado de [mysqld] y se agrega lo siguiente

server-id=1
log-bin=mysql-bin
innodb_flush_log_at_trx_commit=1
sync_binlog=1
binlog_do_db=exampledb

Donde -exampledb- es el nombre de la base de datos a replicar que debe estar tanto en el master como en el slave, puedes realizar un respaldo y luego exportarla o si la vas a crear desde 0, creala en ambos servidores.

Comenté la siguiente linea para que permita el acceso remoto de cualquier otro servidor y no solo de su localhost

#bin-address = 127.0.0.1

Entramos a mysql

>mysql -u root -p

Aquí se crea el usuario esclavo

mysql > GRANT REPLICATION SLAVE ON *.* TO REPLY [email protected] INDETIFY BY 'pass';

Donde root es el usuario que va a replicar,  -172.28.4.2-  será la ip del servidor esclavo ó el dominio en caso de tenerlo por DNS`s y -pass- será el password de éste usuario. Yo uso éste usuario porque ya existe en el servidor esclavo.

Se recargan los permisos de las tablas

mysql> FLUSH PRIVILEGES;

Accesamos a la base de datos en cuestión

mysql> use exampledb;

Se bloquean las tablas para lectura

mysql > FLUSH TABLES WITH READ LOCK;

Se desbloquean las tablas para otras sesiones

mysql> UNLOCK TABLES;

Aquí ya tenemos configurado el master y vamos a ver el estatus

mysql> SHOW MASTER STATUS;
+------------------+----------+--------------+------------------+
| File             | Position | Binlog_Do_DB | Binlog_Ignore_DB |
+------------------+----------+--------------+------------------+
| mysql-bin.000009 | 1460     | exampledb    |                  |
+------------------+----------+--------------+------------------+

Algo así debe mostrar la salida, aquí guardé esta información por aparte porque se necesita en la configuración del esclavo.

Procedemos a configurar el esclavo, donde igualmente instalé mysql-sever y  edité el archivo my.cnf

> vim /etc/mysql/my.cnf

buscamos el apartado de [mysqld] y agregé lo siguiente

server-id=2
replicate-do-db=exampledb

Donde -exampledb- es la base de datos a replicar. Igualmente comenté la linea

#bin-address = 127.0.0.1

reinicié servicios de mysql

/etc/init.d/mysql restart

Accedemos a mysql

mysql -u root -p

Aquí es importante recordar que la base de datos a replicar ya debe estar en ambos servidores, con mismo nombre y misma estructura. Sin olvidar que el motor de almacenamiento de las tablas debe ser MyISAM y no InnoDB. Verifiqué con el siguiente comando

mysql > show table status;

Aquí va donde está el maestro y los parámetros correctos

mysql > CHANGE MASTER TO MASTER_HOST='172.28.4.5', MASTER_USER='root', MASTER_PASSWORD='pass', MASTER_PORT=3306, MASTER_LOG_FILE='mysql-bin.000009', MASTER_LOG_POS=1460 , MASTER_CONNECT_RETRY=10;

Donde -172.28.4.5- es la ip del servidor master, -root- es el usuario slave que creamos en el master, -pass- es la contraseña que indicamos, -3306- es el puerto por defecto de mysql, -mysql-bin.000009- y la posicion -1460-  lo sacamos del master con el comando anterior

mysql> SHOW MASTER STATUS;
+------------------+----------+--------------+------------------+
| File             | Position | Binlog_Do_DB | Binlog_Ignore_DB |
+------------------+----------+--------------+------------------+
| mysql-bin.000009 | 1460     | exampledb    |                  |
+------------------+----------+--------------+------------------+

Iniciamos el esclavo, en el esclavo

mysql> slave start;

Aquí ya está replicando, y para verificar que así sea

mysql> show slave status \G; 
*************************** 1. row *************************** 
Slave_IO_State: Waiting for master to send event 
Master_Host: master Master_User: root 
Master_Port: 3306
Connect_Retry: 10 
Master_Log_File: mysql-bin.000009 
Read_Master_Log_Pos: 1460 
Relay_Log_File: mysqld-relay-bin.000004 
Relay_Log_Pos: 1397 
Relay_Master_Log_File: mysql-bin.000009 
Slave_IO_Running: Yes 
Slave_SQL_Running: Yes 
Replicate_Do_DB: exampledb

Si en Slave_IO_State tenemos -Waiting for master to send event- es porque esta correcto. Y la base de datos ya debe estarse replicando del maestro al esclavo.

Saludos.