MySQLのレプリケーション設定

# 設定ファイルの編集〜レプリケーション用ユーザの作成まで
[こちら](http://qiita.com/skouno/items/443112468b46cd7cc3ae#mysql-mariadb%E3%81%AE%E8%A8%AD%E5%AE%9A)の内容になります。

# Masterステータスの確認
Master側のMySQLを起動して、Masterになっているか確認します。

```
mysql> SHOW MASTER STATUS;
+------------------+----------+--------------+------------------+
| File             | Position | Binlog_Do_DB | Binlog_Ignore_DB |
+------------------+----------+--------------+------------------+
| mysql-bin.000002 |      271 |              |                  |
+------------------+----------+--------------+------------------+
1 row in set (0.00 sec)
```

# Slaveの設定
Slave側をSlaveと認識させるために、Masterの情報を登録します。
この時、MASTER_LOG_FILE=MasterのFile、MASTER_LOG_POS=MasterのPositionを入力します。

```
mysql> CHANGE MASTER TO
     -> MASTER_HOST='192.168.10.1',
     -> MASTER_USER='repl',
     -> MASTER_PASSWORD='slavepass',
     -> MASTER_LOG_FILE='mysql-bin.000002',
     -> MASTER_LOG_POS=271;
```

エラー無く設定できたら、Slaveとして起動します。

```
mysql> START SLAVE;
mysql> SHOW SLAVE STATUS\G
*************************** 1. row ***************************
               Slave_IO_State: Waiting for master to send event
                  Master_Host: 192.168.10.1
                  Master_User: repl
                  Master_Port: 3306
                Connect_Retry: 60
              Master_Log_File: mysql-bin.000002
          Read_Master_Log_Pos: 271
               Relay_Log_File: db-koryo-relay-bin.000002
                Relay_Log_Pos: 417
        Relay_Master_Log_File: mysql-bin.000002
             Slave_IO_Running: Yes
            Slave_SQL_Running: Yes
              Replicate_Do_DB: 
          Replicate_Ignore_DB: 
           Replicate_Do_Table: 
       Replicate_Ignore_Table: 
      Replicate_Wild_Do_Table: 
  Replicate_Wild_Ignore_Table: 
                   Last_Errno: 0
                   Last_Error: 
                 Skip_Counter: 0
          Exec_Master_Log_Pos: 271
              Relay_Log_Space: 576
              Until_Condition: None
               Until_Log_File: 
                Until_Log_Pos: 0
           Master_SSL_Allowed: No
           Master_SSL_CA_File: 
           Master_SSL_CA_Path: 
              Master_SSL_Cert: 
            Master_SSL_Cipher: 
               Master_SSL_Key: 
        Seconds_Behind_Master: 0
Master_SSL_Verify_Server_Cert: No
                Last_IO_Errno: 0
                Last_IO_Error: 
               Last_SQL_Errno: 0
               Last_SQL_Error: 
  Replicate_Ignore_Server_Ids: 
             Master_Server_Id: 1
1 row in set (0.00 sec)
```

Slave_IO_Running: と Slave_SQL_Running: が両方とも YES になっていると、スレーブは問題なく動作しています。

# マスターのバイナリログの削除
マスターサーバでは、バイナリログ（mysql-bin.xxxxxxx）が増え続けるので、削除する必要があります。[こちら](http://goo.gl/zsJ4yo)が参考になると思います。

# その他注意点
[MySQLレプリケーションの注意点 - glxsのお気楽日記](http://goo.gl/QmRf2x)：MySQLの標準機能を使用したレプリケーション中に実行してはいけないSQLについて。

# 障害時復旧手順
1. STOP SLAVE
2. RESET SLAVE
3. 改めてCHANGE MASTER TO文発行
4. START SLAVE

# 知識
## 同期の種類
[MySQLレプリケーション再入門 - Qiita](http://goo.gl/ha5Tql)
> マスターからスレーブにデータを複製する処理において、準同期、非同期の2種類の同期方式があります。

>- 準同期：マスターでデータの更新が行われ、スレーブでも更新が行われた通知を受け取って同期の完了と判断します。
- 非同期：準同期とは違い、スレーブでも更新が行われたか？の判定は行われません。文字通りの非同期での実行になります。

 [第8回　MySQLのレプリケーション構成：MySQLをチューニング，そしてスケールアップ／スケールアウトへ｜gihyo.jp … 技術評論社](http://goo.gl/QB4MwW)
> MySQLのレプリケーションでは，デフォルトでは非同期型となっています。MySQL 5.5以降では，プラグインをインストールすることで同期型と非同期型の中間に当たる準同期型をサポートしています。

# 参考
- [MySQL レプリケーションのセットアップ手順](http://wadslab.net/wiki/index.php?MySQL%20%A5%EC%A5%D7%A5%EA%A5%B1%A1%BC%A5%B7%A5%E7%A5%F3%A4%CE%A5%BB%A5%C3%A5%C8%A5%A2%A5%C3%A5%D7%BC%EA%BD%E7)
- [レプリケーション時のRESET MASTERとRESET SLAVE](http://open-groove.net/mysql/reset-master-reset-slave/)
- [MySQLレプリケーションにおけるフェイルオーバー | OpenGroove](http://goo.gl/dLdpu)