Replicar base de datos MySQL
El problema es que no puedo darme el lujo de perder ni un bit de información de la página del Siglo, por lo cual me dí a la tarea de replicar la base de datos.
El primer esquema que utilicé fue hacer backup 2 veces al día de toda la base de datos, un tar -jcvf file.tar.bz2 /var/lib/mysql@ y descargarlo con script en una pc local:
#!/bin/sh wget -q -c http://www.elsiglodetorreon.com.mx/dump/siglon -O /d2/BackupDB/Internet_db_`date +%Y%m%d_01`.tar.bz2
El segundo esquema fue precisamente utilizar las capacidades de replicación de el mismo manejador de base de datos: MySQL.
1. Hacemos un backup de la DB, copiando vilmente los archivos del servidor maestro que estén en /var/lib/mysql o donde tengan sus bases de datos (por lo general las distribuciones modernas de Linux las ponen allí) al servidor esclavo.
2. Añadimos el parámetro server-id=2,@ en el servidor esclavo, damos de baja el motor de base de datos, copiamos los archivos del maestro en /var/lib/mysql e iniciamos de nuevo MySQL.
3. En el servidor maestro, añadimos en la sección [mysqld]@
log-bin=mysql-bin server-id=1
4. En el servidor maestro damos permisos de replicación al esclavo
GRANT REPLICATION SLAVE ON *.* TO "slave"@"host" IDENTIFIED BY 'slaveabdul';
5. Reiniciamos el servidor maestro, aqui es importante que si estaba en producción lo dejemos offline un rato en lo que hacemos la sincronización.
6. En el servidor maestro visualizamos el estado del servidor:
mysql> SHOW MASTER STATUS\G File: mysql-bin.000001 Position: 4 Binlog_Do_DB: Binlog_Ignore_DB: 1 row in set (0.00 sec)
7. Apuntamos esos datos y en el esclavo ejecutamos lo siguiente (teniendo cuidado de poner el mismo usuario y password, además del log file y de la posición):
CHANGE MASTER TO MASTER_HOST='ip-maestro', MASTER_USER='slave', MASTER_PASSWORD='slaveabdul', MASTER_LOG_FILE='mysql-bin.000001', MASTER_LOG_POS=4;
8. En el esclavo ejecutamos:
START SLAVE
Y ya, ahora tenemos los mismos datos en uno como en otro host… por lo que llevo viendo mantiene sincronizado todo el tiempo, aunque se perdiera el enlace del esclavo con el maestro en cuanto tuvieran de nuevo comunicación se sincronizarían. Esta sincronización se hace a nivel de log binario, por lo cual es rápido y consistente, además de que en mi caso en lugar de respaldar 1.2 GB diarios de datos ahora recibo las actualizaciones de la base de dato de manera constante y no me acabo el ancho de banda local, además de que solo se transfieren los cambios y no toda(s) la(s) base(s) de datos.
MySQL rocks.
Ganamos:
- Menos uso de ancho de banda
- Sincronización de datos
- Backup en diferentes lugares (inclusive paises) sin mayor problema


