mysqld 是传统的 MySQL 服务器进程。要与 NDB 集群一起使用,mysqld 需要在构建时支持 NDB
存储引擎,就像从 https://dev.mysqlserver.cn/downloads/ 获取的预编译二进制文件中那样。如果您从源代码构建 MySQL,则必须使用 -DWITH_NDB=1
或(已弃用)-DWITH_NDBCLUSTER=1
选项调用 CMake,以包含对 NDB
的支持。
有关从源代码编译 NDB 集群的更多信息,请参见 第 25.3.1.4 节,“在 Linux 上从源代码构建 NDB 集群” 和 第 25.3.2.2 节,“在 Windows 上从源代码编译和安装 NDB 集群”。
(有关 mysqld 选项和变量的信息,除了本节中讨论的与 NDB 集群相关的选项和变量外,请参见 第 25.4.3.9 节,“MySQL 服务器用于 NDB 集群的选项和变量”。)
如果 mysqld 二进制文件已使用集群支持构建,则 NDBCLUSTER
存储引擎默认情况下仍然处于禁用状态。您可以使用以下两种可能的选项之一来启用此引擎
在启动 mysqld 时,在命令行上使用
--ndbcluster
作为启动选项。在您的
my.cnf
文件的[mysqld]
部分中插入一行,其中包含ndbcluster
。
验证服务器是否使用启用了 NDBCLUSTER
存储引擎运行的一种简单方法是在 MySQL 监视器 (mysql) 中发出 SHOW ENGINES
语句。您应该在 NDBCLUSTER
行中看到 YES
作为 Support
值。如果您在该行中看到 NO
,或者输出中没有显示该行,则表示您没有运行启用了 NDB
的 MySQL 版本。如果您在该行中看到 DISABLED
,则需要以两种方法中的一种启用它。
要读取集群配置数据,MySQL 服务器至少需要三条信息
MySQL 服务器自己的集群节点 ID
管理服务器的主机名或 IP 地址
它可以连接到管理服务器的 TCP/IP 端口号
节点 ID 可以动态分配,因此严格来说没有必要明确指定它们。
mysqld 参数 ndb-connectstring
用于指定连接字符串,可以在启动 mysqld 时在命令行上指定,也可以在 my.cnf
中指定。连接字符串包含管理服务器所在的主机名或 IP 地址,以及它使用的 TCP/IP 端口。
在以下示例中,ndb_mgmd.mysql.com
是管理服务器所在的服务器,管理服务器在端口 1186 上监听集群消息
$> mysqld --ndbcluster --ndb-connectstring=ndb_mgmd.mysql.com:1186
有关连接字符串的更多信息,请参见 第 25.4.3.3 节,“NDB 集群连接字符串”。
有了这些信息,MySQL 服务器就可以作为集群中的一个完整参与者。(我们通常将以这种方式运行的 mysqld 进程称为 SQL 节点。)它完全了解所有集群数据节点及其状态,并建立到所有数据节点的连接。在这种情况下,它能够使用任何数据节点作为事务协调器,并读取和更新节点数据。
您可以在 mysql 客户端中查看 MySQL 服务器是否已连接到集群,使用 SHOW PROCESSLIST
。如果 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
要参与 NDB 集群,mysqld 进程必须使用 两个 选项 --ndbcluster
和 --ndb-connectstring
(或它们在 my.cnf
中的等效项)启动。如果 mysqld 仅使用 --ndbcluster
选项启动,或者如果它无法联系集群,则无法使用 NDB
表,也不可能创建任何新表,无论存储引擎是什么。后一种限制是一种安全措施,旨在防止在 SQL 节点未连接到集群时创建与 NDB
表同名的表。如果您希望在 mysqld 进程未参与 NDB 集群时使用其他存储引擎创建表,则必须不使用 --ndbcluster
选项重新启动服务器。