Hola a todos, bueno, como os dije hace ya unos dias, hos voy a poner aquí el procedimiento que yo he seguido para poder hacer replicas de un ordenador a otro de todas las bases de datos, excepto de una.
Este es un pequeño manual que he echo para mi trabajo.
REPLICA DE BASES DE DATOS
La réplica de MySQL permite tener una copia exacta de una base de datos de un ordenador principal (maestro) en otro ordenador (esclavo), y todas las actualizaciones que se vayan haciendo en la base de datos del ordenador maestro, se repliega inmediatamente en el esclavo. De esta manera, ambas bases de datos están sincronizadas.
Esta documentación está explicada para realizar réplicas de bases de datos de un ordenador a otro, u otros, bajo el Sistema Operativo de White Box Enterprise Linux.
Para poder realizar toda la configuración necesaria para la réplica, previamente los ordenadores donde se vayan a realizar, deben tener instalado la misma versión de MySQL.
En esta documentación, utilizaremos los siguientes datos a modo de ejemplo:
● ORDENADOR MAESTRO: IP = 192.168.17.100
Nombre = laboratorio1
Nombre de la base de datos que NO se va a replicar = replica
● ORDENADOR ESCLAVO: IP = 192.168.17.101
Nombre = laboratorio2
OJO!!, cuando estés realizando la réplica, debes cambiar esos datos de ejemplo por los tuyos reales.
La IP y el nombre de tus ordenadores, los encontrarás en:
# vi /etc/hosts
CONFIGURAR ORDENADOR MAESTRO
1º Creamos los directorios, si no existen, donde se almacenarán los datos de la replicación
Código:
# mkdir /var/log/mysql
# chown mysql:mysql /var/log/mysql
2º Pasamos a configurar el maestro. Abrimos el archivo my.cnf
Y agregamos las siguientes líneas al fichero:
Código:
[mysqld]
datadir=/var/lib/mysql
socket=/var/lib/mysql/mysql.sock
old_passwords=1
binlog-ignore-db=replica *1
server-id=1
innodb_flush_log_at_trx_commit=1
sync-binlog=1
log-bin=/var/log/mysql/laboratorio1-bin
log-bin-index=/var/log/mysql/laboratorio1-bin.index
*1 si se quiere ignorar más de una base de datos, se pondrá esta línea (binlog-ignore-db) tantas veces como sea necesario, seguido del nombre de las bases de datos que no se van replicar.
3º Reiniciamos el demonio de mysql una vez echas estas modificaciones
Código:
# /etc/init.d/mysql restart
4º Seguido comprobamos que escucha por el puerto 3306
Código:
# netstat –an|grep –i listen|grep –i 3306
5º Ahora pasamos a configurar al usuario que realizará la réplica entre el maestro y el esclavo:
Código:
# mysql –u root
mysql> GRANT REPLICATION SLAVE ON *.* TO ‘slave_user’@’%’ IDENTIFIED BY ‘clave_user’;
mysql> FLUSH PRIVILEGES;
mysql> FLUSH TABLES WITH READ LOCK;
mysql> SHOW MASTER STATUS;
(El comando SHOW MASTER STATUS mostrará algo parecido a la siguiente tabla. El resultado que nos da en File y Position, lo apuntamos, ya que lo seguiremos utilizando en siguientes pasos)
Código:
+-------------------------------+-----------------+----------------------+-------------------------+
| File | Position | Binlog_Do_Db | Binlog_Ignore_Db |
+-------------------------------+-----------------+----------------------+-------------------------+
| laboratorio1-bin.000001 | 98 | | replica,replica |
+-------------------------------+-----------------+----------------------+-------------------------+
mysql> quit
6º Ahora comprobamos que está en el log binario con el comando mysqlbinlog y podremos ver el contenido del mismo
Código:
# mysqlbinlog /var/lib/mysql/laboratorio1-bin.000001 *
* donde pone laboratorio1-bin.000001, pondremos lo que nos dio de resultado el File cuando ejecutamos antes el comando SHOW MASTER STATUS.
CONFIGURAR ORDENADOR ESCLAVO
1º Creamos los directorios, si no existen, donde se almacenarán los datos de la replicación
Código:
# mkdir /var/log/mysql
# chown mysql:mysql /var/log/mysql
2º Si la base de datos no existe, se creará
Código:
# mysql –u root
mysql> CREATE DATABASE replica;
mysql> quit
3º Pasamos a configurar el esclavo. Abrimos el archivo my.cnf
Y agregamos las siguientes líneas
Código:
[mysqld]
datadir=/var/lib/mysql
socket=/var/lib/mysql/mysql.sock
old_passwords=1
server-id=2 *1
master-host=192.168.17.100
master-user=slave_user
master-password=clave_user
master-connect-retry=60
replicate-ignore-db=replica *2
relay-log=/var/log/mysql/laboratorio2-relay-bin
relay-log -index=/var/log/mysql/laboratorio2-relay-bin.index
*1 si vamos a tener más de un ordenador esclavo, a cada uno le mandaremos un server-id distinto (por ejemplo: server-id=3, server-id=4,etc…). Este nº nunca debe de ser igual que el del maestro.
*2 si se va a ignorar más de una base de datos, se pondrá esta línea (replicate-ignore-db) tantas veces como sea necesario, seguido del nombre de las bases de datos que van a ser replicadas.
4º Reiniciamos el demonio de mysql una vez echas estas modificaciones
Código:
# /etc/init.d/mysql restart
5º Seguido comprobamos que escucha por el puerto 3306
Código:
# netstat –an|grep –i listen|grep –i 3306
6º
Código:
# mysql –u root
mysql> slave stop;
mysql> CHANGE MASTER TO MASTER_HOST=’192.168.17.100’, MASTER_USER=’slave_user’, MASTER_PASSWORD=’clave_user’, MASTER_LOG_FILE=’laboratorio1-bin.000001’, MASTER_LOG_POS=98;
mysql> start slave;
mysql> quit
- en
MASTER_HOST, pondremos la IP o nombre del ordenador maestro.
- en
MASTER_USER, pondremos el nombre del usuario al que concedimos los derechos de la réplica.
- en
MASTER_PASSWORD, pondremos la contraseña del usuario de MASTER_USER
- en
MASTER_LOG_FILE, pondremos el resultado que nos devuelve en campo File, cuando ejecutamos SHOW MASTER STATUS en el maestro.
- en
MASTER_LOG_POS, pondremos el resultado que nos devuelve en campo Position, cuando ejecutamos SHOW MASTER STATUS en el maestro.
7º Ya sólo queda comprobar que la réplica de todas las bases de datos menos una ó varias funciona, así que sólo tenemos q ir a ordenador maestro y realizar cualquier cambio en cualquier base de datos, y comprobar en el esclavo que el cambio se ha realizado.
Bueno, espero que le sirva de ayuda a alguien, ya que entre todos habeis podido ayudarme a mi.
Muchas gracias
Saludos