martes, 30 de noviembre de 2010

Replicación de la base de datos en MySQL

Vamos a describir cómo configurar Replicación de una base de datos en MySQL.


La Replicación en MySQL nos permitirá tener una copia exacta de una base de datos en un servidor maestro (master) en otro servidor esclavo (slave).

Todas las actualizaciones de la base de datos sobre el servidor master son inmediatamente replicadas a la base de datos sobre el servidor slave. De manera que la base de datos en el servidor slave está Sincronizada con la base de datos del servidor master.

Es importante señalar que ésto NO es una Política de Backup, porque un comando DELETE emitido accidentalmente en el master será trasladado a la base de datos slave. Sin embargo, una replicación ayudará a protegernos contra una falla de hardware.


Lo que haremos es replicar la base de datos nombrada moodle1910 ubicada en el servidor master con IP 10.0.0.105 en la base de datos del mismo nombre (moodle1910) pero ubicada en el servidor slave con IP 10.0.0.100

Servidor Master
IP: 10.0.0.105
Base de datos: moodle1910

Servidor Slave
IP: 10.0.0.100
Base de datos: moodle1910


SERVIDOR MASTER

1. Primero realizar un
1.a dump de la base de datos
mysqldump -uroot -p -C -Q -e -a moodle1910 | gzip -9 > dump_moodle1910.sql.gz

1.b y copiarlo al servidor slave
scp -p dump_moodle1910.sql.gz root@10.0.0.100:/root


2. Luego, editar el archivo
vi /etc/my.cnf
==========================
[mysqld]
datadir=/var/lib/mysql
socket=/var/lib/mysql/mysql.sock
user=mysql
# Default to using old password format for compatibility with mysql 3.x
# clients (those using the mysqlclient10 compatibility package).
old_passwords=1

log-bin=mysql-bin
binlog-do-db=moodle1910
server-id=1


# Disabling symbolic-links is recommended to prevent assorted security risks;
# to do so, uncomment this line:
# symbolic-links=0

[mysqld_safe]
log-error=/var/log/mysqld.log
pid-file=/var/run/mysqld/mysqld.pid
==========================

3. Reiniciar MySQL
service mysqld restart

4. Configurar el usuario, la base de datos a replicar y anotar algunos datos
mysql -uroot -p

mysql> GRANT REPLICATION SLAVE ON *.* TO 'slave_user'@'%' IDENTIFIED BY 'tuClaveSLAVE';
mysql> FLUSH PRIVILEGES;
mysql> USE moodle1910;
mysql> FLUSH TABLES WITH READ LOCK;
mysql> SHOW MASTER STATUS;

+----------------------+------------+------------------+------------------------+
| File | Position | Binlog_Do_DB | Binlog_Ignore_DB |
+----------------------+------------+------------------+------------------------+
| mysql-bin.000012 | 6304258 | moodle1910 | |
+----------------------+------------+------------------+------------------------+

mysql> quit;



SERVIDOR SLAVE

1. Primero que nada, crear una base de datos vacía con el mismo nombre de la que se pretende replicar. En este caso, moodle1910 (¿cómo?)

2. Con el archivo dump_moodle1910.sql.gz copiado a este servidor, (ver paso 1b del Servidor Master), ejecutar:

2.a Descomprimir el archivo .gz
gunzip dump_moodle1910.sql.gz

2.b
En caso de habernos logeado al servidor slave por SSH ejecutar:
nohup mysql -uroot -pxxxxx moodle1910 < dump_moodle1910.sql
(Esto permitirá que se complete la ejecución de restore, aún cuando se vea interrumpida la sesión ssh)

3. Editar el archivo
vi /etc/my.cnf
==========================
[mysqld]
datadir=/var/lib/mysql
socket=/var/lib/mysql/mysql.sock
user=mysql
# Default to using old password format for compatibility with mysql 3.x
# clients (those using the mysqlclient10 compatibility package).
old_passwords=1

server-id=2
master-host=10.0.0.105
master-user=slave_user
master-password=tuClaveSLAVE
master-connect-retry=60
replicate-do-db=moodle1910

# Disabling symbolic-links is recommended to prevent assorted security risks;
# to do so, uncomment this line:
# symbolic-links=0

[mysqld_safe]
log-error=/var/log/mysqld.log
pid-file=/var/run/mysqld/mysqld.pid
==========================

4. Reiniciar MySQL:
service mysqld restart

5. Últimos pasos...

mysql -uroot -p

mysql> STOP SLAVE;

mysql> CHANGE MASTER TO MASTER_HOST='10.0.0.105', MASTER_USER='slave_user', MASTER_PASSWORD='tuClaveSLAVE', MASTER_LOG_FILE='mysql-bin.000012', MASTER_LOG_POS= 6304258;

mysql> START SLAVE;
mysql> quit;


AL FIN...
Eso es todo, de ahora en adelante todos los cambios en moodle1910 sobre Master serán replicados en moodle1910 sobre Slave.


Links

1 comentario:

  1. que tal tengo una pregunta,estoy realizando un sistema distribuido de un punto de venta, me queda claro que con la replicacion puedo mantener el estado de mis base de datos per,colocando una situación de que mi máster deje de funcionar por 1 hora o mas por diversas situaciones, cuando se inicie de nuevo replicara la informacion que tiene el slave durante el tiempo que el master no estubo funcionando??

    ResponderEliminar