Replicación maestro

453 views

Published on

Published in: Technology, Business
  • Be the first to comment

  • Be the first to like this

Replicación maestro

  1. 1. Replicación Maestro - Esclavo en MySQL >5.0La replicación en MySQL funciona de una manera muy sencilla. Existe un maestro, quees el encargado de propagar los cambios y los esclavos, que son los que reciben estoscambios a fin de tener una copia exacta de lo que tiene el maestro.Para que esto suceda, los esclavos tienen una conexión abierta contínua con el maestropara recibir estos cambios. Con esta conexión se comprueba desde el esclavo la últimaposición escrita en el log binario del maestro -eso es, se replican por medio del logbinario. Cuando sucede algún cambio en el log binario del maestro, se remiten estoscambios a los esclavos, que posteriormente ejecutan estos cambios en sus tabla.sPara empezar una replicación maestro esclavo sencilla hay que tener como mínimo dosinstancias del servidor MySQL, una que haga de maestro y otra que haga de esclavo.En el maestro tienen que estar las siguientes líneas en el fichero de configuración[my.cnf]:log-bin=mysql-binserver-id = 1Por otro lado, en el esclavo tendremos que tener las siguientes lineas:server-id = 2Una vez configurados los servidores, podemos arrancarlos -obviamente aún no van areplicar porque no les hemos indicado que empiecen a replicar.Cuando estén arrancados, en el maestro creamos o instalamos las tablas y la base dedatos que queremos replicar. Cuando estén creadas y hayamos insertado los datosnecesarios dentro de las tablas entonces tendremos que hacer un volcado de la base dedatos a un archivo de texto. La razón de esto es que vamos a instalar esta misma base dedatos en el esclavo. Para ello lo podremos hacer así:mysql> GRANT REPLICATION PRIVILEGES ON *.bbdd TO‘usuario_replicacion’@192.168.0.3′ IDENTIFIED BY ‘pass_replicacion’;mysql> flush privileges;mysql> LOCK ALL TABLES READ ONLYmysql> exitAhora desde la línea de comandos sacamos un DUMP del maestro:joax@maestro> mysqldump bbdd > bbdd_dump_20071202.sql
  2. 2. Una vez terminado el proceso, tenemos que recordar la situación del log binario en elmaster:mysql> SHOW MASTER STATUS;+——————+———-+————–+——————+| File | Position | Binlog_Do_DB | Binlog_Ignore_DB |+——————+———-+————–+——————+| mysql-bin.000005 | 98 | | |+——————+———-+————–+——————+1 row in set (0.00 sec)Con esto ya podemos desbloquear las tablas en el maestro:mysql> UNLOCK ALL TABLES;Y con ello, en el esclavo ahora ejecutamos lo siguiente:joax@esclavo> mysql bbdd < bbdd_dump_20071202.sqlY una vez que el esclavo tenga generada la base de datos, lo configuramos para que estéposicionado con respecto al maestro:mysql> CHANGE MASTER TO MASTER_HOST = ‘192.168.0.2′;mysql> CHANGE MASTER TO MASTER_USER = ‘usuario_replicacion’;mysql> CHANGE MASTER TO MASTER_PASSWORD = ‘pass_replicacion’;mysql> CHANGE MASTER TO MASTER_LOG_FILE = ‘mysql-bin.000005′;mysql> CHANGE MASTER TO MASTER_LOG_POS = 98;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. Paracomprobar que realmente está replicando, tendremos que ejecutar el siguiente comandoen la consola de MySQL:mysql> show slave status GEso muestra:*************************** 1. row ***************************Slave_IO_State: Waiting for master to send eventMaster_Host: 192.168.0.2Master_User: usuario_replicacionMaster_Port: 3306Connect_Retry: 60Master_Log_File: mysql-bin.000005Read_Master_Log_Pos: 98Relay_Log_File: esclavo-relay-bin.000001Relay_Log_Pos: 98Relay_Master_Log_File: mysql-bin.000005Slave_IO_Running: YesSlave_SQL_Running: YesReplicate_Do_DB: bbddReplicate_Ignore_DB:Replicate_Do_Table:Replicate_Ignore_Table:Replicate_Wild_Do_Table:Replicate_Wild_Ignore_Table:Last_Errno: 0
  3. 3. Last_Error:Skip_Counter: 0Exec_Master_Log_Pos: 98Relay_Log_Space: 98Until_Condition: NoneUntil_Log_File:Until_Log_Pos: 0Master_SSL_Allowed: NoMaster_SSL_CA_File:Master_SSL_CA_Path:Master_SSL_Cert:Master_SSL_Cipher:Master_SSL_Key:Seconds_Behind_Master: 01 row in set (0.00 sec)Lo importante es lo que sigue a Seconds_Behind_Master: porque es el valor queindica el retraso de este esclavo con respecto al maestro.En definitiva y a modo de resumen:1. Cambiar la configuración del maestro con las líneas:server-id=1log-bin=mysql-bin2. Cambiar la configuración del esclavo:server-id=23. Bloquear las tablas del maestro y hacer un dump:mysql> LOCK ALL TABLES READ ONLYmysql> SHOW MASTER STATUSmysql> exitjoax@maestro> mysqldump bbdd > bbdd_dump_20071202.sql4. Instalar la base de datos en el esclavo:joax@esclavo> mysql bbdd < bbdd_dump_20071202.sqlmysql> CHANGE MASTER TO MASTER_HOST = ‘192.168.0.2′;mysql> CHANGE MASTER TO MASTER_USER = ‘usuario_replicacion’;mysql> CHANGE MASTER TO MASTER_PASSWORD = ‘pass_replicacion’;mysql> CHANGE MASTER TO MASTER_LOG_FILE = ‘mysql-bin.000005′;mysql> CHANGE MASTER TO MASTER_LOG_POS = 98;mysql> start slave;En un cluster podremos incluir tantos esclavos como necesitemos. He llegado a verclusteres de varias decenas de esclavos sobre el mismo maestro. Pero son puntos dondea lo mejor tienes que tomar una estrategia de particionado de la base de datos. Estrategiaque veremos próximamente. 

×