환경 : Windows7 + Mysql5.5(Innodb) + MySQL Replication구성이후 실행


출처 - http://h391106.tistory.com/250

출처 - http://lks21c.blogspot.kr/2011/10/mysql-replication-semi-sync-how-to.html


MySQL 5.5 부터 기존의 built-in asynchronous replication  semisynchronous replication 이 추가되었다.

 

MySQL replication 은 기본적으로 asynchronous replication 을 사용한다. Master  Slave  Binary log 에 언제 엑세스를 했는지 혹은 수행을 했는지 아무정보가 없다.

Master crash 의 경우 Commit 된 정보가 어떤 Slave 로도 전송되지 말아야 한다. (하지만 Asynchronous Replication 에서는 이를 확인할 길이 없다.)

그 결과 Master 에서 Slave 로의 failover 시 누락된 트랜젝션이 발생하게 된다.

 

Semisynchronous Replication  asynchronous replication 의 대안이 될 수 있다.


------------------------------------------------------------------


Semisynchronous Replication 사용을 위해 Plugin 위치를 조회했다.

mysql> show variables like 'plugin_dir';


--------------------------------


<system variables>

mysql> SHOW VARIABLES LIKE 'rpl_semi_sync%';

 

<slave status>

mysql> SHOW STATUS LIKE 'Rpl_semi_sync%';


--------------------------------


On the master :

mysql> INSTALL PLUGIN rpl_semi_sync_master SONAME 'semisync_master.dll';


On the slave :

mysql> INSTALL PLUGIN rpl_semi_sync_slave SONAME 'semisync_slave.dll';


--------------------------------


On the master :

mysql> set global rpl_semi_sync_master_enabled=1;


mysql> set global rpl_semi_sync_master_timeout=100;


mysql> show variables like 'rpl_semi_sync%';

+------------------------------------+-------+

| Variable_name                      | Value |

+------------------------------------+-------+

| rpl_semi_sync_master_enabled       | ON    |

| rpl_semi_sync_master_timeout       | 100   |

| rpl_semi_sync_master_trace_level   | 32    |

| rpl_semi_sync_master_wait_no_slave | ON    |

+------------------------------------+-------+

4 rows in set (0.00 sec)


-------------------------


On the slave :


mysql> show variables like 'rpl_semi_sync%';


mysql> set global rpl_semi_sync_slave_enabled=1;


mysql> stop slave io_thread;

Query OK, 0 rows affected (0.00 sec)

 

mysql> start slave io_thread;

Query OK, 0 rows affected (0.00 sec)

 

mysql> show status like 'Rpl_semi_sync%';

+----------------------------+-------+

| Variable_name              | Value |

+----------------------------+-------+

| Rpl_semi_sync_slave_status | ON    |

+----------------------------+-------+

1 row in set (0.00 sec)


--------------------------------