Replicación en MySQL

Configuración de maestro y esclavo

$maestro = 192.168.0.2 
$esclavo = 192.168.0.1 

1. Cambiar la configuración del servidor MySQL maestro, añadiendo las siguientes líneas a /etc/mysql/my.cf:

# server-id: 10 + último octeto de la IP
server-id=12
log-bin=mysql-bin

2. Cambiar la configuración del servidor MySQL esclavo (/etc/mysql/my.cf):

# server-id: 10 + último octeto de la IP
server-id=11

3. Creamos un usuario para replicación en el nodo maestro:

mysql> CREATE USER 'replicator'@'192.168.0.1' IDENTIFIED BY 'secret';
Query OK, 0 rows affected (0.00 sec)
mysql> GRANT REPLICATION SLAVE ON *.* TO 'replicator'@'192.168.0.1' IDENTIFIED BY 'secret';
mysql> flush privileges;

4. Bloqueamos las tablas del maestro y hacemos un dump:

mysql> FLUSH TABLES WITH READ LOCK;
maestro# mysqldump bbdd > bbdd_dump_20120823.sql

Una vez terminado el proceso, tenemos que recordar la situación del log binario en el master:

mysql> SHOW MASTER STATUS;
+------------------+----------+--------------+------------------+
| File             | Position | Binlog_Do_DB | Binlog_Ignore_DB |
+------------------+----------+--------------+------------------+
| mysql-bin.000001 |  1102248 |              |                  |
+------------------+----------+--------------+------------------+

Con esto ya podemos desbloquear las tablas en el maestro:

mysql> UNLOCK TABLES;

5. Instalar la base de datos en el esclavo:

esclavo# mysql bbdd < bbdd_dump_20120823.sql
mysql> CHANGE MASTER TO MASTER_HOST = '192.168.0.2';
mysql> CHANGE MASTER TO MASTER_USER = 'replicator';
mysql> CHANGE MASTER TO MASTER_PASSWORD = 'secret';
mysql> CHANGE MASTER TO MASTER_LOG_FILE = 'mysql-bin.000001';
mysql> CHANGE MASTER TO MASTER_LOG_POS = 1102248;
mysql> start slave;

Ahora el esclavo comenzará la replicación con el maestro. Quedándose a 0 segundos de él una vez copiado todo el log binario que le resta de lo sucedido hasta la fecha. Para comprobar que realmente está replicando, tendremos que ejecutar:

mysql> show slave status \G

Testear el esclavo

Lo importante es lo que sigue al valor Seconds_Behind_Master: porque es el valor que indica el retraso de este esclavo con respecto al maestro. Y también hay que comprobar:

Slave_SQL_Running: Yes
Slave_IO_Running: Yes
  1. Creamos una tabla o una BD “test” en el maestro
  2. Luego verificamos que se replica
  3. Después probamos que el esclavo está en read-only: intentamos crear algo en el esclavo, pero con uno de los usuarios no privilegiados (o sea, uno que no sea “replicator” o “root”).

Referencias

es/availability/mysqlreplication.txt · Last modified: 2012/08/23 20:06 by mvidal
 
Except where otherwise noted, content on this wiki is licensed under the following license: CC0 1.0 Universal
Recent changes RSS feed Donate Powered by PHP Valid XHTML 1.0 Valid CSS Driven by DokuWiki