MySQL 5.7リリース! ―マルチソースレプリケーション―

今回新しく MySQL 関係のコラムを担当することになりました、潮です。
主に MySQL と Oracle Database の構築、技術サポートを担当しています。
以後よろしくお願いいたします。

さて、2015年10月にオラクル社より MySQL 5.7のGA版がリリースされました。
5.7.9が GA の最初のバージョンで、原稿執筆時点(2016/1/28)では5.7.10が最新版となっています。

MySQL 5.6から5.7にバージョンアップされることに伴い、いくつか機能追加や性能改善が行われました。
それらをご紹介したいと思います。

本記事では、【マルチソースレプリケーション】を扱います。

マルチソースレプリケーションとは?

MySQL 5.7 で新規追加された、複数のマスターのデータを1つのスレーブに集約する機能です。
従来からできた、マスター:スレーブが1:Nのレプリケーションに加え、N:1のレプリケーションができるようになりました。

マルチソースレプリケーションの仕組み

仕組みはこちらの図の通りです。

マルチソースレプリケーションの仕組み

5.7 では、5.6 以前でもあった Slave I/O Thread と Slave SQL Thread を束ねる、「Channel」という概念が作られました。(厳密には、MySQL Cluster Replication で Channel という言葉は使われていましたが。)

1つの Channel が1つのマスター情報を持つ仕組みになっており、Channel はスレーブ1台に対して複数持つことができるようになっているため、これにより複数のマスターからの更新を受け付けることができるようになりました。

設定方法は?

5.6以前と変わらず、スレーブで change master to ~の構文を使ってマスターの情報を入力します。
異なるのは、change master to ~構文の最後に for channel ‘任意のチャネル名’ が入る点です。
change master to ~ はチャネル名を変えて、全てのマスターに対して実行します。
なお、マスターでは特段設定は不要です。

# マスターの情報を入力します。
mysql> change master to master_host='172.30.50.64',
    -> master_user='repl',
    -> master_password='XXXXXXXX',
    -> master_auto_position=1
    -> for channel 'repchannel1';  #★追加設定
Query OK, 0 rows affected, 2 warnings (1.73 sec)

# レプリケーションを開始します。
mysql> start slave for channel 'repchannel1';
Query OK, 0 rows affected (0.08 sec)

確認例

設定の確認は、スレーブで show slave status for channel ‘チャネル名’ コマンドを実行することで可能です。

mysql> show slave status for channel 'repchannel1'G
*************************** 1. row *************************** 
Slave_IO_State: Waiting for master to send event 
Master_Host: 172.30.50.64 
Master_User: repl 
Master_Port: 3306 
Connect_Retry: 60 
Master_Log_File: mysql-fabric2-bin.000001 
Read_Master_Log_Pos: 160771 
Relay_Log_File: mysql-fabric1-relay-bin-repchannel1.000002 
Relay_Log_Pos: 438 
Relay_Master_Log_File: mysql-fabric2-bin.000001 
Slave_IO_Running: Yes     #★レプリケーションの確認ポイント
Slave_SQL_Running: Yes    #★レプリケーションの確認ポイント
           ~~~(中略)~~~ 
Channel_Name: repchannel1   #★指定したチャネル名

5.6以前と同様、
Slave_IO_Running: Yes かつ Slave_SQL_Running: Yes
であればレプリケーションが行われていることが確認できます。

どのChannelの設定であるかは、出力の最後の
Channel_Name:
という項目から、可能です。

どんな時に使えるか?

複数拠点で別々に管理しているMySQLサーバのデータを単一拠点で集中管理する運用に変更する際のデータ集約や、各拠点で蓄積したデータを統合してBI分析を始めたい、などの場合に利用できます。

新たに注意しなくてはならなくなる点は?

マスターに頻繁に更新がかかる場合、スレーブサーバの書き込み性能が問題になり得ます。
今まではスレーブサーバにはマスターと同等の書き込み性能があれば十分でしたが、複数のマスターを持つ場合、マスターを超える書き込み性能が必要となる可能性があります。
また、マスター同士での情報の連携はしていませんので、この点も注意が必要です。

 

是非この記事をお読み頂いた方も試してみて下さい。

タイトルとURLをコピーしました