準同期レプリケーションはプラグインを使用して実装されるため、プラグインがサーバーにインストールされて利用できる状態である必要があります。プラグインがインストールされたあと、それに関連付けられたシステム変数によって制御します。これらのシステム変数は、関連付けられたプラグインがインストールされるまで利用できません。
準同期レプリケーションを使用するには、次の要件を満たす必要があります。
MySQL 5.5 以降がインストールされている必要があります。
プラグインをインストールする機能には、動的ローディングをサポートする MySQL サーバーが必要です。これを検証するために、
have_dynamic_loading
システム変数の値がYES
であることを確認してください。バイナリ配布は動的ローディングをサポートしているはずです。レプリケーションがすでに機能している必要があります。マスター/スレーブ関係の作成については、セクション17.1.1「レプリケーションのセットアップ方法」を参照してください。
準同期レプリケーションをセットアップするには、次の指示を使用してください。ここで示す INSTALL PLUGIN
、SET GLOBAL
、STOP SLAVE
、および START SLAVE
ステートメントには、SUPER
権限が必要です。
準同期レプリケーションプラグインは MySQL 配布に含まれています。
コンポーネント配布を解凍します (マスター側とスレーブ側のファイルが含まれます)。
コンポーネントファイルを該当するサーバーのプラグインディレクトリにインストールします。semisync_master*
ファイルをマスターサーバーのプラグインディレクトリにインストールします。semisync_slave*
ファイルを各スレーブサーバーのプラグインディレクトリにインストールします。プラグインディレクトリの位置は、サーバーの plugin_dir
システム変数の値として利用できます。
プラグインをロードするには、準同期にするマスターと各スレーブで INSTALL PLUGIN
ステートメントを使用します。
マスターで:
mysql> INSTALL PLUGIN rpl_semi_sync_master SONAME 'semisync_master.so';
各スレーブで:
mysql> INSTALL PLUGIN rpl_semi_sync_slave SONAME 'semisync_slave.so';
上述のコマンドは、プラグインファイル名サフィクス .so
を使用します。システムで異なるサフィクスを適用してもかまいません。プラグインファイル名に自信がない場合は、サーバーのプラグインディレクトリでプラグインを探してください。
プラグインをインストールしようとして、Linux でここで示すようなエラーが発生する場合は、libimf
をインストールする必要があります。
mysql> INSTALL PLUGIN rpl_semi_sync_master SONAME 'semisync_master.so';
ERROR 1126 (HY000): Can't open shared library
'/usr/local/mysql/lib/plugin/semisync_master.so' (errno: 22 libimf.so: cannot open
shared object file: No such file or directory)
libimf
は https://dev.mysql.com/downloads/os-linux.htmlから取得できます。
どのプラグインがインストールされているかを確認するには、SHOW PLUGINS
ステートメントを使用するか、INFORMATION_SCHEMA.PLUGINS
テーブルを照会してください。
準同期レプリケーションプラグインがインストールされたあとは、デフォルトで無効になっています。準同期レプリケーションを有効にするには、プラグインがマスター側とスレーブ側の両方で有効にする必要があります。一方の側だけが有効の場合には、レプリケーションは非同期になります。
インストールされたプラグインが有効かどうかを制御するには、該当するシステム変数を設定します。これらの変数は実行時に SET GLOBAL
を使用して、またはコマンド行またはオプションファイルでサーバー起動時に設定できます。
実行時に、これらのマスター側システム変数を利用できます。
mysql> SET GLOBAL rpl_semi_sync_master_enabled = {0|1};
mysql> SET GLOBAL rpl_semi_sync_master_timeout = N;
スレーブ側で、このシステム変数を利用できます。
mysql> SET GLOBAL rpl_semi_sync_slave_enabled = {0|1};
rpl_semi_sync_master_enabled
または rpl_semi_sync_slave_enabled
の場合、準同期レプリケーションを有効にするには値を 1、無効にするには 0 にすべきです。デフォルトでは、これらの変数は 0 に設定されています。
rpl_semi_sync_master_timeout
の場合、値 N
はミリ秒で指定されます。デフォルト値は 10000 (10 秒) です。
実行時にスレーブ上で準同期レプリケーションを有効にする場合、スレーブ I/O スレッドを起動して (すでに実行中の場合はまず停止してから)、スレーブをマスターに接続し、準同期スレーブとして登録する必要があります。
mysql> STOP SLAVE IO_THREAD; START SLAVE IO_THREAD;
I/O スレッドがすでに実行中で再起動しない場合は、スレーブは非同期レプリケーションを使用し続けます。
サーバー起動時に、準同期レプリケーションを制御する変数をコマンド行オプションとしてまたはオプションファイルに設定できます。オプションファイルにリストされる設定は、サーバーが起動するたびに有効になります。たとえば、マスター側およびスレーブ側の my.cnf
ファイルに次のように変数を設定できます。
マスターで:
[mysqld]
rpl_semi_sync_master_enabled=1
rpl_semi_sync_master_timeout=1000 # 1 second
各スレーブで:
[mysqld]
rpl_semi_sync_slave_enabled=1