Sin embargo MySQL 5.5 si que nos proporciona una interface para utilizar replicaciones semisíncronas. Este es su funcionamiento:
- Si el maestro tiene activado el modo semisíncrono y hay al menos un esclavo también semisíncrono, el servidor maestro espera confirmar la transacción hasta que el esclavo semisíncrono reconoce que ha recibido todos los eventos de dicha transacción, o hasta que pasa un tiempo determinado.
- El esclavo reconoce que recibe los eventos de la transacción cuando han sido tratados por el proceso IO. No tienen que reproducirse en las tablas replicadas (proceso SQL).
- Si pasa un determinado tiempo sin que ningún esclavo reconozca la transacción, el maestro vuelve a la replicación asíncrona automáticamente. En cuanto un esclavo semisíncrono vuelva a la actividad, el maestro regresa al modo semisíncrono.
mysql> INSTALL PLUGIN rpl_semi_sync_master SONAME 'semisync_master.so';
ERROR 1126 (HY000): Can't open shared library 'C:\Program Files\MySQL\MySQL Server A\lib/plugin/semisync_master.so' (errno: 2 )
Obtenemos un error, puesto que este comando se utiliza cuando el servidor funciona sobre Unix. Sin embargo en Internet la información de cómo realizarlo en sistemas Windows es casi inexistente, así que sirva este artículo para ver cómo tenemos que realizarlo en este sistema operativo. La solución es sencilla, y se trata de cargar liberías dinámicas .dll en lugar de las indicadas anteriormente:
mysql> INSTALL PLUGIN rpl_semi_sync_master SONAME 'semisync_master.dll';
Query OK, 0 rows affected (0.07 sec)
Y comprobamos que se ha cargado correctamente:
mysql> show plugins;
+-----------------------+----------+--------------------+---------------------+---------+
| Name | Status | Type | Library | License |
+-----------------------+----------+--------------------+---------------------+---------+
| binlog | ACTIVE | STORAGE ENGINE | NULL | GPL |
| mysql_native_password | ACTIVE | AUTHENTICATION | NULL | GPL |
| mysql_old_password | ACTIVE | AUTHENTICATION | NULL | GPL |
| CSV | ACTIVE | STORAGE ENGINE | NULL | GPL |
| MEMORY | ACTIVE | STORAGE ENGINE | NULL | GPL |
| MyISAM | ACTIVE | STORAGE ENGINE | NULL | GPL |
| MRG_MYISAM | ACTIVE | STORAGE ENGINE | NULL | GPL |
| ARCHIVE | ACTIVE | STORAGE ENGINE | NULL | GPL |
| BLACKHOLE | ACTIVE | STORAGE ENGINE | NULL | GPL |
| FEDERATED | DISABLED | STORAGE ENGINE | NULL | GPL |
| InnoDB | ACTIVE | STORAGE ENGINE | NULL | GPL |
| INNODB_TRX | ACTIVE | INFORMATION SCHEMA | NULL | GPL |
| INNODB_LOCKS | ACTIVE | INFORMATION SCHEMA | NULL | GPL |
| INNODB_LOCK_WAITS | ACTIVE | INFORMATION SCHEMA | NULL | GPL |
| INNODB_CMP | ACTIVE | INFORMATION SCHEMA | NULL | GPL |
| INNODB_CMP_RESET | ACTIVE | INFORMATION SCHEMA | NULL | GPL |
| INNODB_CMPMEM | ACTIVE | INFORMATION SCHEMA | NULL | GPL |
| INNODB_CMPMEM_RESET | ACTIVE | INFORMATION SCHEMA | NULL | GPL |
| PERFORMANCE_SCHEMA | ACTIVE | STORAGE ENGINE | NULL | GPL |
| partition | ACTIVE | STORAGE ENGINE | NULL | GPL |
| rpl_semi_sync_master | ACTIVE | REPLICATION | semisync_master.dll | GPL |
+-----------------------+----------+--------------------+---------------------+---------+
21 rows in set (0.01 sec)
Y posteriormente realizamos algo parecido en el esclavo:
mysql> INSTALL PLUGIN rpl_semi_sync_slave SONAME 'semisync_slave.dll';
Query OK, 0 rows affected (0.00 sec)
El último paso es activar este tipo de replicación. Lo podemos hacer modificando los ficheros de configuración de los servidores (lo que motivaría tener que reiniciarlos) o también podemos hacerlo dinámicamente (lo configuramos hasta el próximo reinicio). Vamos a hacerlo de esta última forma:
En el maestro:
mysql> SET GLOBAL rpl_semi_sync_master_enabled=1;
Query OK, 0 rows affected (0.00 sec)
En el esclavo:
mysql> SET GLOBAL rpl_semi_sync_slave_enabled = 1;
Query OK, 0 rows affected (0.00 sec)
Reiniciamos el esclavo para que el maestro se de por enterado del cambio efectuado en el esclavo:
mysql> stop slave;
Query OK, 0 rows affected (0.02 sec)
mysql> start slave;
Query OK, 0 rows affected (0.00 sec)
Y ya estaría configurado. Si os resulta interesante este artículo, igual próximamente os hago alguna demostración de funcionamiento y monitorización de este tipo de replicación.