標準レプリケーションの設定が済んでいるものとします。
プラグインインストール
mysql> INSTALL PLUGIN rpl_semi_sync_master SONAME 'semisync_master.so';
確認
mysql> show plugins; +--------------------------+----------+--------------------+--------------------+---------+ | Name | Status | Type | Library | License | +--------------------------+----------+--------------------+--------------------+---------+ | rpl_semi_sync_master | ACTIVE | REPLICATION | semisync_master.so | GPL | +--------------------------+----------+--------------------+--------------------+---------+
LOGの書き出しがコミット単位になっているか確認
mysql> show variables like 'innodb_flush_log_at_trx_commit'; +--------------------------------+-------+ | Variable_name | Value | +--------------------------------+-------+ | innodb_flush_log_at_trx_commit | 1 | +--------------------------------+-------+
/etc/my.cnf で [mysqld] の中に下記を追加
rpl_semi_sync_master_enabled=1 <= 準同期レプリケーションを有効に rpl_semi_sync_master_timeout=100 <= 更新時、SLAVEが応答しない時のタイムアウト時間を0.1秒に設定
MySQLを再起動して、設定が反映しているか確認
mysql> show variables like '%semi%'; +------------------------------------+-------+ | 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 | <= +------------------------------------+-------+
Status
mysql> SHOW STATUS LIKE "rpl%"; +--------------------------------------------+-------------+ | Variable_name | Value | +--------------------------------------------+-------------+ | Rpl_semi_sync_master_clients | 1 | | Rpl_semi_sync_master_net_avg_wait_time | 0 | | Rpl_semi_sync_master_net_wait_time | 0 | | Rpl_semi_sync_master_net_waits | 0 | | Rpl_semi_sync_master_no_times | 0 | | Rpl_semi_sync_master_no_tx | 0 | | Rpl_semi_sync_master_status | ON | <=SemiSyncで動作 | Rpl_semi_sync_master_timefunc_failures | 0 | | Rpl_semi_sync_master_tx_avg_wait_time | 0 | | Rpl_semi_sync_master_tx_wait_time | 0 | | Rpl_semi_sync_master_tx_waits | 0 | | Rpl_semi_sync_master_wait_pos_backtraverse | 0 | | Rpl_semi_sync_master_wait_sessions | 0 | | Rpl_semi_sync_master_yes_tx | 0 | | Rpl_status | AUTH_MASTER | +--------------------------------------------+-------------+
同期停止
mysql> STOP SLAVE;
プラグインインストール
mysql> INSTALL PLUGIN rpl_semi_sync_slave SONAME 'semisync_slave.so';
確認
mysql> show plugins; +--------------------------+----------+--------------------+--------------------+---------+ | Name | Status | Type | Library | License | +--------------------------+----------+--------------------+--------------------+---------+ | rpl_semi_sync_slave | ACTIVE | REPLICATION | semisync_slave.so | GPL | +--------------------------+----------+--------------------+--------------------+---------+
LOGの書き出しがコミット単位になっているか確認
mysql> show variables like 'innodb_flush_log_at_trx_commit'; +--------------------------------+-------+ | Variable_name | Value | +--------------------------------+-------+ | innodb_flush_log_at_trx_commit | 1 | +--------------------------------+-------+
/etc/my.cnf で [mysqld] の中に下記を追加
rpl_semi_sync_slave_enabled=1 <= 準同期レプリケーションスレーブ動作を有効に
MySQLを再起動して、同期再開
mysql> START SLAVE;