準同期レプリケーションはプラグインを使用して実装されるため、プラグインがサーバーにインストールされて利用できる状態である必要があります。 プラグインがインストールされたあと、それに関連付けられたシステム変数によって制御します。 これらのシステム変数は、関連付けられたプラグインがインストールされるまで利用できません。
このセクションでは、準同期レプリケーションプラグインをインストールする方法について説明します。 プラグインのインストールについての一般的な情報は、セクション5.6.1「プラグインのインストールおよびアンインストール」を参照してください。
準同期レプリケーションを使用するには、次の要件を満たす必要があります。
プラグインをインストールする機能には、動的ローディングをサポートする MySQL サーバーが必要です。 これを検証するために、
have_dynamic_loading
システム変数の値がYES
であることを確認してください。 バイナリ配布は動的ローディングをサポートしているはずです。レプリケーションがすでに機能している必要があります。セクション17.1「レプリケーションの構成」 を参照してください。
複数のレプリケーションチャネルを構成しないでください。 準同期レプリケーションは、デフォルトのレプリケーションチャネルとのみ互換性があります。 セクション17.2.2「レプリケーションチャネル」を参照してください。
準同期レプリケーションをセットアップするには、次の指示を使用してください。 ここで説明する INSTALL PLUGIN
, SET GLOBAL
, STOP REPLICA | SLAVE
および START REPLICA | SLAVE
ステートメントには、REPLICATION_SLAVE_ADMIN
権限 (または非推奨の SUPER
権限) が必要です。
MySQL ディストリビューションには、ソース側とレプリカ側の準同期レプリケーションプラグインファイルが含まれます。
ソースサーバーまたはレプリカサーバーで使用できるようにするには、適切なプラグインライブラリファイルを MySQL プラグインディレクトリ (plugin_dir
システム変数で指定されたディレクトリ) に配置する必要があります。 必要に応じて、サーバーの起動時に plugin_dir
の値を設定してプラグインディレクトリの場所を構成します。
プラグインライブラリファイルのベース名は、ソース用の semisync_master
、およびレプリカ用の semisync_slave
です。 ファイル名の接尾辞は、プラットフォームごとに異なります (たとえば、.so
for Unix and Unix-like systems, .dll
for Windows)。
ソースプラグインライブラリファイルは、ソースサーバーのプラグインディレクトリに存在する必要があります。 レプリカプラグインライブラリファイルは、各レプリカサーバーのプラグインディレクトリに存在する必要があります。
プラグインをロードするには、ソースおよび準同期化する各レプリカで INSTALL PLUGIN
ステートメントを使用し、必要に応じてプラットフォームの .so
接尾辞を調整します。
ソースで、次のようにします:
INSTALL PLUGIN rpl_semi_sync_master SONAME 'semisync_master.so';
各レプリカで、次のようにします:
INSTALL PLUGIN rpl_semi_sync_slave SONAME 'semisync_slave.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
テーブルを照会してください。
プラグインのインストールを確認するには、INFORMATION_SCHEMA.PLUGINS
テーブルを調べるか、SHOW PLUGINS
ステートメントを使用します (セクション5.6.2「サーバープラグイン情報の取得」 を参照)。 例:
mysql> SELECT PLUGIN_NAME, PLUGIN_STATUS
FROM INFORMATION_SCHEMA.PLUGINS
WHERE PLUGIN_NAME LIKE '%semi%';
+----------------------+---------------+
| PLUGIN_NAME | PLUGIN_STATUS |
+----------------------+---------------+
| rpl_semi_sync_master | ACTIVE |
+----------------------+---------------+
プラグインの初期化に失敗した場合は、サーバーエラーログで診断メッセージを確認してください。
準同期レプリケーションプラグインがインストールされたあとは、デフォルトで無効になっています。 準同期レプリケーションを有効にするには、ソース側とレプリカ側の両方でプラグインを有効にする必要があります。 一方の側のみが有効な場合、レプリケーションは非同期です。
インストールされたプラグインが有効かどうかを制御するには、該当するシステム変数を設定します。 これらの変数は実行時に SET GLOBAL
を使用して、またはコマンド行またはオプションファイルでサーバー起動時に設定できます。
実行時には、次のソース側システム変数を使用できます:
SET GLOBAL rpl_semi_sync_master_enabled = {0|1};
SET GLOBAL rpl_semi_sync_master_timeout = N;
レプリカ側では、次のシステム変数を使用できます:
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 スレッドも起動 (すでに実行されている場合は最初に停止) して、レプリカをソースに接続し、準同期レプリカとして登録する必要があります:
STOP SLAVE IO_THREAD;
START SLAVE IO_THREAD;
Or from MySQL 8.0.22:
STOP REPLICA IO_THREAD;
START REPLICA 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