mysqld は従来の MySQL サーバーのプロセスです。MySQL Cluster で使用するには、mysqld は https://dev.mysql.com/downloads/ から入手可能なプリコンパイル済みバイナリに含まれるため、NDB
ストレージエンジンのサポートを使用して構築する必要があります。ソースから MySQL を構築する場合は、-DWITH_NDBCLUSTER=1
オプションを付けて CMake を呼び出して、NDB
のサポートを含める必要があります。
ソースからの MySQL Cluster のコンパイルについての詳細は、セクション18.2.2.3「Linux でのソースからの MySQL Cluster のビルド」およびセクション18.2.3.2「Windows でのソースからの MySQL Cluster のコンパイルとインストール」を参照してください。
(このセクションで説明したものに加えて、MySQL Cluster に関連する mysqld のオプションおよび変数については、セクション18.3.4「MySQL Cluster 用の MySQL Server オプションおよび変数」を参照してください。)
Cluster サポートを使用して mysqld バイナリを構築した場合、NDBCLUSTER
ストレージエンジンはまだデフォルトで無効になっています。次の 2 つの指定可能なオプションのいずれかを使用すると、このエンジンを有効にできます。
mysqld を起動する際に、コマンド行で起動オプションとして
--ndbcluster
を使用します。my.cnf
ファイルの[mysqld]
セクションにndbcluster
を含む行を挿入します。
NDBCLUSTER
ストレージエンジンを有効にしてサーバーが実行されていることを確認する簡単な方法は、MySQL Monitor (mysql) で SHOW ENGINES
ステートメントを発行することです。NDBCLUSTER
の行に、Support
値として値 YES
が表示されます。この行に NO
が表示される場合や、このような行が出力に表示されない場合は、NDB
対応の MySQL バージョンが動作していません。この行に DISABLED
が表示される場合は、先ほど説明した 2 つの方法のいずれかを使用して有効にする必要があります。
クラスタ構成データを読み取るには、MySQL サーバーに少なくとも次の 3 つの情報が必要です。
MySQL サーバー自身のクラスタノード ID
管理サーバー (MGM ノード) のホスト名または IP アドレス
管理サーバーに接続できる TCP/IP ポートの数
ノード ID は動的に割り当てられるため、明示的に指定する必要は厳密にはありません。
接続文字列を指定するには、mysqld の起動時にコマンド行で、または my.cnf
内に、mysqld パラメータ ndb-connectstring
を使用します。接続文字列には、管理サーバーを検出できるホスト名または IP アドレス、および使用される TCP/IP ポートが含まれます。
次の例では、ndb_mgmd.mysql.com
は管理サーバーが存在するホストであり、管理サーバーはポート 1186 でクラスタメッセージを待機します。
shell> mysqld --ndbcluster --ndb-connectstring=ndb_mgmd.mysql.com:1186
接続文字列の詳細は、セクション18.3.2.3「MySQL Cluster の接続文字列」を参照してください。
この情報が指定されると、MySQL サーバーがクラスタへの完全な参加者となります。(この方法で実行している mysqld プロセスは、多くの場合 SQL ノードと呼んでいます。)それは、すべてのクラスタデータノードおよびそのステータスを完全に認識し、すべてのデータノードへの接続を確立します。この場合、任意のデータノードをトランザクションコーディネータとして使用し、ノードデータを読み取って更新できます。
mysql クライアントで SHOW PROCESSLIST
を使用すると、MySQL サーバーがクラスタに接続されているかどうかを確認できます。MySQL サーバーがクラスタに接続されていて、PROCESS
権限を持っている場合は、出力の最初の行が次のように表示されます。
mysql> SHOW PROCESSLIST \G
*************************** 1. row ***************************
Id: 1
User: system user
Host:
db:
Command: Daemon
Time: 1
State: Waiting for event from ndbcluster
Info: NULL
MySQL Cluster に参加するには、--ndbcluster
と --ndb-connectstring
の両方のオプション (my.cnf
の同等のオプション) を付けて、mysqld プロセスを起動する必要があります。--ndbcluster
オプションのみを付けて mysqld が起動された場合や、それがクラスタに接続できない場合は、ストレージエンジンに関係なく、NDB
テーブルを操作することも、新しいテーブルを作成することもできません。後者の制約は、SQL ノードがクラスタに接続されていない間に、NDB
テーブルと同じ名前を持つテーブルが作成されることを防ぐ目的の安全対策です。mysqld プロセスが MySQL Cluster に参加していない間に、別のストレージエンジンを使用してテーブルを作成する必要がある場合は、--ndbcluster
オプションを付けずに、サーバーを起動する必要があります。