MySQLのレプリケーション(SSL対応)

投稿者: | 2012年4月10日

MySQL サーバの冗長化をする感じで、レプリケーションをしてみた記録
今回はインターネット経由でレプリケーションを行いたいので、SSLにも対応してみる。

作業後に書いているので、間違いなどがあれば指摘してもらえるとうれしいです。

レプリケーションユーザの作成

マスタとなるMySQLサーバに以下のユーザを設定します。
最後の REQUIRE SSL がSSLによるレプリケーションを要求するオプションです。

  • レプリケーションユーザ名:replication
  • レプリケーションユーザ パスワード:replicationuserpass
  • レプリケーション先ホスト:192.168.201.11/32
GRANT REPLICATION SLAVE ON *.* TO 'replication'@'192.168.201.11/255.255.255.255' IDENTIFIED BY 'replicationuserpass' REQUIRE SSL;

マスタサーバの設定

マスタサーバでバイナリロギングの有効化や、サーバIDの設定を行います。

  • 修正するファイル: my.cnf
[mysqld]
ssl
server-id=1001
log-bin=mysql-bin
ssl-ca=/path/to/ssl/ca.crt
ssl-cert=/path/to/ssl/mysql01.crt
ssl-key=/path/to/ssl/mysql01.nopass.key
sync_binlog=1
innodb_flush_log_at_trx_commit=1

スレーブサーバの設定

サーバを識別する、サーバIDなどを設定します。

  • 修正するファイル: my.cnf
[mysqld]
ssl
server-id=1002
# レプリケーションするDBを限定する場合に利用
#replicate-do-db=ReplicationDB
ssl-ca=/path/to/ssl/ca.crt
ssl-cert=/path/to/ssl/mysql01.crt
ssl-key=/path/to/ssl/mysql01.nopass.key
#skip-slave

データの取得

マスタサーバ側で全てのデータを取得します。
MyISAM形式のテーブルのみで有れば、ファイルシステム上でDBをコピーすれば良いのですが、
InnoDBを利用している場合は以下の方法が安全です。

ただし、以下のコマンドが動いている間はREAD Lockが掛かるため注意が必要です。

mysqldump --all-databases --add-drop-database --add-drop-table --master-data \
 --lock-all-tables > dumpdata

スレーブ側に展開

4で取得したデータをスレーブ側に展開します。

mysql < dumpdata

レプリケーションを設定する

ここまで来たら、スレーブサーバ側でレプリケーションを有効にします。

CHANGE MASTER TO \
  MASTER_HOST='MasterServer', \
  MASTER_USER='replication', \
  MASTER_PASSWORD='replicationuserpass', \
  MASTER_SSL=1, \
  MASTER_SSL_CA = '/path/to/ssl/ca.crt', \
  MASTER_SSL_CERT = '/path/to/ssl/mysql01.crt', \
  MASTER_SSL_KEY = '/path/to/ssl/mysql01.nopass.key';

レプリケーションを実行する

すべての設定が完了したら、レプリケーションを実行します。

START SLAVE;

レプリケーションの状況を確認する

レプリケーションを実行したら、以下のコマンドでレプリケーションの状況を確認出来ます。

SHOW SLAVE STATUS \G

Slave_IO_RunningとSlave_SQL_RunningがYESなら、OKです。

*************************** 1. row ***************************
Slave_IO_State: Waiting for master to send event
Master_Host: MasterServer
Master_User: replication
Master_Port: 3306
Connect_Retry: 60
Master_Log_File: mysql-bin.000010
Read_Master_Log_Pos: 134904130
Relay_Log_File: sv95-relay-bin.000013
Relay_Log_Pos: 849257
Relay_Master_Log_File: mysql-bin.000010
Slave_IO_Running: Yes
Slave_SQL_Running: Yes
Replicate_Do_DB: system
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: 134904130
Relay_Log_Space: 849412
Until_Condition: None
Until_Log_File:
Until_Log_Pos: 0
Master_SSL_Allowed: Yes
Master_SSL_CA_File: /path/to/ssl/ca.crt
Master_SSL_CA_Path:
Master_SSL_Cert: /v/ssl/mysql01.crt
Master_SSL_Cipher:
Master_SSL_Key: /path/to/ssl/mysql01.nopass.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: 1001
1 row in set (0.01 sec)

参考にしたサイト

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください