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)