要件
構成
以下のような感じ。

インターネットを介して二台のサーバーで稼働している MySQL にてレプリケーションを行う。その際に SSL で通信を暗号化する。
手順
MySQL SSL 対応確認、設定
レプリケーションユーザー作成
マスター側のにレプリケーション用のユーザーを作成する。このときに注意するのは REQUIRE SSL オプション。
GRANT REPLICATION SLAVE ON *.* TO ${repl_user}@${slave_ip} IDENTIFIED BY '${your_password}' REQUIRE SSL;
FLUSH PRIVILEGES;
マスター側で作成した証明書等をスレーブ側に転送しておく
マスターに接続する際に必要かなと思ったのでマスター側で作成した証明書をスレーブ側の任意のディレクトリに scp 等で取得しておく。
scp ${master_ip}/etc/mysql-ssl/* /etc/mysql-ssl/master/
レプリケーション設定
マスター側の my.cnf には以下の設定を。
server-id = 100 log-bin expire_logs_days = 10
スレーブ側の my.cnf には以下の設定を。
server-id = 101
レプリケーション開始
マスターにて show master status を行う。
mysql> show master status\G
*************************** 1. row ***************************
File: mysqld-bin.000001
Position: 98
Binlog_Do_DB:
Binlog_Ignore_DB:
1 row in set (0.00 sec)
スレーブにてレプリケーションを開始する。
CHANGE MASTER TO MASTER_HOST = 'xxx.xxx.xxx.xxx', MASTER_USER = 'repl_user', MASTER_PASSWORD = 'your_password', MASTER_LOG_FILE = 'mysqld-bin.000001', MASTER_LOG_POS = 98, MASTER_SSL = 1, MASTER_SSL_CA = '/etc/mysql-ssl/master/ca-cert.pem', MASTER_SSL_CERT = '/etc/mysql-ssl/master/server-cert.pem', MASTER_SSL_KEY = '/etc/mysql-ssl/master/server-key.pem';
start slave を実行する。実行後 show slave status にて確認する。
mysql> show slave status\G
*************************** 1. row ***************************
Slave_IO_State: Waiting for master to send event
Master_Host: xxx.xxx.xxx.xxx
Master_User: repl_user
Master_Port: 3306
Connect_Retry: 60
Master_Log_File: mysqld-bin.000002
Read_Master_Log_Pos: 98
Relay_Log_File: mysqld-relay-bin.000005
Relay_Log_Pos: 236
Relay_Master_Log_File: mysqld-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: 98
Relay_Log_Space: 236
Until_Condition: None
Until_Log_File:
Until_Log_Pos: 0
Master_SSL_Allowed: Yes
Master_SSL_CA_File: /etc/mysql-ssl/master/ca-cert.pem
Master_SSL_CA_Path:
Master_SSL_Cert: /etc/mysql-ssl/master/server-cert.pem
Master_SSL_Cipher:
Master_SSL_Key: /etc/mysql-ssl/master/server-key.pem
Seconds_Behind_Master: 0
1 row in set (0.00 sec)
Master_SSL_Allowed が Yes になっていることを確認する。それだけでは安心出来ないので以下を試してみる。
確認
スレーブ側で tcpdump しながらマスタにデータベースを追加をしてみると...以下の通り暗号化されている。

上段はマスターサーバー、下段はスレーブサーバー。
ちょっとメモ
- レプリケーション設定を
my.cnfへの設定は不要 master.infoとrelay-log.infoが正常に記録されていればmy.cnfへのレプリケーション設定は不要ではと思ったり- 5.5 系以降は
my.cnf内にmaster-host等が記載されていると起動しないので...