メモ: 準同期レプリケーション設定


参考: [tap dev blog - MySQL5.5-MySQL5.6+KeepAlivedを使った、2台構成HA型準同期レプリケーションの作り方](http://dev.tapweb.co.jp/2011/01/325)

# 準備

* CentOS7で試した。

## プラグインインストール

```mysql:MariaDBプロンプト
MariaDB [(none)]> INSTALL PLUGIN rpl_semi_sync_master SONAME 'semisync_master.so';
MariaDB [(none)]> INSTALL PLUGIN rpl_semi_sync_slave SONAME 'semisync_slave.so';
```

## my.cnf

```bash:/etc/my.cnf.d/my_custom.cnf
[mysqld]
character-set-server = utf8
innodb_file_per_table = 1

# show variables like slow;
slow_query_log=ON
long_query_time=1
log-slow-queries=/var/log/mariadb/slow.log


log-bin = mysql-bin
relay-log = relay-bin
# サーバごとに一意のIDを振ること。
server-id = 101
# 必須。レプリケーションで取得したログをバイナリログにも書き込む。
log_slave_updates
# 勝手にスレーブ起動はいや。
skip-slave-start
# セミシンクロ(準同期)レプリケーションを許可。
rpl_semi_sync_master_enabled = 1
rpl_semi_sync_slave_enabled = 1
```

`systemctl restart mariadb`


## 現状確認

```mysql:MariaDBプロンプト
MariaDB [(none)]> show status like '%semi%';
+--------------------------------------------+-------+
| Variable_name                              | Value |
+--------------------------------------------+-------+
| Rpl_semi_sync_master_clients               | 0     |
| 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    |
| 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_semi_sync_slave_status                 | OFF   |
+--------------------------------------------+-------+
15 rows in set (0.00 sec)
```

* `Rpl_semi_sync_master_clients`が0であることを覚えておく。


# 本番

## 通常MASTER側


```mysql:通常MASTER側にて実施
GRANT REPLICATION SLAVE ON *.* TO sync@'192.168.100.%' IDENTIFIED BY 'Iatho5zi';
```

```mysql:binlog名とポジションを確認
show status LIKE 'Binlog_snapshot_file';
show status LIKE 'Binlog_snapshot_position';
```

* binlog名 = mysql-bin.000002
* ポジション = 397

だったので以下コマンドとなる。

## 通常BACKUP側

```mysql:
change master to master_host='192.168.100.110',master_user='sync',master_password='Iatho5zi',master_log_file='mysql-bin.000002',master_log_pos=397;
```

```mysql:
start slave;
```

## 確認

```mysql:masterとbackup両方の比較した図
MariaDB [(none)]> show status like '%semi%';
+--------------------------------------------+-------+-------+
| Variable_name                              | master| backup|
+--------------------------------------------+-------+-------+
| Rpl_semi_sync_master_clients               | 1     | 0     |
| Rpl_semi_sync_master_net_avg_wait_time     | 0     | 0     |
| Rpl_semi_sync_master_net_wait_time         | 0     | 0     |
| Rpl_semi_sync_master_net_waits             | 0     | 0     |
| Rpl_semi_sync_master_no_times              | 1     | 0     |
| Rpl_semi_sync_master_no_tx                 | 1     | 0     |
| Rpl_semi_sync_master_status                | ON    | ON    |
| Rpl_semi_sync_master_timefunc_failures     | 0     | 0     |
| Rpl_semi_sync_master_tx_avg_wait_time      | 0     | 0     |
| Rpl_semi_sync_master_tx_wait_time          | 0     | 0     |
| Rpl_semi_sync_master_tx_waits              | 0     | 0     |
| Rpl_semi_sync_master_wait_pos_backtraverse | 0     | 0     |
| Rpl_semi_sync_master_wait_sessions         | 0     | 0     |
| Rpl_semi_sync_master_yes_tx                | 0     | 0     |
| Rpl_semi_sync_slave_status                 | OFF   | ON    |
+--------------------------------------------+-------+-------+
15 rows in set (0.00 sec)
```

あと良くわからん