原文:
docs.oracle.com/javase/tutorial/reallybigindex.html
原文:
dev.mysql.com/doc/refman/8.0/en/mysql-cluster-limitations-limits.html
25.2.7.2 NDB Cluster 与标准 MySQL 限制的限制和差异
在本节中,我们列出了在 NDB Cluster 中发现的与标准 MySQL 中发现的限制不同的限制,或者在标准 MySQL 中找不到的限制。
内存使用和恢复。 当数据插入到NDB
表中时,内存被消耗,当删除时不会自动恢复,而是遵循以下规则:
- 对
NDB
表的DELETE
语句使得先前被删除行使用的内存仅供同一表上的插入重用。然而,通过执行OPTIMIZE TABLE
可以使这个内存可供一般重用。 对集群进行滚动重启也会释放任何被删除行使用的内存。参见第 25.6.5 节,“执行 NDB Cluster 的滚动重启”。 - 对
NDB
表执行DROP TABLE
或TRUNCATE TABLE
操作会释放该表使用的内存,以便任何NDB
表重用,无论是同一表还是另一个NDB
表。 注意 请记住,TRUNCATE TABLE
会删除并重新创建表。请参阅第 15.1.37 节,“TRUNCATE TABLE 语句”。 - 集群配置所施加的限制。 存在一些硬限制,可配置,但集群中可用的主内存设置了限制。请参阅第 25.4.3 节,“NDB Cluster 配置文件”中的完整配置参数列表。大多数配置参数可以在线升级。这些硬限制包括:
- 数据库内存大小和索引内存大小(
DataMemory
和IndexMemory
)。DataMemory
被分配为 32KB 页面。每个DataMemory
页面被使用后,都会分配给特定的表;一旦分配,这个内存只能通过删除表来释放。 更多信息请参见第 25.4.3.6 节,“定义 NDB Cluster 数据节点”。 - 每个事务中可以执行的操作的最大数量是通过配置参数
MaxNoOfConcurrentOperations
和MaxNoOfLocalOperations
来设置的。 注意 批量加载、TRUNCATE TABLE
和ALTER TABLE
通过运行多个事务来处理为特殊情况,因此不受此限制的影响。 - 与表和索引相关的不同限制。例如,集群中有序索引的最大数量由
MaxNoOfOrderedIndexes
确定,每个表中有序索引的最大数量为 16。
- 数据库内存大小和索引内存大小(
- **节点和数据对象的最大限制。**以下限制适用于集群节点和元数据对象的数量:
- 数据节点的最大数量为 144。(在 NDB 7.6 及更早版本中,此数量为 48。) 数据节点的节点 ID 必须在 1 到 144 的范围内。 管理和 API 节点可以使用 1 到 255 范围内的节点 ID。
- NDB Cluster 中节点的总最大数量为 255。此数字包括所有 SQL 节点(MySQL 服务器)、API 节点(访问集群的应用程序除 MySQL 服务器之外)、数据节点和管理服务器。
- 在当前版本的 NDB Cluster 中,元数据对象的最大数量为 20320。此限制是硬编码的。
更多信息请参见第 25.2.7.11 节,“NDB Cluster 8.0 中解决的先前 NDB Cluster 问题”。
原文:
dev.mysql.com/doc/refman/8.0/en/mysql-cluster-limitations-transactions.html
25.2.7.3 NDB 集群中与事务处理相关的限制
在处理事务方面,NDB 集群存在一些限制。这些包括以下内容:
事务隔离级别。 NDBCLUSTER
存储引擎仅支持 READ COMMITTED
事务隔离级别。(例如,InnoDB
支持 READ COMMITTED
、READ UNCOMMITTED
、REPEATABLE READ
和 SERIALIZABLE
。)您应该记住,NDB
在每行基础上实现了 READ COMMITTED
;当读取请求到达存储该行的数据节点时,返回的是该时刻该行的最后提交版本。
未提交数据永远不会返回,但是当修改多行的事务与读取相同行的事务同时提交时,执行读取的事务可能会观察到这些行中的不同行的“之前”值、“之后”值或两者,这是因为给定行读取请求可以在另一个事务提交之前或之后处理。
为确保给定事务仅读取之前或之后的值,您可以使用 SELECT ... LOCK IN SHARE MODE
强制施加行锁。在这种情况下,锁将保持直到拥有事务提交。使用行锁还可能导致以下问题:
- 锁等待超时错误频率增加,并发性降低
- 由于读取需要提交阶段,事务处理开销增加
- 可能耗尽可用并发锁数量的可能性,这由
MaxNoOfConcurrentOperations
限制
NDB
在所有读取操作中使用 READ COMMITTED
,除非使用诸如 LOCK IN SHARE MODE
或 FOR UPDATE
等修饰符。LOCK IN SHARE MODE
导致使用共享行锁;FOR UPDATE
导致使用独占行锁。唯一键读取会被 NDB
自动升级锁以确保自洽读取;BLOB
读取也会为了一致性而使用额外的锁定。
参见 第 25.6.8.4 节,“NDB 集群备份故障排除”,了解 NDB 集群的事务隔离级别实现如何影响 NDB
数据库的备份和恢复。
事务和 BLOB 或 TEXT 列。 NDBCLUSTER
仅在 MySQL 可见的表中存储使用 MySQL 的任何BLOB
或TEXT
数据类型的列值的一部分;BLOB
或TEXT
的其余部分存储在一个不可访问的单独内部表中。这会引发两个相关问题,您在执行包含这些类型列的表上的SELECT
语句时应该注意:
对于从 NDB Cluster 表中的任何SELECT
:如果SELECT
包括BLOB
或TEXT
列,则READ COMMITTED
事务隔离级别会转换为带读锁的读取。这样做是为了保证一致性。
对于任何使用唯一键查找来检索使用任何BLOB
或TEXT
数据类型的列的SELECT
,并且在事务内执行的情况下,表上会持有一个共享读锁,直到事务要么提交要么中止。
对于使用索引或表扫描的查询,即使针对具有BLOB
或TEXT
列的NDB
表,也不会出现此问题。
例如,考虑以下CREATE TABLE
语句定义的表t
:
CREATE TABLE t (
a INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
b INT NOT NULL,
c INT NOT NULL,
d TEXT,
INDEX i(b),
UNIQUE KEY u(c)
) ENGINE = NDB,
对t
的以下查询会导致共享读锁,因为它使用了唯一键查找:
SELECT * FROM t WHERE c = 1;
然而,这里展示的四个查询中没有一个会导致共享读锁:
代码语言:javascript复制SELECT * FROM t WHERE b = 1;
SELECT * FROM t WHERE d = '1';
SELECT * FROM t;
SELECT b,c WHERE a = 1;
这是因为在这四个查询中,第一个使用索引扫描,第二和第三使用表扫描,而第四个虽然使用主键查找,但不检索任何BLOB
或TEXT
列的值。
通过避免检索BLOB
或TEXT
列的唯一键查找查询,或者在无法避免这类查询的情况下,尽快提交事务,可以帮助最小化共享读锁的问题。
唯一键查找和事务隔离。 使用隐藏索引表在NDB
中实现唯一索引,该表在内部维护。当使用唯一索引访问用户创建的NDB
表时,首先读取隐藏索引表以找到然后用于读取用户创建的表的主键。为了避免在这种双重读取操作期间修改索引,对在隐藏索引表中找到的行进行锁定。当更新用户创建的NDB
表中唯一索引引用的行时,由执行更新的事务对隐藏索引表施加排他锁。这意味着对同一(用户创建的)NDB
表的任何读取操作都必须等待更新完成。即使读取操作的事务级别为READ COMMITTED
,也是如此。
可以用于绕过潜在阻塞读取的一种解决方法是强制 SQL 节点在执行读取时忽略唯一索引。这可以通过在读取表时使用IGNORE INDEX
索引提示作为SELECT
语句的一部分来实现(参见 Section 10.9.4, “Index Hints”)。因为 MySQL 服务器为在NDB
中创建的每个唯一索引创建了一个阴影有序索引,这样可以读取有序索引,避免唯一索引访问锁定。结果读取与按主键提交的读取一样一致,在读取行时返回最后提交的值。
通过有序索引进行读取会较少有效地利用集群资源,并可能具有较高的延迟。
也可以通过查询范围而不是唯一值来避免使用唯一索引进行访问。
回滚。 没有部分事务,也没有部分事务回滚。重复键或类似错误会导致整个事务回滚。
这种行为与其他事务存储引擎(如InnoDB
)不同,后者可能会回滚单个语句。
事务和内存使用。 如本章其他地方所述,NDB Cluster 不擅长处理大型事务;最好执行一些包含少量操作的小事务,而不是尝试包含大量操作的单个大型事务。除其他考虑外,大型事务需要非常大量的内存。因此,一些 MySQL 语句的事务行为受到影响,如下列表所述:
- 在
NDB
表上使用TRUNCATE TABLE
时不具有事务性。如果TRUNCATE TABLE
未能清空表格,则必须重复运行直到成功。 -
DELETE FROM
(即使没有WHERE
子句)是事务性的。对于包含大量行的表,您可能会发现通过使用多个DELETE FROM ... LIMIT ...
语句来“分块”删除操作可以提高性能。如果您的目标是清空表格,则可能希望改用TRUNCATE TABLE
。 - LOAD DATA 语句。
LOAD DATA
在NDB
表上使用时不具有事务性。 重要提示 在执行LOAD DATA
语句时,NDB
引擎以不规则的间隔执行提交,以便更好地利用通信网络。无法提前知道这些提交何时发生。 - ALTER TABLE 和事务。 在作为
ALTER TABLE
的一部分复制NDB
表时,复制的创建是非事务性的。(无论如何,当复制被删除时,此操作会被回滚。)
事务和 COUNT() 函数。 在使用 NDB Cluster Replication 时,无法保证副本上COUNT()
函数的事务一致性。换句话说,在源上执行一系列语句(INSERT
、DELETE
或两者)以在单个事务中更改表中的行数时,在副本上执行SELECT COUNT(*) FROM *
table*
查询可能会产生中间结果。这是因为SELECT COUNT(...)
可能执行脏读,并不是NDB
存储引擎中的错误。(有关更多信息,请参见 Bug #31321。)
原文:
dev.mysql.com/doc/refman/8.0/en/mysql-cluster-limitations-error-handling.html
25.2.7.4 NDB 集群错误处理
启动、停止或重新启动节点可能会导致临时错误,导致一些事务失败。这些情况包括以下情况:
- 临时错误。 当首次启动节点时,可能会出现错误 1204 临时故障,分布发生变化和类似临时错误。
- 由于节点故障而导致的错误。 任何数据节点的停止或故障都可能导致多种不同的节点故障错误。(但在执行计划关闭集群时不应有中止事务。)
在这两种情况下,生成的任何错误都必须在应用程序内处理。这应该通过重试事务来完成。
另请参阅第 25.2.7.2 节,“NDB 集群与标准 MySQL 限制的限制和差异”。
译文:
dev.mysql.com/doc/refman/8.0/en/mysql-cluster-limitations-database-objects.html
25.2.7.5 NDB Cluster 中与数据库对象相关的限制
使用NDBCLUSTER
存储引擎时,一些数据库对象(如表和索引)具有不同的限制:
- 数据库对象数量。 单个 NDB Cluster 中所有
NDB
数据库对象的最大数量(包括数据库、表和索引)限制为 20320。 - 每个表的属性。 属于给定表的属性(即列和索引)的最大数量为 512。
- 每个键的属性。 每个键的最大属性数为 32。
- 行大小。 在 NDB 8.0 中,任何一行的最大允许大小为 30000 字节(比以前版本的 14000 字节增加)。
每个
BLOB
或TEXT
列对此总数贡献了 256 8 = 264 字节;这包括JSON
列。有关这些类型的更多信息,请参阅字符串类型存储要求以及 JSON 存储要求。 此外,NDB
表的固定宽度列的最大偏移量为 8188 字节;试图创建违反此限制的表将导致 NDB 错误 851 最大固定大小列偏移量超过。对于基于内存的列,您可以通过使用诸如VARCHAR
这样的可变宽度列类型或将列定义为COLUMN_FORMAT=DYNAMIC
来解决此限制;这对于存储在磁盘上的列不起作用。对于基于磁盘的列,您可以通过重新排列一个或多个表的基于磁盘的列,使得除了在用于创建表的CREATE TABLE
语句中最后定义的基于磁盘的列之外的所有列的组合宽度不超过 8188 字节,减去某些数据类型(如CHAR
或VARCHAR
)可能执行的任何可能的舍入;否则,必须使用内存存储来替代一个或多个有问题的列。 - 每个表的 BIT 列存储。 在给定的
NDB
表中,所有BIT
列的最大组合宽度为 4096。 - 固定列存储。 NDB Cluster 8.0 支持每个数据片段中
FIXED
列的最大 128 TB。
原文:
dev.mysql.com/doc/refman/8.0/en/mysql-cluster-limitations-unsupported.html
25.2.7.6 NDB Cluster 中不支持或缺失的功能
其他存储引擎支持的许多功能对NDB
表不受支持。在 NDB Cluster 中尝试使用这些功能之一不会导致错误本身; 但是,应用程序可能会出现错误,因为它们期望这些功能得到支持或强制执行。引用这些功能的语句,即使被NDB
有效忽略,也必须在语法和其他方面有效。
索引前缀。 对NDB
表不支持索引前缀。如果在语句中(如CREATE TABLE
、ALTER TABLE
或CREATE INDEX
)的索引规范中使用前缀,则NDB
不会创建前缀。
包含索引前缀的语句,并创建或修改NDB
表,仍必须在语法上有效。例如,以下语句始终失败,显示错误 1089 不正确的前缀键; 使用的键部分不是字符串,使用的长度比键部分长,或存储引擎不支持唯一前缀键,无论存储引擎如何:
CREATE TABLE t1 (
c1 INT NOT NULL,
*c2 VARCHAR(100),
INDEX i1 (c2(500))* );
这是由于 SQL 语法规则导致没有索引可以具有比自身更大的前缀。
保存点和回滚。 保存点和回滚到保存点被忽略,就像在MyISAM
中一样。
提交的持久性。 磁盘上没有持久的提交。提交是复制的,但不能保证在提交时日志被刷新到磁盘上。
复制。 不支持基于语句的复制。在设置集群复制时,请使用--binlog-format=ROW
(或--binlog-format=MIXED
)。有关更多信息,请参见第 25.7 节“NDB Cluster 复制”。
使用全局事务标识符(GTID)进行复制与 NDB Cluster 不兼容,并且在 NDB Cluster 8.0 中不受支持。在使用NDB
存储引擎时不要启用 GTID,因为这很可能会导致问题,甚至导致 NDB Cluster 复制失败。
NDB Cluster 不支持半同步复制。
生成列。 NDB
存储引擎不支持虚拟生成列上的索引。
与其他存储引擎一样,您可以在存储的生成列上创建索引,但您应该记住,NDB
使用DataMemory
来存储生成列以及IndexMemory
来存储索引。有关示例,请参见 NDB Cluster 中的 JSON 列和间接索引。
NDB Cluster 将存储的生成列的更改写入二进制日志,但不记录对虚拟列的更改。这不应影响 NDB Cluster 复制或NDB
与其他 MySQL 存储引擎之间的复制。
注意
有关在NDB
中处理事务限制的更多信息,请参见第 25.2.7.3 节“NDB Cluster 中与事务处理相关的限制”。
原文:
dev.mysql.com/doc/refman/8.0/en/mysql-cluster-limitations-performance.html
25.2.7.7 关于 NDB Cluster 性能的限制
以下性能问题特定于 NDB Cluster 或在 NDB Cluster 中特别明显:
- 范围扫描。 由于对
NDB
存储引擎的顺序访问,存在查询性能问题;相对于MyISAM
或InnoDB
,进行许多范围扫描的成本也更高。 - 范围内记录的可靠性。
Records in range
统计信息可用,但尚未完全测试或官方支持。这可能导致某些情况下的非最佳查询计划。如有必要,您可以使用USE INDEX
或FORCE INDEX
来更改执行计划。有关如何执行此操作的更多信息,请参见第 10.9.4 节,“索引提示”。 - 唯一哈希索引。 使用
USING HASH
创建的唯一哈希索引,如果键的一部分是NULL
,则无法用于访问表。
原文:
dev.mysql.com/doc/refman/8.0/en/mysql-cluster-limitations-exclusive-to-cluster.html
25.2.7.8 NDB Cluster 专有问题
以下是特定于NDB
存储引擎的限制:
- 机器架构。 集群中使用的所有机器必须具有相同的架构。也就是说,托管节点的所有机器必须是大端或小端,不能混合使用。例如,不能在运行在 PowerPC 上的管理节点上指导在 x86 机器上运行的数据节点。这个限制不适用于简单运行mysql或其他可能访问集群 SQL 节点的客户端的机器。
- 二进制日志。 NDB Cluster 在二进制日志方面具有以下限制或限制:
- NDB Cluster 无法为具有
BLOB
列但没有主键的表生成二进制日志。 - 只有以下模式操作会记录在集群二进制日志中,该日志不在执行语句的mysqld上:
-
CREATE TABLE
-
ALTER TABLE
-
DROP TABLE
-
CREATE DATABASE
/CREATE SCHEMA
-
DROP DATABASE
/DROP SCHEMA
-
CREATE TABLESPACE
-
ALTER TABLESPACE
-
DROP TABLESPACE
-
CREATE LOGFILE GROUP
-
ALTER LOGFILE GROUP
-
DROP LOGFILE GROUP
-
- NDB Cluster 无法为具有
- 模式操作。 在任何数据节点重新启动时,模式操作(DDL 语句)将被拒绝。在执行在线升级或降级时也不支持模式操作。
- 分片副本数量。 由
NoOfReplicas
数据节点配置参数确定的分片副本数量是 NDB 集群存储的所有数据的副本数量。将此参数设置为 1 表示只有一个副本;在这种情况下,不提供冗余,且数据节点丢失会导致数据丢失。为了保证冗余性,即使数据节点失败也能保留数据,将此参数设置为 2,这是生产环境中的默认和推荐值。 将NoOfReplicas
设置为大于 2 的值是支持的(最多为 4),但不必要以防止数据丢失。
请参阅第 25.2.7.10 节,“关于多个 NDB 集群节点的限制”。
原文:
dev.mysql.com/doc/refman/8.0/en/mysql-cluster-limitations-disk-data.html
25.2.7.9 与 NDB 集群磁盘数据存储相关的限制
磁盘数据对象的最大值和最小值。 磁盘数据对象受以下最大值和最小值的限制:
- 表空间的最大数量:2³² (4294967296)
- 每个表空间的数据文件的最大数量:2¹⁶ (65536)
- 表空间数据文件的区段的最小和最大可能大小分别为 32K 和 2G。有关更多信息,请参见第 15.1.21 节,“CREATE TABLESPACE Statement”。
此外,在使用 NDB 磁盘数据表时,您应该注意以下关于数据文件和区段的问题:
- 数据文件使用
DataMemory
。使用方式与内存数据相同。 - 数据文件使用文件描述符。重要的是要记住,数据文件始终处于打开状态,这意味着文件描述符始终在使用中,不能用于其他系统任务。
- 区段需要足够的
DiskPageBufferMemory
;您必须为此参数保留足够的空间,以考虑所有区段使用的所有内存(区段数量乘以区段大小)。
磁盘数据表和无磁盘模式。 在无磁盘模式下运行集群时,不支持使用磁盘数据表。
原文:
dev.mysql.com/doc/refman/8.0/en/mysql-cluster-limitations-multiple-nodes.html
25.2.7.10 与多个 NDB Cluster 节点相关的限制
多个 SQL 节点。 以下是关于将多个 MySQL 服务器用作 NDB Cluster SQL 节点的问题,这些问题特定于NDBCLUSTER
存储引擎:
- 存储程序不分布。 存储过程、存储函数、触发器和定时事件都受到使用
NDB
存储引擎的表的支持,但这些内容不会在充当集群 SQL 节点的 MySQL 服务器之间自动传播,必须在每个 SQL 节点上单独重新创建。请参阅 NDB Cluster 中的存储例程和触发器。 - 没有分布式表锁。
LOCK TABLES
语句或GET_LOCK()
调用仅对发出锁的 SQL 节点有效;集群中的其他 SQL 节点不会“看到”此锁。这适用于锁定表作为其操作的一部分的任何语句发出的锁。 (请参阅下一项以获取示例。) 在NDBCLUSTER
中实现表锁可以在 API 应用程序中完成,并确保所有应用程序都通过将LockMode
设置为LM_Read
或LM_Exclusive
来启动。有关如何执行此操作的更多信息,请参阅NDB Cluster API Guide中NdbOperation::getLockHandle()
的描述。 - ALTER TABLE 操作。 在运行多个 MySQL 服务器(SQL 节点)时,
ALTER TABLE
在执行时不会完全锁定。(正如前一项所讨论的,NDB Cluster 不支持分布式表锁。)
多个管理节点。 在使用多个管理服务器时:
- 如果任何管理服务器在同一主机上运行,则必须在连接字符串中为节点分配显式 ID,因为在同一主机上的多个管理服务器之间不会自动分配节点 ID。如果每个管理服务器位于不同的主机上,则不需要此操作。
- 当管理服务器启动时,首先检查同一 NDB 集群中是否有其他管理服务器,并在成功连接到其他管理服务器后使用其配置数据。这意味着管理服务器
--reload
和--initial
启动选项将被忽略,除非管理服务器是唯一运行的。这也意味着,在对具有多个管理节点的 NDB 集群执行滚动重启时,只有当管理服务器是该 NDB 集群中唯一运行的管理服务器时,管理服务器才会读取自己的配置文件。有关更多信息,请参见第 25.6.5 节,“执行 NDB 集群的滚动重启”。
多个网络地址。 每个数据节点的多个网络地址不受支持。使用这些可能会导致问题:在数据节点故障的情况下,SQL 节点等待确认数据节点已关闭,但永远不会收到确认,因为到该数据节点的另一条路线仍然打开。这可能会导致集群无法运行。
注意
可以为单个数据节点使用多个网络硬件接口(例如以太网卡),但这些接口必须绑定到相同的地址。这也意味着在config.ini
文件中每个连接中不可能使用多个[tcp]
部分。有关更多信息,请参见第 25.4.3.10 节,“NDB 集群 TCP/IP 连接”。
原文:
dev.mysql.com/doc/refman/8.0/en/mysql-cluster-limitations-resolved.html
25.2.7.11 NDB Cluster 8.0 中已解决的以前的 NDB Cluster 问题
以前版本的 NDB Cluster 中存在的许多限制和相关问题已在 NDB 8.0 中得到解决。以下简要描述了这些问题:
- 数据库和表名。 在 NDB 7.6 及更早版本中,使用
NDB
存储引擎时,数据库名和表名的最大允许长度均为 63 字节,使用超过此限制的数据库名或表名的语句将失败并显示适当的错误。在 NDB 8.0 中,此限制被取消;NDB
数据库和表的标识符现在可以使用最多 64 个字符,与其他 MySQL 数据库和表名一样。 - IPv6 支持。 在 NDB 8.0.22 之前,NDB Cluster 中节点之间连接所使用的所有网络地址必须使用或解析为 IPv4 地址。从 NDB 8.0.22 开始,
NDB
支持所有类型的集群节点和使用 NDB API 或 MGM API 的应用程序的 IPv6 地址。 欲了解更多信息,请参阅升级或降级 NDB Cluster 时已知的问题。 - 多线程副本。 在 NDB 8.0.32 及更早版本中,不支持 NDB Cluster 复制的多线程副本。此限制在 NDB Cluster 8.0.33 中解除。 欲了解更多信息,请参阅第 25.7.3 节,“NDB Cluster 复制中已知的问题”。
25.3 NDB Cluster 安装
原文:
dev.mysql.com/doc/refman/8.0/en/mysql-cluster-installation.html
25.3.1 在 Linux 上安装 NDB Cluster
25.3.2 在 Windows 上安装 NDB Cluster
25.3.3 NDB Cluster 的初始配置
25.3.4 NDB Cluster 的初始启动
25.3.5 带有表和数据的 NDB Cluster 示例
25.3.6 NDB Cluster 的安全关闭和重启
25.3.7 NDB Cluster 的升级和降级
25.3.8 NDB Cluster 自动安装程序(不再支持)
本节描述了规划、安装、配置和运行 NDB Cluster 的基础知识。虽然第 25.4 节,“NDB Cluster 的配置”中的示例提供了更深入的关于各种集群选项和配置的信息,但遵循这里概述的指导方针和程序的结果应该是一个符合最低可用性和数据保护要求的可用 NDB Cluster。
有关在不同版本之间升级或降级 NDB Cluster 的信息,请参阅第 25.3.7 节,“NDB Cluster 的升级和降级”。
本节涵盖了硬件和软件要求;网络问题;NDB Cluster 的安装;基本配置问题;启动、停止和重启集群;加载示例数据库;以及执行查询。
假设。 以下部分对集群的物理和网络配置做出了一些假设。这些假设将在接下来的几段中讨论。
集群节点和主机计算机。 集群由四个节点组成,每个节点位于单独的主机计算机上,并且每个节点在典型以太网网络上有一个固定的网络地址,如下所示:
表 25.5 示例集群中节点的网络地址
节点 | IP 地址 |
---|---|
管理节点 (mgmd) | 198.51.100.10 |
SQL 节点 (mysqld) | 198.51.100.20 |
数据节点 “A” (ndbd) | 198.51.100.30 |
数据节点 “B” (ndbd) | 198.51.100.40 |
这个设置也显示在以下图表中:
图 25.4 NDB Cluster 多计算机设置
网络寻址。 为了简单(和可靠性)起见,这个How-To只使用数字 IP 地址。但是,如果您的网络上有 DNS 解析,可以在配置 Cluster 时使用主机名代替 IP 地址。或者,您可以使用hosts
文件(通常是 Linux 和其他类 Unix 操作系统的/etc/hosts
,Windows 上是C:WINDOWSsystem32driversetchosts
,或者您操作系统的等效文件)来提供主机查找的方法(如果可用)。
从 NDB 8.0.22 开始,NDB
支持所有 NDB Cluster 节点之间的 IPv6 连接。
在运行 NDB 8.0.22 及更高版本时,Linux 平台上已知的问题是操作系统内核需要提供 IPv6 支持,即使没有使用 IPv6 地址。这个问题在 NDB 8.0.34 及更高版本中已修复(Bug #33324817,Bug #33870642)。
如果您正在使用受影响的版本并希望在系统上禁用对 IPv6 的支持(因为您不打算为 NDB Cluster 节点使用任何 IPv6 地址),请在系统启动后执行以下操作:
代码语言:javascript复制$> sysctl -w net.ipv6.conf.all.disable_ipv6=1
$> sysctl -w net.ipv6.conf.default.disable_ipv6=1
(或者,您可以将相应的行添加到/etc/sysctl.conf
中。)在 NDB Cluster 8.0.34 及更高版本中,前述操作是不必要的,如果您不想或不需要使用 IPv6 支持,可以简单地在 Linux 内核中禁用 IPv6 支持。
在 NDB 8.0.21 及更早版本中,用于与数据和管理节点进行连接的所有网络地址必须使用 IPv4 或可解析为 IPv4,包括 SQL 节点用于联系其他节点的地址。
潜在的主机文件问题。 当尝试为 Cluster 节点使用主机名时,一个常见问题是由于某些操作系统(包括一些 Linux 发行版)在安装过程中设置系统自身主机名的方式而引起的。考虑两台主机名为ndb1
和ndb2
的机器,都在cluster
网络域中。Red Hat Linux(包括一些衍生版如 CentOS 和 Fedora)将以下条目放在这些机器的/etc/hosts
文件中:
# ndb1 /etc/hosts:
127.0.0.1 ndb1.cluster ndb1 localhost.localdomain localhost
代码语言:javascript复制# ndb2 /etc/hosts:
127.0.0.1 ndb2.cluster ndb2 localhost.localdomain localhost
SUSE Linux(包括 OpenSUSE)将这些条目放在机器的/etc/hosts
文件中:
# ndb1 /etc/hosts:
127.0.0.1 localhost
127.0.0.2 ndb1.cluster ndb1
代码语言:javascript复制# ndb2 /etc/hosts:
127.0.0.1 localhost
127.0.0.2 ndb2.cluster ndb2
在这两种情况下,ndb1
将ndb1.cluster
路由到一个环回 IP 地址,但从 DNS 获取ndb2.cluster
的公共 IP 地址,而ndb2
将ndb2.cluster
路由到一个环回地址,并为ndb1.cluster
获取公共地址。结果是每个数据节点连接到管理服务器,但无法知道其他数据节点何时连接,因此数据节点在启动时似乎挂起。
注意
你不能在config.ini
中混合使用localhost
和其他主机名或 IP 地址。在这种情况下的解决方案(除非对所有config.ini
HostName
条目使用 IP 地址)是从/etc/hosts
中删除完全合格的主机名,并在config.ini
中为所有集群主机使用这些主机名。
主机计算机类型。 在我们的安装方案中,每台主机计算机都是一台基于英特尔的台式个人电脑,运行着已安装到磁盘中的支持的操作系统,以标准配置运行,并且不运行任何不必要的服务。具备标准 TCP/IP 网络功能的核心操作系统应该足够了。另外为了简单起见,我们还假设所有主机上的文件系统设置是相同的。如果不是这样,请相应调整这些说明。
网络硬件。 每台机器上都安装了标准的 100 Mbps 或 1 千兆以太网卡,以及适当的卡驱动程序,并且所有四台主机通过标准的以太网网络设备(如交换机)连接在一起。(所有机器应使用具有相同吞吐量的网络卡。也就是说,集群中的所有四台机器应该有 100 Mbps 网卡 或者 所有四台机器应该有 1 Gbps 网卡。)NDB 集群在 100 Mbps 网络中工作;然而,千兆以太网提供更好的性能。
重要提示
NDB 集群 不 适用于吞吐量低于 100 Mbps 或遇到高延迟的网络。因此(以及其他原因),尝试在互联网等广域网上运行 NDB 集群不太可能成功,并且不受生产支持。
示例数据。 我们使用可从 MySQL 网站下载的world
数据库(请参阅dev.mysql.com/doc/index-other.html
)。我们假设每台机器都有足够的内存来运行操作系统、所需的 NDB 集群进程,并且(在数据节点上)存储数据库。
有关安装 MySQL 的一般信息,请参见第二章,安装 MySQL。有关在 Linux 和其他类 Unix 操作系统上安装 NDB 集群的信息,请参见第 25.3.1 节,“在 Linux 上安装 NDB 集群”。有关在 Windows 操作系统上安装 NDB 集群的信息,请参见第 25.3.2 节,“在 Windows 上安装 NDB 集群”。
有关 NDB 集群硬件、软件和网络要求的一般信息,请参见第 25.2.3 节,“NDB 集群硬件、软件和网络要求”。
25.3.1 在 Linux 上安装 NDB 集群
原文:
dev.mysql.com/doc/refman/8.0/en/mysql-cluster-install-linux.html
25.3.1.1 在 Linux 上安装 NDB 集群二进制发行版
25.3.1.2 从 RPM 安装 NDB 集群
25.3.1.3 使用 .deb 文件安装 NDB 集群
25.3.1.4 在 Linux 上从源代码构建 NDB 集群
25.3.1.5 使用 Docker 容器部署 NDB 集群
本节涵盖了在 Linux 和其他类 Unix 操作系统上安装 NDB 集群的方法。虽然接下来的几节涉及 Linux 操作系统,但那里给出的说明和步骤应该很容易适应其他支持的类 Unix 平台。有关 Windows 系统的手动安装和设置说明,请参阅 第 25.3.2 节“在 Windows 上安装 NDB 集群”。
每台 NDB 集群主机必须安装正确的可执行程序。运行 SQL 节点的主机必须安装 MySQL 服务器二进制文件(mysqld)。管理节点需要管理服务器守护程序(ndb_mgmd);数据节点需要数据节点守护程序(ndbd或 ndbmtd)。在管理节点主机和数据节点主机上安装 MySQL 服务器二进制文件并非必需。建议在管理服务器主机上也安装管理客户端(ndb_mgm)。
在 Linux 上安装 NDB 集群可以使用来自 Oracle 的预编译二进制文件(以 .tar.gz 存档文件下载)、RPM 包(也可从 Oracle 获取)或源代码。这三种安装方法在接下来的章节中都有描述。
无论使用何种方法,在安装 NDB 集群二进制文件后,仍然需要为所有集群节点创建配置文件,然后才能启动集群。请参阅 第 25.3.3 节“NDB 集群的初始配置”。
原文:
dev.mysql.com/doc/refman/8.0/en/mysql-cluster-install-linux-binary.html
25.3.1.1 在 Linux 上安装 NDB 集群二进制发行版
本节涵盖了从 Oracle 提供的预编译二进制文件中为每种类型的集群节点安装正确可执行文件所需的步骤。
对于使用预编译二进制文件设置集群,每个集群主机安装过程的第一步是从 NDB 集群下载页面 下载二进制存档。 (对于最新的 64 位 NDB 8.0 版本,这是 mysql-cluster-gpl-8.0.34-linux-glibc2.12-x86_64.tar.gz
。)我们假设您已将此文件放置在每台机器的 /var/tmp
目录中。
如果需要自定义二进制文件,请参见 第 2.8.5 节,“使用开发源码树安装 MySQL”。
注意
完成安装后,不要立即启动任何二进制文件。我们将在配置节点后向您展示如何操作(参见 第 25.3.3 节,“NDB 集群的初始配置”)。
SQL 节点。 在每台指定为托管 SQL 节点的机器上,以系统 root
用户身份执行以下步骤:
检查您的 /etc/passwd
和 /etc/group
文件(或使用操作系统提供的用于管理用户和组的工具),查看系统上是否已经存在 mysql
组和 mysql
用户。 一些操作系统发行版在操作系统安装过程中会创建这些。 如果它们尚不存在,请创建一个新的 mysql
用户组,然后将 mysql
用户添加到此组中:
$> groupadd mysql
$> useradd -g mysql -s /bin/false mysql
useradd 和 groupadd 的语法在不同版本的 Unix 上可能略有不同,或者可能有不同的名称,如 adduser 和 addgroup。
切换到包含下载文件的目录,解压缩存档,并创建一个名为 mysql
的符号链接指向 mysql
目录。
注意
实际文件和目录名称根据 NDB 集群版本号而异。
代码语言:javascript复制$> cd /var/tmp
$> tar -C /usr/local -xzvf mysql-cluster-gpl-8.0.34-linux-glibc2.12-x86_64.tar.gz
$> ln -s /usr/local/mysql-cluster-gpl-8.0.34-linux-glibc2.12-x86_64 /usr/local/mysql
切换到 mysql
目录,并使用 mysqld --initialize
来设置系统数据库,如下所示:
$> cd mysql
$> mysqld --initialize
这为 MySQL root
帐户生成一个随机密码。如果您不希望生成随机密码,可以将--initialize-insecure
选项替换为--initialize
。无论哪种情况,您都应在执行此步骤之前查看 Section 2.9.1, “Initializing the Data Directory”,以获取更多信息。另请参阅 Section 6.4.2, “mysql_secure_installation — Improve MySQL Installation Security”。
为 MySQL 服务器和数据目录设置必要的权限:
代码语言:javascript复制$> chown -R root .
$> chown -R mysql data
$> chgrp -R mysql .
将 MySQL 启动脚本复制到适当的目录,使其可执行,并设置在操作系统启动时启动:
代码语言:javascript复制$> cp support-files/mysql.server /etc/rc.d/init.d/
$> chmod x /etc/rc.d/init.d/mysql.server
$> chkconfig --add mysql.server
(启动脚本目录可能因操作系统和版本而异,例如,在某些 Linux 发行版中,它是/etc/init.d
。)
在这里,我们使用 Red Hat 的chkconfig来创建到启动脚本的链接;在您的平台上使用适当的方式,如 Debian 上的update-rc.d。
请记住,上述步骤必须在每台要放置 SQL 节点的机器上重复执行。
数据节点。 数据节点的安装不需要mysqld二进制文件。只需要 NDB Cluster 数据节点可执行文件ndbd(单线程)或ndbmtd")(多线程)。这些二进制文件也可以在.tar.gz
存档中找到。同样,我们假设您已将此存档放置在/var/tmp
中。
作为系统root
(即在使用sudo、su root或您系统的等效方式暂时假���系统管理员帐户特权之后),执行以下步骤在数据节点主机上安装数据节点二进制文件:
将位置更改为/var/tmp
目录,并从存档中提取ndbd和ndbmtd")二进制文件到适当的目录,如/usr/local/bin
:
$> cd /var/tmp
$> tar -zxvf mysql-cluster-gpl-8.0.34-linux-glibc2.12-x86_64.tar.gz
$> cd mysql-cluster-gpl-8.0.34-linux-glibc2.12-x86_64
$> cp bin/ndbd /usr/local/bin/ndbd
$> cp bin/ndbmtd /usr/local/bin/ndbmtd
(一旦ndb_mgm和ndb_mgmd已复制到可执行文件目录中,您可以安全地删除从/var/tmp
解压下载的存档创建的目录及其包含的文件。)
将位置更改为您复制文件的目录,然后使这两个文件都可执行:
代码语言:javascript复制$> cd /usr/local/bin
$> chmod x ndb*
上述步骤应在每个数据节点主机上重复执行。
虽然只需要运行一个数据节点可执行文件来运行 NDB 集群数据节点,但我们在前面的说明中已经向您展示了如何安装ndbd和ndbmtd。我们建议您在安装或升级 NDB 集群时执行此操作,即使您打算只使用其中一个,因为这样可以节省时间和麻烦,以防以后决定从一个切换到另一个。
注意
每台托管数据节点的机器上的数据目录是/usr/local/mysql/data
。在配置管理节点时,这些信息至关重要。(参见第 25.3.3 节,“NDB 集群的初始配置”。)
管理节点。 安装管理节点不需要mysqld二进制文件。只需要 NDB 集群管理服务器(ndb_mgmd);您很可能也想安装管理客户端(ndb_mgm)。这两个二进制文件也可以在.tar.gz
存档文件中找到。同样,我们假设您已将此存档文件放在/var/tmp
中。
作为系统root
,执行以下步骤在管理节点主机上安装ndb_mgmd和ndb_mgm:
切换到/var/tmp
目录,并将ndb_mgm和ndb_mgmd从存档中提取到一个合适的目录,如/usr/local/bin
:
$> cd /var/tmp
$> tar -zxvf mysql-cluster-gpl-8.0.34-linux-glibc2.12-x86_64.tar.gz
$> cd mysql-cluster-gpl-8.0.34-linux-glibc2.12-x86_64
$> cp bin/ndb_mgm* /usr/local/bin
(一旦ndb_mgm和ndb_mgmd已被复制到可执行文件目录中,您可以安全地删除从/var/tmp
解压下载存档文件时创建的目录及其包含的文件。)
切换到您复制文件的目录,然后使这两个文件都可执行:
代码语言:javascript复制$> cd /usr/local/bin
$> chmod x ndb_mgm*
在第 25.3.3 节,“NDB 集群的初始配置”中,我们为示例 NDB 集群中的所有节点创建配置文件。
原文:
dev.mysql.com/doc/refman/8.0/en/mysql-cluster-install-linux-rpm.html
25.3.1.2 从 RPM 安装 NDB Cluster
本节涵盖了使用 Oracle 提供的 RPM 软件包安装每种类型的 NDB Cluster 8.0 节点所需的正确可执行文件的步骤。
作为本节描述的方法的替代方案,Oracle 为 NDB Cluster 提供了与许多常见 Linux 发行版兼容的 MySQL 存储库。列出了两个存储库,适用于基于 RPM 的发行版:
- 对于使用yum或dnf的发行版,您可以使用 MySQL Yum Repository for NDB Cluster。有关说明和其他信息,请参见使用 Yum 存储库安装 MySQL NDB Cluster。
- 对于 SLES,您可以使用 MySQL SLES Repository for NDB Cluster。有关说明和其他信息,请参见使用 SLES 存储库安装 MySQL NDB Cluster。
32 位和 64 位 Linux 平台均提供 RPM。这些 RPM 的文件名遵循以下模式:
代码语言:javascript复制mysql-cluster-community-data-node-8.0.34-1.el7.x86_64.rpm
mysql-cluster-*license*-*component*-*ver*-*rev*.*distro*.*arch*.rpm
*license*:= {commercial | community}
*component*: {management-server | data-node | server | client | *other—see text*}
*ver*: *major*.*minor*.*release*
*rev*: *major*[.*minor*]
*distro*: {el6 | el7 | sles12}
*arch*: {i686 | x86_64}
*license
*指示 RPM 是否属于 NDB Cluster 的商业版或社区版。在本节的其余部分中,我们假设您正在安装社区版。
*component
*的可能值及其描述可在以下表中找到:
表 25.6 NDB Cluster RPM 分发的组件
组件 | 描述 |
---|---|
auto-installer (已弃用) | NDB Cluster 自动安装程序;请参见第 25.3.8 节,“NDB Cluster 自动安装程序(不再支持)”"),了解用法 |
client | MySQL 和NDB客户端程序;包括mysql客户端,ndb_mgm客户端和其他客户端工具 |
common | MySQL 服务器所需的字符集和错误消息信息 |
data-node | ndbd和ndbmtd")数据节点二进制文件 |
devel | MySQL 客户端开发所需的头文件和库文件 |
embedded | 嵌入式 MySQL 服务器 |
embedded-compat | 向后兼容的嵌入式 MySQL 服务器 |
embedded-devel | 用于开发嵌入式 MySQL 应用程序的头文件和库文件 |
java | 用于支持 ClusterJ 应用程序的 JAR 文件 |
libs | MySQL 客户端库 |
libs-compat | 向后兼容的 MySQL 客户端库 |
management-server | NDB 集群管理服务器 (ndb_mgmd) |
memcached | 支持 ndbmemcache 所需的文件 |
minimal-debuginfo | 用于 package server-minimal 的调试信息;在开发使用此 package 的应用程序或调试此 package 时非常有用 |
ndbclient | 用于运行 NDB API 和 MGM API 应用程序的 NDB 客户端库 (libndbclient) |
ndbclient-devel | 用于开发 NDB API 和 MGM API 应用程序所需的头文件和其他文件 |
nodejs | 用于设置 NDB 集群的 Node.JS 支持所需的文件 |
server | 包含 NDB 存储引擎支持的 MySQL 服务器 (mysqld),以及相关的 MySQL 服务器程序 |
server-minimal | 用于 NDB 和相关工具的 MySQL 服务器的最小安装 |
test | mysqltest,其他 MySQL 测试程序和支持文件 |
组件 | 描述 |
也可以获得给定平台和架构的所有 NDB 集群 RPM 的单个捆绑包(.tar
文件)。此文件的名称遵循此处显示的模式:
mysql-cluster-*license*-*ver*-*rev*.*distro*.*arch*.rpm-bundle.tar
您可以使用 tar 或您喜欢的提取存档工具从此文件中提取单独的 RPM 文件。
安装三种主要类型的 NDB 集群节点所需的组件列在以下列表中:
- 管理节点:
management-server
- 数据节点:
data-node
- SQL 节点:
server
和common
另外,应安装 client
RPM 以在至少一个管理节点上提供 ndb_mgm 管理客户端。您可能还希望在 SQL 节点上安装它,以便在这些节点上提供 mysql 和其他 MySQL 客户端程序。我们稍后在本节讨论按类型安装节点。
ver
表示以 8.0.x
格式显示的三部分 NDB
存储引擎版本号,示例中显示为 8.0.34
。rev
提供了以 major
.minor
格式的 RPM 修订号。在本节中显示的示例中,我们使用 1.1
作为此值。
distro
(Linux 发行版)是 rhel5
(Oracle Linux 5,Red Hat Enterprise Linux 4 和 5),el6
(Oracle Linux 6,Red Hat Enterprise Linux 6),el7
(Oracle Linux 7,Red Hat Enterprise Linux 7)或 sles12
(SUSE Enterprise Linux 12)之一。在本节的示例中,我们假设主机运行 Oracle Linux 7,Red Hat Enterprise Linux 7 或等效的 (el7
)。
arch
对于 32 位 RPMs 是 i686
,对于 64 位版本是 x86_64
。在这里展示的示例中,我们假设是 64 位平台。
RPM 文件名中的 NDB 集群版本号(此处显示为8.0.34
)可能根据您实际使用的版本而变化。非常重要的是要安装的所有集群 RPM 具有相同的版本号。架构也应适合要安装 RPM 的机器;特别要记住,64 位 RPM(x86_64
)不能与 32 位操作系统一起使用(对于后者使用i686
)。
数据节点。 在要托管 NDB 集群数据节点的计算机上,只需安装data-node
RPM。为此,将此 RPM 复制到数据节点主机,并以系统 root 用户身份运行以下命令,根据需要替换从 MySQL 网站下载的 RPM 的名称:
$> rpm -Uhv mysql-cluster-community-data-node-8.0.34-1.el7.x86_64.rpm
这将在/usr/sbin
中安装ndbd和ndbmtd数据节点二进制文件。这两者中的任何一个都可以用于在此主机上运行数据节点进程。
SQL 节点。 将server
和common
RPM 复制到每台用于托管 NDB 集群 SQL 节点的机器上(server
需要common
)。以系统 root 用户身份执行以下命令安装server
RPM,根据需要替换从 MySQL 网站下载的 RPM 的名称:
$> rpm -Uhv mysql-cluster-community-server-8.0.34-1.el7.x86_64.rpm
这将在/usr/sbin
目录中安装 MySQL 服务器二进制文件(mysqld),支持NDB
存储引擎。它还安装了所有必需的 MySQL 服务器支持文件和有用的 MySQL 服务器程序,包括mysql.server和mysqld_safe启动脚本(分别位于/usr/share/mysql
和/usr/bin
)。RPM 安装程序应自动处理一般配置问题(例如自动创建mysql
用户和组,如果需要)。
重要
您必须使用为 NDB 集群发布的这些 RPM 版本;为标准 MySQL 服务器发布的版本不支持NDB
存储引擎。
要管理 SQL 节点(MySQL 服务器),您还应安装client
RPM,如下所示:
$> rpm -Uhv mysql-cluster-community-client-8.0.34-1.el7.x86_64.rpm
这将安装mysql客户端和其他 MySQL 客户端程序,如mysqladmin和mysqldump到/usr/bin
。
管理节点。 要安装 NDB 集群管理服务器,只需使用management-server
RPM。将此 RPM 复制到打算托管管理节点的计算机上,然后以系统根用户身份运行以下命令进行安装(根据需要替换从 MySQL 网站下载的management-server
RPM 的名称):
$> rpm -Uhv mysql-cluster-community-management-server-8.0.34-1.el7.x86_64.rpm
此 RPM 在/usr/sbin
目录中安装管理服务器二进制文件ndb_mgmd。虽然这是实际运行管理节点所需的唯一程序,但也最好同时拥有ndb_mgm NDB 集群管理客户端。您可以通过按照先前描述的方式安装client
RPM 来获取此程序,以及其他NDB
客户端程序,如ndb_desc和ndb_config。
有关使用 Oracle 提供的 RPM 包在 Linux 上安装 MySQL 的一般信息,请参阅 Section 2.5.4, “Installing MySQL on Linux Using RPM Packages from Oracle”。
从 RPM 安装后,仍然需要配置集群;请参阅 Section 25.3.3, “Initial Configuration of NDB Cluster”,获取相关信息。
非常重要的是要安装的所有集群 RPM 具有相同的版本号。*架构
*指定也应适合要安装 RPM 的计算机;特别要记住 64 位 RPM 不能与 32 位操作系统一起使用。
数据节点。 在打算托管集群数据节点的计算机上,只需安装server
RPM。为此,将此 RPM 复制到数据节点主机上,并以系统根用户身份运行以下命令,根据需要替换从 MySQL 网站下载的 RPM 的名称:
$> rpm -Uhv MySQL-Cluster-server-gpl-8.0.34-1.sles11.i386.rpm
尽管这会安装所有 NDB 集群二进制文件,但实际上只需要运行 NDB 集群数据节点的程序ndbd或ndbmtd")(都在/usr/sbin
中)。
SQL 节点。 在每台用于托管集群 SQL 节点的计算机上,以系统根用户身份执行以下命令安装server
RPM,根据需要替换从 MySQL 网站下载的 RPM 的名称:
$> rpm -Uhv MySQL-Cluster-server-gpl-8.0.34-1.sles11.i386.rpm
这将在/usr/sbin
目录中安装带有NDB
存储引擎支持的 MySQL 服务器二进制文件(mysqld),以及所有所需的 MySQL 服务器支持文件。它还安装了mysql.server和mysqld_safe启动脚本(分别位于/usr/share/mysql
和/usr/bin
)。RPM 安装程序应自动处理一般配置问题(例如,如有需要,创建mysql
用户和组)。
要管理 SQL 节点(MySQL 服务器),您还应安装client
RPM,如下所示:
$> rpm -Uhv MySQL-Cluster-client-gpl-8.0.34-1.sles11.i386.rpm
这将安装mysql客户端程序。
管理节点。 要安装 NDB Cluster 管理服务器,只需使用server
RPM。将此 RPM 复制到打算托管管理节点的计算机上,然后以系统 root 用户身份运行以下命令进行安装(根据需要替换从 MySQL 网站下载的server
RPM 的名称):
$> rpm -Uhv MySQL-Cluster-server-gpl-8.0.34-1.sles11.i386.rpm
尽管此 RPM 安装了许多其他文件,但实际上只需要管理服务器二进制文件ndb_mgmd(位于/usr/sbin
目录)来运行管理节点。server
RPM 还安装了ndb_mgm,NDB
管理客户端。
有关使用 Oracle 提供的 RPM 包在 Linux 上安装 MySQL 的一般信息,请参见第 2.5.4 节,“使用 Oracle 提供的 RPM 包在 Linux 上安装 MySQL”。有关所需的安装后配置信息,请参见第 25.3.3 节,“NDB Cluster 的初始配置”。
原文:
dev.mysql.com/doc/refman/8.0/en/mysql-cluster-install-debian.html
25.3.1.3 使用 .deb 文件安装 NDB Cluster
本节提供了有关在 Debian 和相关 Linux 发行版(如 Ubuntu)上使用 Oracle 提供的 .deb
文件安装 NDB Cluster 的信息。
Oracle 还为 Debian 和其他发行版提供了一个 NDB Cluster APT 软件源。有关说明和其他信息,请参见使用 APT 软件源安装 MySQL NDB Cluster。
Oracle 为 32 位和 64 位平台提供了 NDB Cluster 的 .deb
安装文件。对于基于 Debian 的系统,只需要一个安装文件。根据适用的 NDB Cluster 版本、Debian 版本和架构,此文件的命名遵循此模式:
mysql-cluster-gpl-*ndbver*-debian*debianver*-*arch*.deb
这里,ndbver
是 NDB
引擎版本号的三部分,debianver
是 Debian 的主要版本号(8
或 9
),arch
是 i686
或 x86_64
中的一个。在接下来的示例中,我们假设您希望在 64 位 Debian 9 系统上安装 NDB 8.0.34;在这种情况下,安装文件名为 mysql-cluster-gpl-8.0.34-debian9-x86_64.deb-bundle.tar
。
下载适当的 .deb
文件后,您可以解压缩它,然后使用 dpkg
命令行安装,如下所示:
$> dpkg -i mysql-cluster-gpl-8.0.34-debian9-i686.deb
您也可以像下面这样使用 dpkg
进行卸载:
$> dpkg -r mysql
安装文件还应与大多数与 .deb
文件一起使用的图形软件包管理器兼容,例如 Gnome 桌面的 GDebi
。
.deb
文件将 NDB Cluster 安装在 /opt/mysql/server-*
version*/
下,其中 version
是包含的 MySQL 服务器的两部分发布系列版本。对于 NDB 8.0,这始终是 8.0
。目录布局与通用 Linux 二进制发行版相同(请参见表 2.3,“通用 Unix/Linux 二进制包的 MySQL 安装布局”),唯一的例外是启动脚本和配置文件位于 support-files
而不是 share
中。所有 NDB Cluster 可执行文件,如 ndb_mgm, ndbd, 和 ndb_mgmd, 都放在 bin
目录中。
原文:
dev.mysql.com/doc/refman/8.0/en/mysql-cluster-install-linux-source.html
25.3.1.4 在 Linux 上从源代码构建 NDB Cluster
本节提供了关于在 Linux 和其他类 Unix 平台上编译 NDB Cluster 的信息。从源代码构建 NDB Cluster 类似于构建标准的 MySQL Server,尽管在一些关键方面有所不同,这些差异在这里讨论。关于从源代码构建 MySQL 的一般信息,请参见 第 2.8 节,“从源代码安装 MySQL”。关于在 Windows 平台上编译 NDB Cluster 的信息,请参见 第 25.3.2.2 节,“在 Windows 上从源代码编译和安装 NDB Cluster”。
构建 MySQL NDB Cluster 8.0 需要使用 MySQL Server 8.0 的源代码。这些源代码可以从 MySQL 下载页面获取,链接为 dev.mysql.com/downloads/
。存档的源文件应该类似于 mysql-8.0.34.tar.gz
。你也可以从 GitHub 获取这些源代码,链接为 github.com/mysql/mysql-server
。
注意
在以前的版本中,从标准的 MySQL Server 源代码构建 NDB Cluster 是不被支持的。在 MySQL 8.0 和 NDB Cluster 8.0 中,情况已经不再是这样了—这两个产品现在都是从相同的源代码构建的。
CMake 的 WITH_NDB
选项会导致管理节点、数据节点和其他 NDB Cluster 程序的二进制文件被构建;它还会导致 mysqld 被编译时带有 NDB
存储引擎支持。在构建 NDB Cluster 时,这个选项(或在 NDB 8.0.31 之前的版本中,WITH_NDBCLUSTER
)是必需的。
重要
WITH_NDB_JAVA 选项默认启用。这意味着,默认情况下,如果 CMake 在您的系统上找不到 Java 的位置,配置过程将失败;如果您不希望启用 Java 和 ClusterJ 支持,您必须显式地通过 -DWITH_NDB_JAVA=OFF
配置构建。如果需要,使用 WITH_CLASSPATH
提供 Java 类路径。
关于构建 NDB Cluster 的 CMake 选项的更多信息,请参见 用于编译 NDB Cluster 的 CMake 选项。
在运行 make && make install(或系统的等效命令)之后,结果类似于将预编译的二进制文件解压到相同位置所得到的结果。
管理节点。 当从源代码构建并运行默认的 make install 时,管理服务器和管理客户端二进制文件(ndb_mgmd 和 ndb_mgm)可以在 /usr/local/mysql/bin
中找到。在管理节点主机上只需要存在 ndb_mgmd;但是,在同一主机上也有 ndb_mgm 是个好主意。这两个可执行文件都不需要在主机文件系统上的特定位置。
数据节点。 数据节点主机上唯一需要的可执行文件是数据节点二进制文件 ndbd 或 ndbmtd。(例如,mysqld 不需要存在于主机机器上。)默认情况下,从源代码构建时,此文件放置在目录 /usr/local/mysql/bin
中。对于在多个数据节点主机上安装,只需将 ndbd 或 ndbmtd 复制到其他主机机器上即可。(这假设所有数据节点主机使用相同的架构和操作系统;否则,您可能需要为每个不同平台单独编译。)数据节点二进制文件不需要在主机文件系统上的任何特定位置,只要位置已知即可。
当从源代码编译 NDB Cluster 时,构建多线程数据节点二进制文件不需要特殊选项。配置构建时使用 NDB
存储引擎支持会自动构建 ndbmtd;make install 将 ndbmtd 二进制文件放置在安装的 bin
目录中,与 mysqld、ndbd 和 ndb_mgm 一起。
SQL 节点。 如果您使用集群支持编译 MySQL,并执行默认安装(使用make install作为系统root
用户),mysqld将被放置在/usr/local/mysql/bin
中。按照 Section 2.8, “从源代码安装 MySQL”中给出的步骤使mysqld准备就绪。如果您想要运行多个 SQL 节点,您可以在多台机器上使用相同的mysqld可执行文件及其相关的支持文件的副本。最简单的方法是将整个/usr/local/mysql
目录及其内部的所有目录和文件复制到其他 SQL 节点主机上,然后在每台机器上重复 Section 2.8, “从源代码安装 MySQL”中的步骤。如果您使用非默认的PREFIX
选项配置构建,则必须相应调整目录。
在 Section 25.3.3, “NDB Cluster 的初始配置”中,我们为示例 NDB Cluster 中的所有节点创建配置文件。
原文:
dev.mysql.com/doc/refman/8.0/en/mysql-cluster-install-docker.html
25.3.1.5 使用 Docker 容器部署 NDB 集群
下载 MySQL NDB 集群 Docker 镜像
在单独的步骤中下载 Docker 镜像并不是绝对必要的;但是,在创建 Docker 容器之前执行此步骤可以确保您的本地镜像是最新的。要从Oracle 容器注册表(OCR)下载 MySQL NDB 集群社区版镜像,请运行此命令:
代码语言:javascript复制docker pull container-registry.oracle.com/mysql/community-cluster:*tag*
tag
是您要拉取的镜像版本的标签(例如,7.5
,7.6
,8.0
或latest
)。如果省略了:*
tag*
**,则使用latest
标签,并下载 MySQL NDB 集群最新 GA 版本的镜像。
您可以使用此命令列出已下载的 Docker 镜像:
代码语言:javascript复制$> docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
container-registry.oracle.com/mysql/community-cluster 8.0 d1b28e457ac5 5 weeks ago 636MB
要从 OCR 下载 MySQL 商业集群镜像,您需要首先接受许可协议。请按照以下步骤操作:
- 访问 OCR 网站
container-registry.oracle.com/
并选择 MySQL。 - 在 MySQL 存储库列表下,选择
commercial-cluster
。 - 如果您尚未登录到 OCR,请单击页面右侧的“登录”按钮,然后在提示时输入 Oracle 帐户凭据。
- 跟随页面右侧的说明接受许可协议。
使用此命令从 OCR 下载 MySQL 商业集群的 Docker 镜像:
代码语言:javascript复制docker pull container-registry.oracle.com/mysql/commercial-cluster:*tag*
使用默认配置启动 MySQL 集群
首先,为容器之间的通信创建一个名为cluster
的内部 Docker 网络:
docker network create cluster --subnet=192.168.0.0/16
然后,启动管理节点:
代码语言:javascript复制docker run -d --net=cluster --name=management1 --ip=192.168.0.2 container-registry.oracle.com/mysql/community-cluster ndb_mgmd
接下来,启动两个数据节点
代码语言:javascript复制docker run -d --net=cluster --name=ndb1 --ip=192.168.0.3 container-registry.oracle.com/mysql/community-cluster ndbd
代码语言:javascript复制docker run -d --net=cluster --name=ndb2 --ip=192.168.0.4 container-registry.oracle.com/mysql/community-cluster ndbd
最后,启动 MySQL 服务器节点:
代码语言:javascript复制docker run -d --net=cluster --name=mysql1 --ip=192.168.0.10 -e MYSQL_RANDOM_ROOT_PASSWORD=true container-registry.oracle.com/mysql/community-cluster mysqld
然后,服务器将使用随机生成的密码进行初始化,需要更改密码。从日志中获取密码:
代码语言:javascript复制docker logs mysql1 2>&1 | grep PASSWORD
如果命令没有返回密码,则服务器尚未完成初始化。请等待一会儿,然后再试一次。一旦获得密码,通过mysql
客户端登录到服务器并更改密码:
docker exec -it mysql1 mysql -uroot -p
一旦您在服务器上,使用以下语句更改根密码:
代码语言:javascript复制mysql> ALTER USER 'root'@'localhost' IDENTIFIED BY '*password*';
最后,启动一个带有交互式管理客户端ndb_mgm的容器来监视集群:
代码语言:javascript复制$> docker run -it --net=cluster container-registry.oracle.com/mysql/community-cluster ndb_mgm
[Entrypoint] MySQL Docker Image 8.0.34-1.2.10-cluster
[Entrypoint] Starting ndb_mgm
-- NDB Cluster -- Management Client --
运行SHOW
命令以打印集群的状态。您应该看到以下内容:
ndb_mgm> SHOW
Connected to Management Server at: 192.168.0.2:1186
Cluster Configuration
---------------------
[ndbd(NDB)] 2 node(s)
id=2 @192.168.0.3 (mysql-8.0.34-ndb-8.0.34, Nodegroup: 0, *)
id=3 @192.168.0.4 (mysql-8.0.34-ndb-8.0.34, Nodegroup: 0)
[ndb_mgmd(MGM)] 1 node(s)
id=1 @192.168.0.2 (mysql-8.0.34-ndb-8.0.34)
[mysqld(API)] 1 node(s)
id=4 @192.168.0.10 (mysql-8.0.34-ndb-8.0.34)
自定义 MySQL 集群
默认的 MySQL NDB 集群镜像包括两个配置文件,这些文件也可以在MySQL NDB 集群的 GitHub 存储库中找到。
-
/etc/my.cnf
-
/etc/mysql-cluster.cnf
要更改集群(例如,添加更多节点或更改网络设置),必须更新这些文件。有关更多信息,请参见第 25.4.3 节,“NDB 集群配置文件”。在启动容器时使用自定义配置文件,使用-v
标志加载外部文件。例如(将整个命令输入在同一行):
$> docker run -d --net=cluster --name=management1
--ip=192.168.0.2 -v /etc/my.cnf:/etc/my.cnf -v
/etc/mysql-cluster.cnf:/etc/mysql-cluster.cnf
container-registry.oracle.com/mysql/community-cluster ndb_mgmd
25.3.2 在 Windows 上安装 NDB 集群
原文:
dev.mysql.com/doc/refman/8.0/en/mysql-cluster-install-windows.html
25.3.2.1 从二进制发行版在 Windows 上安装 NDB 集群
25.3.2.2 在 Windows 上从源代码编译和安装 NDB 集群
25.3.2.3 在 Windows 上 NDB 集群的初始启动
25.3.2.4 将 NDB 集群进程安装为 Windows 服务
本节描述了在 Windows 主机上安装 NDB 集群的过程。可以从dev.mysql.com/downloads/cluster/
获取用于 Windows 的 NDB 集群 8.0 二进制文件。有关在 Windows 上从 Oracle 提供的二进制发行版安装 NDB 集群的信息,请参见第 25.3.2.1 节,“从二进制发行版在 Windows 上安装 NDB 集群”。
也可以使用 Microsoft Visual Studio 在 Windows 上编译和安装 NDB 集群的源代码。有关更多信息,请参见第 25.3.2.2 节,“在 Windows 上从源代码编译和安装 NDB 集群”。
原文:
dev.mysql.com/doc/refman/8.0/en/mysql-cluster-install-windows-binary.html
25.3.2.1 从二进制发行版在 Windows 上安装 NDB Cluster
本节描述了在 Windows 上使用 Oracle 提供的二进制“无需安装” NDB Cluster 发行版进行基本安装的过程,使用本节开头概述的相同 4 节点设置(参见 第 25.3 节,“NDB Cluster 安装”),如下表所示:
表 25.7 示例集群中节点的网络地址
节点 | IP 地址 |
---|---|
管理节点 (mgmd) | 198.51.100.10 |
SQL 节点 (mysqld) | 198.51.100.20 |
数据节点 “A” (ndbd) | 198.51.100.30 |
数据节点 “B” (ndbd) | 198.51.100.40 |
与其他平台一样,运行 SQL 节点的 NDB Cluster 主机计算机必须安装 MySQL Server 二进制文件 (mysqld.exe)。您还应该在此主机上安装 MySQL 客户端 (mysql.exe)。对于管理节点和数据节点,不需要安装 MySQL Server 二进制文件;但是,每个管理节点都需要管理服务器守护程序 (ndb_mgmd.exe);每个数据节点都需要数据节点守护程序 (ndbd.exe 或 ndbmtd.exe"))。在本示例中,我们将 ndbd.exe 称为数据节点可执行文件,但您也可以安装 ndbmtd.exe"),这是该程序的多线程版本,方式完全相同。您还应该在管理服务器主机上安装管理客户端 (ndb_mgm.exe)。本节涵盖了为每种类型的 NDB Cluster 节点安装正确的 Windows 二进制文件所需的步骤。
注意
与其他 Windows 程序一样,NDB Cluster 可执行文件的文件扩展名为.exe
。但是,在从命令行调用这些程序时,不需要包含.exe
扩展名。因此,在本文档中,我们通常简称这些程序为mysqld、mysql、ndb_mgmd等。您应该明白,无论我们是指mysqld还是mysqld.exe,两个名称都表示相同的东西(MySQL 服务器程序)。
对于使用 Oracle 的no-install
二进制文件设置 NDB Cluster,安装过程的第一步是从dev.mysql.com/downloads/cluster/
下载最新的 NDB Cluster Windows ZIP 二进制存档。此存档的文件名为mysql-cluster-gpl-*
ver*-win*
arch*.zip
,其中*ver
是NDB
存储引擎版本(例如8.0.34
),arch
*是架构(32
表示 32 位二进制文件,64
表示 64 位二进制文件)。例如,64 位 Windows 系统的 NDB Cluster 8.0.34 存档名为mysql-cluster-gpl-8.0.34-win64.zip
。
您可以在 32 位和 64 位 Windows 版本上运行 32 位 NDB Cluster 二进制文件;但是,64 位 NDB Cluster 二进制文件只能在 64 位 Windows 版本上使用。如果您在具有 64 位 CPU 的计算机上使用 32 位 Windows 版本,则必须使用 32 位 NDB Cluster 二进制文件。
为了最大限度地减少需要从互联网下载或在计算机之间复制的文件数量,我们从您打算运行 SQL 节点的计算机开始。
SQL 节点。 我们假设您已将存档的副本放在具有 IP 地址 198.51.100.20 的计算机上的目录C:Documents and Settings*
username*My DocumentsDownloads
中,其中*username
*是当前用户的名称。(您可以在命令行上使用ECHO %USERNAME%
获取此名称。)要将 NDB Cluster 可执行文件安装并运行为 Windows 服务,此用户应为Administrators
组的成员。
从存档中提取所有文件。与 Windows 资源管理器集成的提取向导足以完成此任务。(如果您使用不同的存档程序,请确保它从存档中提取所有文件和目录,并保留存档的目录结构。)当要求输入目标目录时,请输入C:
,这将导致提取向导将存档提取到目录C:mysql-cluster-gpl-*
ver*-win*
arch*
。将此目录重命名为C:mysql
。
可以将 NDB Cluster 二进制文件安装到除C:mysqlbin
之外的目录;但是,如果这样做,必须相应地修改本过程中显示的路径。特别是,如果 MySQL Server(SQL 节点)二进制文件安装到除C:mysql
或C:Program FilesMySQLMySQL Server 8.0
之外的位置,或者如果 SQL 节点的数据目录位于除C:mysqldata
或C:Program FilesMySQLMySQL Server 8.0data
之外的位置,则在启动 SQL 节点时必须在命令行上使用额外的配置选项或将其添加到my.ini
或my.cnf
文件中。有关配置 MySQL Server 在非标准位置运行的更多信息,请参见 Section 2.3.4, “Installing MySQL on Microsoft Windows Using a noinstall
ZIP Archive”。
要使支持 NDB Cluster 的 MySQL Server 作为 NDB Cluster 的一部分运行,必须使用选项--ndbcluster
和--ndb-connectstring
启动。虽然可以在命令行上指定这些选项,但通常更方便将它们放在一个选项文件中。为此,请在记事本或其他文本编辑器中创建一个新的文本文件。将以下配置信息输入到此文件中:
[mysqld]
# Options for mysqld process:
ndbcluster # run NDB storage engine
ndb-connectstring=198.51.100.10 # location of management server
如果需要,可以添加此 MySQL Server 使用的其他选项(请参见 Section 2.3.4.2, “Creating an Option File”),但文件必须至少包含所示选项。将此文件��存为C:mysqlmy.ini
。这完成了 SQL 节点的安装和设置。
数据节点。 Windows 主机上的 NDB Cluster 数据节点只需要一个可执行文件,即ndbd.exe或ndbmtd.exe")之一。在本示例中,我们假设您正在使用ndbd.exe,但当使用ndbmtd.exe")时,相同的说明也适用。在每台计算机上,您希望运行数据节点的计算机(具有 IP 地址 198.51.100.30 和 198.51.100.40),创建目录C:mysql
、C:mysqlbin
和C:mysqlcluster-data
;然后,在您下载并解压no-install
存档的计算机上,将ndbd.exe
定位于C:mysqlbin
目录。将此文件复制到两个数据节点主机上的C:mysqlbin
目录。
要作为 NDB 集群的一部分运行,每个数据节点必须提供管理服务器的地址或主机名。您可以在启动每个数据节点进程时使用 --ndb-connectstring
或 -c
选项在命令行上提供此信息。然而,通常最好将此信息放在一个选项文件中。为此,请在记事本或其他文本编辑器中创建一个新的文本文件,并输入以下文本:
[mysql_cluster]
# Options for data node process:
ndb-connectstring=198.51.100.10 # location of management server
将此文件保存为 C:mysqlmy.ini
,保存在数据节点主机上。创建另一个文本文件,其中包含相同的信息,并将其保存为 C:mysqlmy.ini
,保存在另一个数据节点主机上,或者将第一个数据节点主机上的 my.ini 文件复制到第二个数据节点主机上,确保将副本放在第二个数据节点的 C:mysql
目录中。现在,两个数据节点主机已准备好用于 NDB 集群,只剩下安装和配置管理节点。
管理节点。 在用于托管 NDB 集群管理节点的计算机上唯一需要的可执行程序是管理服务器程序 ndb_mgmd.exe。然而,为了在启动 NDB 集群后对其进行管理,您还应该在与管理服务器相同的计算机上安装 NDB 集群管理客户端程序 ndb_mgm.exe。在您下载和提取 no-install
存档的计算机上找到这两个程序;这应该是 SQL 节点主机上的目录 C:mysqlbin
。在具有 IP 地址 198.51.100.10 的计算机上创建目录 C:mysqlbin
,然后将这两个程序复制到该目录。
现在,您应该为 ndb_mgmd.exe
创建两个配置文件:
一个本地配置文件,提供特定于管理节点本身的配置数据。通常,此文件只需要提供 NDB 集群全局配置文件的位置(参见项目 2)。
要创建此文件,请在记事本或其他文本编辑器中启动一个新的文本文件,并输入以下信息:
代码语言:javascript复制[mysql_cluster]
# Options for management node process
config-file=C:/mysql/bin/config.ini
将此文件保存为文本文件 C:mysqlbinmy.ini
。
一个全局配置文件,管理节点可以从中获取管理整个 NDB 集群的配置信息。至少,此文件必须包含 NDB 集群中每个节点的部分,并且管理节点和所有数据节点的 IP 地址或主机名(HostName
配置参数)。还建议包括以下附加信息:
- 任何 SQL 节点的 IP 地址或主机名
- 分配给每个数据节点的数据内存和索引内存(
DataMemory
和IndexMemory
配置参数) - 使用
NoOfReplicas
配置参数来指定分片副本的数量(参见 第 25.2.2 节,“NDB Cluster 节点、节点组、分片副本和分区”) - 每个数据节点存储数据和日志文件的目录,以及管理节点保存其日志文件的目录(在这两种情况下,使用
DataDir
配置参数)
使用诸如记事本之类的文本编辑器创建一个新的文本文件,并输入以下信息:
代码语言:javascript复制[ndbd default]
# Options affecting ndbd processes on all data nodes:
NoOfReplicas=2 # Number of fragment replicas
DataDir=C:/mysql/cluster-data # Directory for each data node's data files
# Forward slashes used in directory path,
# rather than backslashes. This is correct;
# see Important note in text
DataMemory=80M # Memory allocated to data storage
IndexMemory=18M # Memory allocated to index storage
# For DataMemory and IndexMemory, we have used the
# default values. Since the "world" database takes up
# only about 500KB, this should be more than enough for
# this example Cluster setup.
[ndb_mgmd]
# Management process options:
HostName=198.51.100.10 # Hostname or IP address of management node
DataDir=C:/mysql/bin/cluster-logs # Directory for management node log files
[ndbd]
# Options for data node "A":
# (one [ndbd] section per data node)
HostName=198.51.100.30 # Hostname or IP address
[ndbd]
# Options for data node "B":
HostName=198.51.100.40 # Hostname or IP address
[mysqld]
# SQL node options:
HostName=198.51.100.20 # Hostname or IP address
将此文件保存为文本文件 C:mysqlbinconfig.ini
。
重要提示
在 Windows 上,当在程序选项或 NDB Cluster 使用的配置文件中指定目录路径时,不能使用单个反斜杠字符()。相反,你必须要么用第二个反斜杠字符(
\
)转义每个反斜杠字符,要么用正斜杠字符(/
)替换反斜杠。例如,NDB Cluster config.ini
文件中 [ndb_mgmd]
部分的以下行不起作用:
DataDir=C:mysqlbincluster-logs
相反,你可以使用以下任一种方式:
代码语言:javascript复制DataDir=C:\mysql\bin\cluster-logs # Escaped backslashes
代码语言:javascript复制DataDir=C:/mysql/bin/cluster-logs # Forward slashes
为了简洁和易读起见,我们建议在 Windows 上使用 NDB Cluster 程序选项和配置文件中的目录路径时使用正斜杠。
原文:
dev.mysql.com/doc/refman/8.0/en/mysql-cluster-install-windows-source.html
25.3.2.2 在 Windows 上从源代码编译和安装 NDB Cluster
Oracle 为 Windows 提供了预编译的 NDB Cluster 二进制文件,对大多数用户来说应该足够了。但是,如果你愿意,也可以从源代码为 Windows 编译 NDB Cluster。这样做的过程几乎与用于为 Windows 编译标准 MySQL Server 二进制文件的过程相同,并且使用相同的工具。但是,有两个主要区别:
- 构建 MySQL NDB Cluster 8.0 需要使用 MySQL Server 8.0 源代码。这些源代码可以从 MySQL 下载页面获取,链接为
dev.mysql.com/downloads/
。存档的源文件应该类似于mysql-8.0.34.tar.gz
。你也可以从 GitHub 获取这些源代码,链接为github.com/mysql/mysql-server
。 - 你必须在CMake中使用
WITH_NDB
选项来配置构建,以及任何其他你希望与之一起使用的构建选项。WITH_NDBCLUSTER
也支持用于向后兼容,但在 NDB 8.0.31 中已被弃用。
重要提示
WITH_NDB_JAVA
选项默认启用。这意味着,默认情况下,如果CMake在你的系统上找不到 Java 的位置,配置过程将失败;如果你不希望启用 Java 和 ClusterJ 支持,你必须通过使用 -DWITH_NDB_JAVA=OFF
明确指示。 (Bug #12379735) 如果需要,使用WITH_CLASSPATH
来提供 Java 类路径。
关于构建 NDB Cluster 的CMake选项的更多信息,请参见用于编译 NDB Cluster 的 CMake 选项。
构建过程完成后,你可以创建一个包含编译后二进制文件的 Zip 归档文件;第 2.8.4 节,“使用标准源分发安装 MySQL” 提供了在 Windows 系统上执行此任务所需的命令。NDB Cluster 的二进制文件可以在生成的归档文件的 bin
目录中找到,该目录等同于 no-install
归档文件,并且可以以相同的方式安装和配置。更多信息,请参阅第 25.3.2.1 节,“从二进制发布版在 Windows 上安装 NDB Cluster”。
原文:
dev.mysql.com/doc/refman/8.0/en/mysql-cluster-install-windows-initial-start.html
25.3.2.3 Windows 上 NDB Cluster 的初始启动
一旦 NDB Cluster 可执行文件和所需的配置文件就位,启动集群的初始步骤只是简单地启动集群中所有节点的 NDB Cluster 可执行文件。每个集群节点进程必须分别在其所在的主机计算机上启动。应首先启动管理节点,然后是数据节点,最后是任何 SQL 节点。
在管理节点主机上,从命令行发出以下命令以启动管理节点进程。输出应类似于所示:
代码语言:javascript复制C:mysqlbin> ndb_mgmd
2010-06-23 07:53:34 [MgmtSrvr] INFO -- NDB Cluster Management Server. mysql-8.0.35-ndb-8.0.35
2010-06-23 07:53:34 [MgmtSrvr] INFO -- Reading cluster configuration from 'config.ini'
管理节点进程继续向控制台打印日志输出。这是正常的,因为管理节点不作为 Windows 服务运行。(如果您在类 Unix 平台(如 Linux)上使用 NDB Cluster,则可能会注意到管理节点在 Windows 上的默认行为实际上与其在 Unix 系统上的行为相反,在 Unix 系统上,它默认作为 Unix 守护进程运行。这种行为也适用于在 Windows 上运行的 NDB Cluster 数据节点进程。)因此,请不要关闭运行 ndb_mgmd.exe 的窗口;这样会终止管理节点进程。(请参阅 Section 25.3.2.4, “Installing NDB Cluster Processes as Windows Services”,其中我们展示了如何将 NDB Cluster 进程安装并作为 Windows 服务运行。)
-f
选项告诉管理节点在哪里找到全局配置文件(config.ini
)。此选项的长格式是 --config-file
。
重要
NDB Cluster 管理节点缓存从 config.ini
中读取的配置数据;一旦创建了配置缓存,除非被强制执行,否则在后续启动时会忽略 config.ini
文件。这意味着,如果管理节点由于此文件中的错误而无法启动,则在纠正错误后,必须让管理节点重新读取 config.ini
。您可以通过在命令行上使用 --reload
或 --initial
选项启动 ndb_mgmd.exe 来实现这一点。这两个选项中的任何一个都可以刷新配置缓存。
在管理节点的 my.ini
文件中不需要也不建议使用这两个选项。
在每个数据节点主机上,运行此处显示的命令以启动数据节点进程:
代码语言:javascript复制C:mysqlbin> ndbd
2010-06-23 07:53:46 [ndbd] INFO -- Configuration fetched from 'localhost:1186', generation: 1
在每种情况下,数据节点进程的输出的第一行应类似于前面示例中所示的内容,并且后面跟着其他日志输出行。与管理节点进程一样,这是正常的,因为数据节点不作为 Windows 服务运行。因此,请不要关闭运行数据节点进程的控制台窗口;这样做会终止ndbd.exe。(有关更多信息,请参见第 25.3.2.4 节,“将 NDB 集群进程安装为 Windows 服务”。)
尚未启动 SQL 节点;在数据节点完成启动之前,它无法连接到集群,这可能需要一些时间。相反,在管理节点主机上的新控制台窗口中启动 NDB 集群管理客户端ndb_mgm.exe,该文件应位于管理节点主机的C:mysqlbin
中。(不要尝试在运行ndb_mgmd.exe的控制台窗口中重新使用,因为这会终止管理节点。)生成的输出应如下所示:
C:mysqlbin> ndb_mgm
-- NDB Cluster -- Management Client --
ndb_mgm>
当出现提示符ndb_mgm>
时,这表示管理客户端已准备好接收 NDB 集群管理命令。您可以通过在管理客户端提示符处输入ALL STATUS
来观察数据节点的启动状态。此命令会导致数据节点启动序列的运行报告,应该看起来像这样:
ndb_mgm> ALL STATUS
Connected to Management Server at: localhost:1186
Node 2: starting (Last completed phase 3) (mysql-8.0.35-ndb-8.0.35)
Node 3: starting (Last completed phase 3) (mysql-8.0.35-ndb-8.0.35)
Node 2: starting (Last completed phase 4) (mysql-8.0.35-ndb-8.0.35)
Node 3: starting (Last completed phase 4) (mysql-8.0.35-ndb-8.0.35)
Node 2: Started (version 8.0.35)
Node 3: Started (version 8.0.35)
ndb_mgm>
注意
在管理客户端中输入的命令不区分大小写;我们使用大写作为这些命令的规范形式,但在输入到ndb_mgm客户端时,您不必遵守此约定。有关更多信息,请参见第 25.6.1 节,“NDB 集群管理客户端中的命令”。
由ALL STATUS
产生的输出可能会根据数据节点启动速度、您正在使用的 NDB 集群软件的发布版本号以及其他因素而有所不同。重要的是,当您看到两个数据节点都已启动时,您就可以开始启动 SQL 节点了。
您可以让ndb_mgm.exe保持运行;它不会对 NDB Cluster 的性能产生负面影响,并且我们在下一步中使用它来验证 SQL 节点在您启动后是否连接到集群。
在指定为 SQL 节点主机的计算机上,打开控制台窗口并导航到解压 NDB Cluster 二进制文件的目录(如果您遵循我们的示例,这是C:mysqlbin
)。
通过从命令行调用mysqld.exe来启动 SQL 节点,如下所示:
代码语言:javascript复制C:mysqlbin> mysqld --console
--console
选项会导致日志信息写入控制台,在出现问题时可能会有所帮助。(一旦您确信 SQL 节点以令人满意的方式运行,您可以停止它并重新启动,而不使用--console
选项,以便正常执行日志记录。)
在管理节点主机上运行管理客户端(ndb_mgm.exe)的控制台窗口中,输入SHOW
命令,应该会产生类似于这里显示的输出:
ndb_mgm> SHOW
Connected to Management Server at: localhost:1186
Cluster Configuration
---------------------
[ndbd(NDB)] 2 node(s)
id=2 @198.51.100.30 (Version: 8.0.35-ndb-8.0.35, Nodegroup: 0, *)
id=3 @198.51.100.40 (Version: 8.0.35-ndb-8.0.35, Nodegroup: 0)
[ndb_mgmd(MGM)] 1 node(s)
id=1 @198.51.100.10 (Version: 8.0.35-ndb-8.0.35)
[mysqld(API)] 1 node(s)
id=4 @198.51.100.20 (Version: 8.0.35-ndb-8.0.35)
您还可以使用mysql客户端(mysql.exe)使用SHOW ENGINE NDB STATUS
语句验证 SQL 节点是否连接到 NDB Cluster。
现在,您可以准备使用 NDB Cluster 的NDBCLUSTER
存储引擎来处理数据库对象和数据。有关更多信息和示例,请参见第 25.3.5 节,“具有表和数据的 NDB Cluster 示例”。
您还可以将ndb_mgmd.exe、ndbd.exe和ndbmtd.exe")安装为 Windows 服务。有关如何执行此操作的信息,请参见第 25.3.2.4 节,“将 NDB Cluster 进程安装为 Windows 服务”。
原文:
dev.mysql.com/doc/refman/8.0/en/mysql-cluster-install-windows-service.html
25.3.2.4 将 NDB Cluster 进程安装为 Windows 服务
一旦您确认 NDB Cluster 运行如您所期望,您可以将管理节点和数据节点安装为 Windows 服务,这样这些进程将在 Windows 启动或停止时自动启动和停止。这也使得可以使用适当的SC START和SC STOP命令,或使用 Windows 图形Services实用程序来控制这些进程。也可以使用NET START和NET STOP命令。
通常必须使用具有系统管理员权限的帐户来将程序安装为 Windows 服务。
要在 Windows 上将管理节点安装为服务,请在托管管理节点的计算机上使用命令行调用ndb_mgmd.exe,使用--install
选项,如下所示:
C:> C:mysqlbinndb_mgmd.exe --install
Installing service 'NDB Cluster Management Server'
as '"C:mysqlbinndbd.exe" "--service=ndb_mgmd"'
Service successfully installed.
重要
在将 NDB Cluster 程序安装为 Windows 服务时,应始终指定完整路径;否则服务安装可能会因为错误“系统找不到指定的文件”而失败。
必须首先使用--install
选项,然后再指定可能用于ndb_mgmd.exe的任何其他选项。然而,最好是在选项文件中指定这些选项。如果您的选项文件不在ndb_mgmd.exe --help
输出中显示的默认位置之一,您可以使用--config-file
选项指定位置。
现在您应该能够像这样启动和停止管理服务器:
代码语言:javascript复制C:> SC START ndb_mgmd
C:> SC STOP ndb_mgmd
注意
如果使用NET命令,您也可以使用描述性名称启动或停止管理服务器作为 Windows 服务,如下所示:
代码语言:javascript复制C:> NET START 'NDB Cluster Management Server'
The NDB Cluster Management Server service is starting.
The NDB Cluster Management Server service was started successfully.
C:> NET STOP 'NDB Cluster Management Server'
The NDB Cluster Management Server service is stopping..
The NDB Cluster Management Server service was stopped successfully.
通常在安装服务时指定一个简短的服务名称或允许使用默认服务名称,然后在启动或停止服务时引用该名称会更简单。要指定一个不同于ndb_mgmd
的服务名称,请将其附加到--install
选项中,如下例所示:
C:> C:mysqlbinndb_mgmd.exe --install=mgmd1
Installing service 'NDB Cluster Management Server'
as '"C:mysqlbinndb_mgmd.exe" "--service=mgmd1"'
Service successfully installed.
现在您应该能够使用您指定的名称启动或停止服务,就像这样:
代码语言:javascript复制C:> SC START mgmd1
C:> SC STOP mgmd1
要删除管理节点服务,请使用SC DELETE service_name
:
C:> SC DELETE mgmd1
或者,使用ndb_mgmd.exe并带上--remove
选项,如下所示:
C:> C:mysqlbinndb_mgmd.exe --remove
Removing service 'NDB Cluster Management Server'
Service successfully removed.
如果使用非默认服务名称安装服务,请将服务名称作为ndb_mgmd.exe --remove
选项的值传递,如下所示:
C:> C:mysqlbinndb_mgmd.exe --remove=mgmd1
Removing service 'mgmd1'
Service successfully removed.
将 NDB Cluster 数据节点进程安装为 Windows 服务的操作方式类似,使用ndbd.exe的--install
选项(或ndbmtd.exe")),如下所示:
C:> C:mysqlbinndbd.exe --install
Installing service 'NDB Cluster Data Node Daemon' as '"C:mysqlbinndbd.exe" "--service=ndbd"'
Service successfully installed.
现在您可以按照以下示例启动或停止数据节点:
代码语言:javascript复制C:> SC START ndbd
C:> SC STOP ndbd
要删除数据节点服务,请使用SC DELETE service_name
:
C:> SC DELETE ndbd
或者,使用ndbd.exe并带上--remove
选项,如下所示:
C:> C:mysqlbinndbd.exe --remove
Removing service 'NDB Cluster Data Node Daemon'
Service successfully removed.
与ndb_mgmd.exe(和mysqld.exe)一样,当将ndbd.exe安装为 Windows 服务时,也可以指定服务名称作为--install
的值,然后在启动或停止服务时使用它,如下所示:
C:> C:mysqlbinndbd.exe --install=dnode1
Installing service 'dnode1' as '"C:mysqlbinndbd.exe" "--service=dnode1"'
Service successfully installed.
C:> SC START dnode1
C:> SC STOP dnode1
如果在安装数据节点服务时指定了服务名称,那么在删除时也可以使用该名称,如下所示:
代码语言:javascript复制C:> SC DELETE dnode1
或者,可以将服务名称作为ndbd.exe
--remove
选项的值传递,如下所示:
C:> C:mysqlbinndbd.exe --remove=dnode1
Removing service 'dnode1'
Service successfully removed.
将 SQL 节点安装为 Windows 服务,启动服务,停止服务和删除服务的操作方式类似,使用mysqld --install
,SC START,SC STOP和SC DELETE(或mysqld --remove
)。也可以使用NET命令来启动或停止服务。有关更多信息,请参见 Section 2.3.4.8, “Starting MySQL as a Windows Service”。
25.3.3 NDB 集群的初始配置
原文:
dev.mysql.com/doc/refman/8.0/en/mysql-cluster-install-configuration.html
在本节中,我们讨论通过创建和编辑配置文件手动配置已安装的 NDB 集群。
对于我们的四节点、四主机 NDB 集群(请参见 Cluster nodes and host computers),需要编写四个配置文件,每个节点主机一个。
- 每个数据节点或 SQL 节点都需要一个提供两个信息的
my.cnf
文件:一个连接字符串,告诉节点在哪里找到管理节点,以及一行告诉此主机上的 MySQL 服务器(承载数据节点的机器)启用NDBCLUSTER
存储引擎�� 有关连接字符串的更多信息,请参见 Section 25.4.3.3, “NDB Cluster Connection Strings”。 - 管理节点需要一个
config.ini
文件,告诉它要维护多少片段副本,为每个数据节点分配多少内存用于数据和索引,数据节点在哪里,每个数据节点在磁盘上保存数据的位置,以及如何找到任何 SQL 节点。
配置数据节点和 SQL 节点。 用于数据节点的my.cnf
文件相当简单。配置文件应位于/etc
目录中,并且可以使用任何文本编辑器进行编辑(如果文件不存在,则创建文件)。例如:
$> vi /etc/my.cnf
注意
我们在这里展示使用vi创建文件,但任何文本编辑器都可以正常工作。
对于我们示例设置中的每个数据节点和 SQL 节点,my.cnf
应该如下所示:
[mysqld]
# Options for mysqld process:
ndbcluster # run NDB storage engine
[mysql_cluster]
# Options for NDB Cluster processes:
ndb-connectstring=198.51.100.10 # location of management server
输入上述信息后,保存此文件并退出文本编辑器。对承载数据节点“A”、数据节点“B”和 SQL 节点的机器执行此操作。
重要
一旦您在my.cnf
文件的[mysqld]
和[mysql_cluster]
部分中使用了ndbcluster
和ndb-connectstring
参数启动了一个mysqld进程,您就不能在实际启动集群之前执行任何CREATE TABLE
或ALTER TABLE
语句。否则,这些语句将失败并显示错误。这是设计上的限制。
配置管理节点。 配置管理节点的第一步是创建包含配置文件的目录,然后创建文件本身。例如(以root
身份运行):
$> mkdir /var/lib/mysql-cluster
$> cd /var/lib/mysql-cluster
$> vi config.ini
对于我们的代表性设置,config.ini
文件应该如下所示:
[ndbd default]
# Options affecting ndbd processes on all data nodes:
NoOfReplicas=2 # Number of fragment replicas
DataMemory=98M # How much memory to allocate for data storage
[ndb_mgmd]
# Management process options:
HostName=198.51.100.10 # Hostname or IP address of management node
DataDir=/var/lib/mysql-cluster # Directory for management node log files
[ndbd]
# Options for data node "A":
# (one [ndbd] section per data node)
HostName=198.51.100.30 # Hostname or IP address
NodeId=2 # Node ID for this data node
DataDir=/usr/local/mysql/data # Directory for this data node's data files
[ndbd]
# Options for data node "B":
HostName=198.51.100.40 # Hostname or IP address
NodeId=3 # Node ID for this data node
DataDir=/usr/local/mysql/data # Directory for this data node's data files
[mysqld]
# SQL node options:
HostName=198.51.100.20 # Hostname or IP address
# (additional mysqld connections can be
# specified for this node for various
# purposes such as running ndb_restore)
注意
world
数据库可从dev.mysql.com/doc/index-other.html
下载。
当所有配置文件都已创建并指定了这些最小选项后,您可以开始启动集群并验证所有进程是否正在运行。我们将在第 25.3.4 节,“NDB 集群的初始启动”中讨论如何执行此操作。
关于可用的 NDB 集群配置参数及其用途的更详细信息,请参见第 25.4.3 节,“NDB 集群配置文件”,以及第 25.4 节,“NDB 集群配置”。关于 NDB 集群配置与备份相关的内容,请参见第 25.6.8.3 节,“NDB 集群备份配置”。
注意
集群管理节点的默认端口是 1186;数据节点的默认端口是 2202。然而,集群可以自动为数据节点分配已经空闲的端口。
25.3.4 NDB Cluster 的初始启动
原文:
dev.mysql.com/doc/refman/8.0/en/mysql-cluster-install-first-start.html
在配置完成后,启动集群并不是很困难。每个集群节点进程必须分别在其所在的主机上启动。应首先启动管理节点,然后是数据节点,最后是任何 SQL 节点:
在管理主机上,从系统 shell 发出以下命令以启动管理节点进程:
代码语言:javascript复制$> ndb_mgmd --initial -f /var/lib/mysql-cluster/config.ini
第一次启动时,必须告诉ndb_mgmd在哪里找到其配置文件,使用-f
或--config-file
选项。此选项要求还必须指定--initial
或--reload
;有关详细信息,请参阅第 25.5.4 节,“ndb_mgmd — The NDB Cluster Management Server Daemon”。
在每个数据节点主机上运行以下命令以启动ndbd进程:
代码语言:javascript复制$> ndbd
如果您在 SQL 节点所在的集群主机上使用 RPM 文件安装 MySQL,则可以(也应该)使用提供的启动脚本来启动 SQL 节点上的 MySQL 服务器进程。
如果一切顺利,且集群已正确设置,那么集群现在应该是可操作的。您可以通过调用ndb_mgm管理节点客户端来测试。输出应该看起来像这里显示的那样,尽管根据您使用的 MySQL 确切版本的不同,输出可能会有一些细微差异:
代码语言:javascript复制$> ndb_mgm
-- NDB Cluster -- Management Client --
ndb_mgm> SHOW
Connected to Management Server at: localhost:1186
Cluster Configuration
---------------------
[ndbd(NDB)] 2 node(s)
id=2 @198.51.100.30 (Version: 8.0.35-ndb-8.0.35, Nodegroup: 0, *)
id=3 @198.51.100.40 (Version: 8.0.35-ndb-8.0.35, Nodegroup: 0)
[ndb_mgmd(MGM)] 1 node(s)
id=1 @198.51.100.10 (Version: 8.0.35-ndb-8.0.35)
[mysqld(API)] 1 node(s)
id=4 @198.51.100.20 (Version: 8.0.35-ndb-8.0.35)
此处将 SQL 节点称为[mysqld(API)]
,这反映了mysqld进程充当 NDB Cluster API 节点的事实。
注意
在SHOW
的输出中,给定 NDB Cluster SQL 或其他 API 节点的 IP 地址是 SQL 或 API 节点用于连接到集群数据节点的地址,而不是任何管理节点。
现在,您应该已经准备好在 NDB Cluster 中使用数据库、表格和数据了。请参阅第 25.3.5 节,“带有表格和数据的 NDB Cluster 示例”进行简要讨论。
25.3.5 带有表和数据的 NDB Cluster 示例
原文:
dev.mysql.com/doc/refman/8.0/en/mysql-cluster-install-example-data.html
注意
本节内容适用于在 Unix 和 Windows 平台上运行的 NDB Cluster。
与在标准 MySQL 中操作数据库表和数据并没有太大区别。有两个关键点需要记住:
要在集群中复制表,必须使用NDBCLUSTER
存储引擎。在创建表时,使用ENGINE=NDBCLUSTER
或ENGINE=NDB
选项来指定:
CREATE TABLE *tbl_name* (*col_name* *column_definitions*) ENGINE=NDBCLUSTER;
或者,对于使用不同存储引擎的现有表,可以使用ALTER TABLE
将表更改为使用NDBCLUSTER
:
ALTER TABLE *tbl_name* ENGINE=NDBCLUSTER;
每个NDBCLUSTER
表都有一个主键。如果用户在创建表时没有定义主键,NDBCLUSTER
存储引擎会自动生成一个隐藏的主键。这样的主键占用空间,就像任何其他表索引一样。(由于内存不足以容纳这些自动生成的索引,遇到问题并不罕见。)
如果您正在使用mysqldump的输出从现有数据库导入表,您可以在文本编辑器中打开 SQL 脚本,并为任何表创建语句添加ENGINE
选项,或替换任何现有的ENGINE
选项。假设您在另一个不支持 NDB Cluster 的 MySQL 服务器上有world
示例数据库,并且想要导出City
表:
$> mysqldump --add-drop-table world City > city_table.sql
生成的city_table.sql
文件包含此表创建语句(以及导入表数据所需的INSERT
语句):
DROP TABLE IF EXISTS `City`;
CREATE TABLE `City` (
`ID` int(11) NOT NULL auto_increment,
`Name` char(35) NOT NULL default '',
`CountryCode` char(3) NOT NULL default '',
`District` char(20) NOT NULL default '',
`Population` int(11) NOT NULL default '0',
PRIMARY KEY (`ID`)
) ENGINE=MyISAM;
INSERT INTO `City` VALUES (1,'Kabul','AFG','Kabol',1780000);
INSERT INTO `City` VALUES (2,'Qandahar','AFG','Qandahar',237500);
INSERT INTO `City` VALUES (3,'Herat','AFG','Herat',186800);
*(remaining INSERT statements omitted)*
你需要确保 MySQL 为这个表使用NDBCLUSTER
存储引擎。有两种方法可以实现这一点。其中一种是在将表导入到集群数据库之前修改表定义。以City
表为例,修改定义的ENGINE
选项如下:
DROP TABLE IF EXISTS `City`;
CREATE TABLE `City` (
`ID` int(11) NOT NULL auto_increment,
`Name` char(35) NOT NULL default '',
`CountryCode` char(3) NOT NULL default '',
`District` char(20) NOT NULL default '',
`Population` int(11) NOT NULL default '0',
PRIMARY KEY (`ID`)
) ENGINE=NDBCLUSTER;
INSERT INTO `City` VALUES (1,'Kabul','AFG','Kabol',1780000);
INSERT INTO `City` VALUES (2,'Qandahar','AFG','Qandahar',237500);
INSERT INTO `City` VALUES (3,'Herat','AFG','Herat',186800);
*(remaining INSERT statements omitted)*
必须为要成为集群数据库一部分的每个表的定义执行此操作。实现这一点的最简单方法是在包含定义的文件上执行搜索和替换,并将所有TYPE=*
engine_name*
或ENGINE=*
engine_name*
的实例替换为ENGINE=NDBCLUSTER
。如果您不想修改文件,可以使用未修改的文件创建表,然后使用ALTER TABLE
来更改它们的存储引擎。具体细节稍后在本节中给出。
假设您已经在集群的 SQL 节点上创建了名为world
的数据库,然后您可以使用mysql命令行客户端读取city_table.sql
,并按照通常的方式创建和填充相应的表:
$> mysql world < city_table.sql
非常重要的一点是要记住,前述命令必须在运行 SQL 节点的主机上执行(在本例中,在具有 IP 地址198.51.100.20
的机器上)。
要在 SQL 节点上创建整个world
数据库的副本,请在非集群服务器上使用mysqldump将数据库导出到名为world.sql
的文件中(例如,在/tmp
目录中)。然后按照刚才描述的方式修改表定义,并将文件导入到集群的 SQL 节点中:
$> mysql world < /tmp/world.sql
如果您将文件保存到不同位置,请相应调整前述说明。
在 SQL 节点上运行SELECT
查询与在任何其他 MySQL 服务器实例上运行它们没有任何区别。要从命令行运行查询,您首先需要以通常的方式登录到 MySQL Monitor(在Enter password:
提示处指定root
密码):
$> mysql -u root -p
Enter password:
Welcome to the MySQL monitor. Commands end with ; or g.
Your MySQL connection id is 1 to server version: 8.0.35-ndb-8.0.35
Type 'help;' or 'h' for help. Type 'c' to clear the buffer.
mysql>
我们只使用 MySQL 服务器的root
帐户,并假设您已经遵循了安装 MySQL 服务器的标准安全预防措施,包括设置强大的root
密码。有关更多信息,请参见 Section 2.9.4, “Securing the Initial MySQL Account”。
值得注意的是,NDB Cluster 节点在相互访问时不使用 MySQL 权限系统。设置或更改 MySQL 用户帐户(包括root
帐户)仅影响访问 SQL 节点的应用程序,而不影响节点之间的交互。有关更多信息,请参见 Section 25.6.20.2, “NDB Cluster and MySQL Privileges”。
如果在导入 SQL 脚本之前未修改表定义中的ENGINE
子句,则应在此时运行以下语句:
mysql> USE world;
mysql> ALTER TABLE City ENGINE=NDBCLUSTER;
mysql> ALTER TABLE Country ENGINE=NDBCLUSTER;
mysql> ALTER TABLE CountryLanguage ENGINE=NDBCLUSTER;
选择数据库并针对该数据库中的表运行SELECT查询也是按照通常的方式完成的,退出 MySQL Monitor 也是一样:
代码语言:javascript复制mysql> USE world;
mysql> SELECT Name, Population FROM City ORDER BY Population DESC LIMIT 5;
----------- ------------
| Name | Population |
----------- ------------
| Bombay | 10500000 |
| Seoul | 9981619 |
| São Paulo | 9968485 |
| Shanghai | 9696300 |
| Jakarta | 9604900 |
----------- ------------
5 rows in set (0.34 sec)
mysql> q
Bye
$>
使用 MySQL 的应用程序可以使用标准 API 来访问NDB
表。重要的是要记住,您的应用程序必须访问 SQL 节点,而不是管理或数据节点。这个简短的示例展示了我们如何通过在网络上的其他地方运行的 PHP 5.X mysqli
扩展来执行刚刚显示的SELECT
语句:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
"http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type"
content="text/html; charset=iso-8859-1">
<title>SIMPLE mysqli SELECT</title>
</head>
<body>
<?php
# connect to SQL node:
$link = new mysqli('198.51.100.20', 'root', '*root_password*', 'world');
# parameters for mysqli constructor are:
# host, user, password, database
if( mysqli_connect_errno() )
die("Connect failed: " . mysqli_connect_error());
$query = "SELECT Name, Population
FROM City
ORDER BY Population DESC
LIMIT 5";
# if no errors...
if( $result = $link->query($query) )
{
?>
<table border="1" width="40%" cellpadding="4" cellspacing ="1">
<tbody>
<tr>
<th width="10%">City</th>
<th>Population</th>
</tr>
<?
# then display the results...
while($row = $result->fetch_object())
printf("<tr>n <td align="center">%s</td><td>%d</td>n</tr>n",
$row->Name, $row->Population);
?>
</tbody
</table>
<?
# ...and verify the number of rows that were retrieved
printf("<p>Affected rows: %d</p>n", $link->affected_rows);
}
else
# otherwise, tell us what went wrong
echo mysqli_error();
# free the result set and the mysqli connection object
$result->close();
$link->close();
?>
</body>
</html>
我们假设运行在 Web 服务器上的进程可以访问 SQL 节点的 IP 地址。
以类似的方式,您可以使用 MySQL C API、Perl-DBI、Python-mysql 或 MySQL Connectors 来执行数据定义和操作任务,就像您通常使用 MySQL 一样。
25.3.6 安全关闭和重启 NDB 集群
原文:
dev.mysql.com/doc/refman/8.0/en/mysql-cluster-install-shutdown-restart.html
要关闭集群,请在托管管理节点的机器上的 shell 中输入以下命令:
代码语言:javascript复制$> ndb_mgm -e shutdown
这里的 -e
选项用于从 shell 传递命令给ndb_mgm客户端。该命令导致ndb_mgm、ndb_mgmd以及任何ndbd或ndbmtd")进程优雅地终止。任何 SQL 节点都可以使用mysqladmin shutdown和其他方法终止。在 Windows 平台上,假设您已将 SQL 节点安装为 Windows 服务,您可以使用 SC STOP service_name
或 NET STOP service_name
。
要在 Unix 平台上重新启动集群,请运行以下命令:
在管理主机(我们示例设置中的198.51.100.10
)上:
$> ndb_mgmd -f /var/lib/mysql-cluster/config.ini
在每个数据节点主机(198.51.100.30
和198.51.100.40
)上:
$> ndbd
使用ndb_mgm客户端验证两个数据节点已成功启动。
在 SQL 主机(198.51.100.20
)上:
$> mysqld_safe &
在 Windows 平台上,假设您已使用默认服务名称将所有 NDB 集群进程安装为 Windows 服务(参见 Section 25.3.2.4, “Installing NDB Cluster Processes as Windows Services”),您可以按以下方式重新启动集群:
在管理主机(我们示例设置中的198.51.100.10
)上执行以下命令:
C:> SC START ndb_mgmd
在每个数据节点主机(198.51.100.30
和198.51.100.40
)上执行以下命令:
C:> SC START ndbd
在管理节点主机上,使用ndb_mgm客户端验证管理节点和两个数据节点已成功启动(参见 Section 25.3.2.3, “Initial Startup of NDB Cluster on Windows”)。
在 SQL 节点主机(198.51.100.20
)上执行以下命令:
C:> SC START mysql
在生产环境中,通常不希望完全关闭集群。在许多情况下,即使进行配置更改或对集群硬件或软件(或两者)进行升级需要关闭单个主机,也可以通过对集群进行滚动重启而不必完全关闭集群来实现。有关如何执行此操作的更多信息,请参见第 25.6.5 节,“执行 NDB 集群的滚动重启”。
25.3.7 NDB Cluster 的升级和降级
原文:
dev.mysql.com/doc/refman/8.0/en/mysql-cluster-upgrade-downgrade.html
- 升级到 NDB 8.0 支持的版本
- 回滚 NDB Cluster 8.0 升级
- 升级或降级 NDB Cluster 时已知问题
本节提供有关 NDB Cluster 软件以及不同 NDB Cluster 8.0 版本之间的兼容性信息,涉及执行升级和降级操作。在尝试升级或降级之前,您应该已经熟悉安装和配置 NDB Cluster。请参阅第 25.4 节,“NDB Cluster 配置”。
重要提示
在 NDB 8.0 中支持 NDB
存储引擎的小版本之间的在线升级和降级。支持包含的 MySQL Server(SQL 节点mysqld)的原地升级;对于多个 SQL 节点,可以在重新启动单个mysqld 进程的同时保持 SQL 应用在线。不支持包含的 MySQL Server 的原地降级(参见第四章,“降级 MySQL”)。
在某些情况下,可能会将最近的 NDB 8.0 小版本升级回到较新版本,并恢复运行为 SQL 节点的任何 MySQL Server 实例的所需状态。如果出现这种需求或必要性,强烈建议在升级 NDB Cluster 之前对每个 SQL 节点进行完整备份。出于同样的原因,您还应该使用新版本的--ndb-schema-dist-upgrade-allowed=0
启动mysqld二进制文件,并在确保不会回退到旧版本之前不允许将其设置为 1。有关更多信息,请参阅回滚 NDB Cluster 8.0 升级。
有关从 8.0 之前版本升级到 NDB 8.0 的信息,请参阅升级到 NDB 8.0 支持的版本。
有关升级或降级 NDB 8.0 时遇到的已知问题和问题的信息,请参见升级或降级 NDB Cluster 时的已知问题。
支持升级至 NDB 8.0 的版本
支持将以下版本的 NDB Cluster 升级至 GA 版本的 NDB Cluster 8.0(8.0.19 及更高版本):
- NDB Cluster 7.6:NDB 7.6.4 及更高版本
- NDB Cluster 7.5:NDB 7.5.4 及更高版本
- NDB Cluster 7.4:NDB 7.4.6 及更高版本
要从 NDB 7.4 之前的版本系列升级,必须分阶段升级,首先升级到刚列出的版本之一,然后从该版本升级到最新的 NDB 8.0 版本。在这种情况下,建议首先升级至最新的 NDB 7.6 版本。有关从旧版本升级至 NDB 7.6 的信息,请参见升级和降级 NDB 7.6。
撤销 NDB Cluster 8.0 升级
最近将 NDB Cluster 软件升级至 NDB 8.0 版本后,可以将 NDB
软件回滚到较早版本,前提是在升级之前、集群运行较新版本期间以及将 NDB Cluster 软件回滚到较早版本之后满足某些条件。具体取决于当地情况;本节提供了关于在上述升级和回滚过程中每个点应该做什么的一般信息。
在大多数情况下,可以无问题地升级和降级数据节点,如其他地方所述;请参见第 25.6.5 节,“执行 NDB Cluster 的滚动重启”。(在执行升级或降级之前,您应执行 NDB
备份;有关如何执行此操作,请参见第 25.6.8 节,“NDB Cluster 的在线备份”。)不支持在线降级 SQL 节点,原因如下:
- 从 8.0 版本开始的mysqld如果检测到来自较新版本的 MySQL 的文件系统,则无法启动。
- 在许多情况下,mysqld 无法打开由较新版本的 MySQL 创建或修改的表。
- 在大多数情况下,mysqld无法读取由较新版本的 MySQL 创建或修改的二进制日志文件。
接下来概述的过程提供了升级集群从版本X到版本Y所需的基本步骤,同时允许将来可能回滚到X版本。 (将升级后的集群恢复到X版本的过程稍后在本节中介绍。)为此,版本X是任何 NDB 8.0 GA 版本,或任何支持升级到 NDB 8.0 的先前 NDB 版本(请参阅支持升级到 NDB 8.0 的版本),而版本Y是晚于X的 NDB 8.0 版本。
- 升级前:备份 NDB X SQL 节点状态。可以通过以下一种或多种方式完成:
- 使用诸如cp、rsync、fwbackups、Amanda 等一个或多个系统工具在静止状态下复制版本X SQL 节点文件系统的副本。
未存储在
NDB
中的任何版本X表的转储。您可以使用mysqldump生成此转储。 使用 MySQL Enterprise Backup 创建的备份;有关更多信息,请参见第 32.1 节,“MySQL Enterprise Backup 概述”。
在任何升级之前建议备份 SQL 节点,无论您是否打算将集群恢复到先前的
NDB
版本。 - 使用诸如cp、rsync、fwbackups、Amanda 等一个或多个系统工具在静止状态下复制版本X SQL 节点文件系统的副本。
未存储在
- *升级到 NDB Y:所有 NDB Y mysqld二进制文件必须使用
--ndb-schema-dist-upgrade-allowed=0
启动,以防止任何自动模式升级。(一旦降级的可能性过去,您可以安全地将相应的系统变量ndb_schema_dist_upgrade_allowed
更改回默认值 1,在mysql客户端中。)当每个 NDB Y SQL 节点启动时,它会连接到集群并同步其NDB
表模式。之后,您可以从备份中恢复 MySQL 表和状态数据。 为确保 NDB 复制的连续性,有必要以一种方式升级集群的 SQL 节点,以便在升级过程中任何给定时间点至少有一个mysqld充当复制源。有两个 SQL 节点A和B,您可以这样做:- 在使用 SQL 节点B作为复制通道时,将 SQL 节点A从 NDB 版本X升级到版本Y。这将导致A上的二进制日志在时期E1处出现间隙。
- 在所有复制应用程序消耗了 SQL 节点B过去时期E1的二进制日志后,将复制通道切换到使用 SQL 节点A。
- 将 SQL 节点B升级到 NDB 版本Y。这将导致B上的二进制日志在时期E2处出现间隙。
- 在所有复制应用程序消耗了 SQL 节点*
A
过去时期E2
*的二进制日志后,您可以再次根据需要切换复制通道以使用任一 SQL 节点。
不要对任何现有的
NDB
表使用ALTER TABLE
;在降级之前不要创建任何无法安全删除的新NDB
表。
以下过程展示了在执行如上所述的升级后,从版本*X
回滚(恢复)到版本Y
的 NDB 集群所需的基本步骤。这里,版本X
是任何 NDB 8.0 GA 版本,或任何支持升级到 NDB 8.0 的先前 NDB 版本(请参见支持升级到 NDB 8.0 的版本);版本Y
是晚于X
*的 NDB 8.0 版本。
- 回滚之前:从应保留的 NDB
Y
SQL 节点中收集任何mysqld状态信息。在大多数情况下,您可以使用mysqldump来执行此操作。 在备份状态数据后,删除自升级以来已创建或更改的所有NDB
表。 在进行任何 NDB 集群软件版本更改之前,始终建议备份 SQL 节点。 您必须为每个mysqld(SQL 节点)提供与 MySQL *X
*兼容的文件系统。您可以使用以下两种方法之一:- 通过重新初始化版本*
X
* SQL 节点的磁盘状态,创建一个新的兼容文件系统状态。您可以通过删除 SQL 节点文件系统,然后运行mysqld--initialize
来实现这一点。 - 从升级前的备份中恢复一个兼容的文件系统(参见第 9.4 节,“使用 mysqldump 进行备份”)。
- 通过重新初始化版本*
- 在
NDB
降级后:将数据节点降级为 NDBX
后,启动版本X
SQL 节点(mysqld的实例)。在每个 SQL 节点上恢复或修复任何其他所需的本地状态信息。可以通过以下操作的某种组合(0 个或多个)将 MySQLD 状态调整为必要的状态:- 初始化命令,如mysqld
--initialize
。 - 恢复从版本*
X
* SQL 节点捕获的任何所需或必要的状态信息。 - 恢复从版本*
Y
* SQL 节点捕获的任何所需或必要的状态信息。 - 执行清理操作,例如删除过时的日志,如二进制日志或中继日志,并删除任何不再有效的时间相关状态。
在降级时,为了保持 NDB 复制的连续性,需要以一种方式降级集群的 SQL 节点,以确保在降级过程中至少有一个mysqld在任何给定时间点充当复制源。这可以通过与升级 SQL 节点类似的方式来完成。有两个 SQL 节点
A
和B
,你可以在降级过程中保持二进制日志没有任何间隙,就像这样:- 以 SQL 节点
B
充当复制通道,将 SQL 节点A
从 NDB 版本Y
降级到版本 *X
。这会导致在时期F1
上的 SQL 节点A
上的二进制日志中出现间隙。 - 在所有复制应用程序消耗了 SQL 节点
B
过去时期F1
的二进制日志后,切换复制通道以使用 SQL 节点A
。 - 将 SQL 节点
B
降级到 NDB 版本X
。这会导致在时期F2
上的 SQL 节点B
上的二进制日志中出现间隙。 - 在所有复制应用程序消耗了 SQL 节点
A
过去时期F2
的二进制日志后,二进制日志的冗余性得以恢复,你可以根据需要再次使用任一 SQL 节点作为复制通道。
另请参阅 Section 25.7.7, “Using Two Replication Channels for NDB Cluster Replication”。
- 初始化命令,如mysqld
升级或降级 NDB 集群时已知的问题
在本节中,提供关于升级或降级到、从或在 NDB 8.0 版本之间发生的已知问题的信息。
我们建议您在任何 NDB 集群软件升级或降级期间不要尝试进行模式更改。以下是其中一些原因:
- 在某些数据节点启动阶段,不允许对
NDB
表执行 DDL 语句。 - 如果在执行过程中停止任何数据节点,则可能会拒绝对
NDB
表的 DDL 语句;停止每个数据节点的二进制文件(以便用目标版本的二进制文件替换)是升级或降级过程的一部分。 - 在同一集群中运行不同版本的 NDB Cluster 软件的数据节点时,不允许对
NDB
表执行 DDL 语句。
有关执行数据节点在线升级或降级的滚动重启过程的更多信息,请参阅 Section 25.6.5, “Performing a Rolling Restart of an NDB Cluster”。
在执行 NDB 8.0 的次要版本之间的在线升级时,应注意以下列表中的问题。这些问题也适用于从 NDB Cluster 的先前主要版本升级到任何已声明的 NDB 8.0 版本。
NDB 8.0.22 为 config.ini
文件中的管理节点和数据节点添加了对 IPv6 地址的支持。要在升级过程中开始使用 IPv6 地址,请执行以下步骤:
- 以通常方式将集群升级到版本 8.0.22 或更高版本的 NDB Cluster 软件。
- 将
config.ini
文件中使用的地址更改为 IPv6 地址。 - 执行集群的系统重启。
在 Linux 平台上运行 NDB 8.0.22 及更高版本时,已知问题是即使没有使用任何 IPv6 地址,操作系统内核也需要提供 IPv6 支持。此问题在 NDB 8.0.34 及更高版本中已修复(Bug #33324817,Bug #33870642)。
如果您使用的是受影响的版本,并希望在系统上禁用对 IPv6 的支持(因为您不打算为 NDB Cluster 节点使用任何 IPv6 地址),请在系统启动后执行以下操作:
代码语言:javascript复制$> sysctl -w net.ipv6.conf.all.disable_ipv6=1
$> sysctl -w net.ipv6.conf.default.disable_ipv6=1
(或者,您可以将相应行添加到 /etc/sysctl.conf
中。)在 NDB Cluster 8.0.34 及更高版本中,前述操作是不必要的,如果您不需要或不想要 IPv6 支持,可以简单地在 Linux 内核中禁用 IPv6 支持。
由于内部 mysql.ndb_schema
表的更改,如果您升级到 8.0.24 之前的 NDB 8.0 版本,则建议您使用 --ndb-schema-dist-upgrade-allowed = 0
来避免意外的中断(Bug #30876990,Bug #31016905)。
另外,如果有可能在升级到新版本后恢复到以前的 NDB Cluster 版本,您必须从新版本启动所有mysqld进程,并使用 --ndb-schema-dist-upgrade-allowed = 0
来防止对ndb_schema
表进行与旧版本不兼容的更改。有关如何执行此操作,请参阅回滚 NDB Cluster 8.0 升级。
EncryptedFileSystem
配置参数在 NDB 8.0.29 中引入,有时可能会导致撤消日志文件被加密,即使明确设置为 0
,这可能会在使用 Disk Data 表并尝试升级或降级到 NDB 8.0.29 时出现问题。在这种情况下,您可以通过在滚动重启过程中执行数据节点的初始重启来解决问题。
如果您正在使用多线程数据节点(ndbmtd)和ThreadConfig
配置参数,则在从先前版本升级到 NDB 8.0.30 或更高版本时,可能需要更改config.ini
文件中为其设置的值。在从 NDB 8.0.23 或更早版本升级时,必须显式设置在先前版本中隐含的main
、rep
、recv
或ldm
线程的任何使用。在从 NDB 8.0.23 或更高版本升级到 NDB 8.0.30 或更高版本时,必须在ThreadConfig
字符串中显式设置任何recv
线程的使用。此外,为了避免在 NDB 8.0.30 或更高版本中使用main
、rep
或ldm
线程,必须显式将给定类型的线程计数设置为0
。
以下是一个示例。
NDB 8.0.22 及更早版本:
-
config.ini
文件包含ThreadConfig=ldm
。 - 在这些版本的
NDB
中,这被解释为ThreadConfig=main,ldm,recv,rep
。 - 在
config.ini
中需要设置以下内容以匹配 NDB 8.0.30 或更高版本的效果:ThreadConfig=main,ldm,recv,rep
。
NDB 8.0.23—8.0.29:
-
config.ini
文件包含ThreadConfig=ldm
。 - 在这些版本的
NDB
中,这被解释为ThreadConfig=ldm,recv
。 - 在
config.ini
中需要设置以下内容以匹配 NDB 8.0.30 或更高版本的效果:ThreadConfig=main={count=0},ldm,recv,rep={count=0}
。
更多信息,请参阅ThreadConfig
配置参数的描述。
支持从 NDB Cluster 的先前主要版本(7.4、7.5、7.6)升级到 NDB 8.0;请参阅升级到 NDB 8.0 支持的版本,以获取具体版本信息。此类升级受到以下问题的影响:
在 NDB 8.0 中,log_bin
的默认值为 1,与之前版本有所改变。此外,从 NDB 8.0.16 开始,ndb_log_bin
的默认值从 1 改为 0,这意味着必须显式设置ndb_log_bin
为 1 才能在此版本及以后的版本中启用二进制日志记录。
在先前的发布系列中实现的 MySQL 服务器之间共享的分布式权限(请参见使用共享授权表进行分布式权限)在 NDB Cluster 8.0 中不受支持。在启动时,NDB 8.0 及更高版本提供的mysqld会检查是否存在使用NDB
存储引擎的任何授权表;如果找到任何授权表,它将使用InnoDB
创建本地副本(“影子表”)。对于每个连接到 NDB Cluster 的 MySQL 服务器都是如此。在所有作为 NDB Cluster SQL 节点的 MySQL 服务器上执行此操作后,可以使用 NDB Cluster 发行版提供的ndb_drop_table实用程序安全地删除NDB
授权表,如下所示:
ndb_drop_table -d mysql user db columns_priv tables_priv proxies_priv procs_priv
可以保留NDB
授权表,但它们不用于访问控制,实际上被忽略。
有关 NDB 8.0 中使用的 MySQL 权限系统的更多信息,请参见第 25.6.13 节,“权限同步和 NDB_STORED_USER”,以及第 8.2.3 节,“授权表”。
在将任何 NDB 7.6 之前的版本升级到任何 NDB 8.0 版本时,需要使用--initial
重新启动所有数据节点。这是因为 NDB 8.0 增加了对节点数量的支持。
尝试从 NDB 8.0 降级到以前的主要版本时遇到的问题可以在以下列表中找到:
- 由于 NDB 8.0 中对
NDB
表实现的额外元数据属性的使用方式发生了变化,导致与 NDB 7.6 和更早版本不兼容,因此在降级之前需要采取额外步骤来保留集群 SQL 节点的任何所需状态信息,然后在降级后进行恢复。 更具体地说,支持NDBCLUSTER
存储引擎的在线降级,即数据节点的降级,但 SQL 节点无法在线降级。这是因为给定 MySQL 8.0 或更早版本的 MySQL 服务器(mysqld)无法使用来自(稍后的)8.0 版本的系统文件,并且无法打开在稍后版本中创建的表。可能可以回滚最近从以前的 NDB 版本升级的集群;有关何时以及如何执行此操作,请参见回滚 NDB Cluster 8.0 升级。 有关这些问题的更多信息,请参见 NDB 表额外元数据的更改;另请参见 第十六章,MySQL 数据字典。 - 在 NDB 8.0 中,二进制配置文件格式已经改进,以支持比以前版本更多的节点。新格式对于运行旧版本
NDB
的节点不可访问,尽管新的管理服务器可以检测到旧节点并使用适当的格式与它们通信。 升级到 NDB 8.0 在这方面不应该有问题,但是旧的管理服务器无法读取更新的二进制配置文件格式,因此在从 NDB 8.0 降级到之前的主要版本时需要一些手动干预。在执行这样的降级时,需要在使用旧版NDB
软件版本启动管理之前删除任何缓存的二进制配置文件,并确保管理服务器可以读取明文配置文件。或者,您可以使用--initial
选项启动旧的管理服务器(同样,需要有config.ini
可用)。如果集群使用多个管理服务器,则必须为每个管理服务器二进制文件执行这两个操作。 与支持增加节点数量有关,由于在数据节点 LCPSysfile
中实施的不兼容更改,因此在从 NDB 8.0 在线降级到先前的主要版本时,需要重新启动所有数据节点并使用--initial
选项。 - 不支持将运行超过 48 个数据节点的集群或使用大于 48 的节点 ID 的数据节点在线降级到 NDB 8.0 之前的 NDB Cluster 版本。在这种情况下,需要减少数据节点的数量,更改所有数据节点的配置,使它们使用小于或等于 48 的节点 ID,或者根据需要同时执行这两个操作,以确保不超过旧的最大限制。
- 如果要从 NDB 8.0 降级到 NDB 7.5 或 NDB 7.4,则必须在集群配置文件中为
IndexMemory
设置一个显式值,如果尚未设置。这是因为 NDB 8.0 不使用此参数(在 NDB 7.6 中已删除),并默认将其设置为 0,而在 NDB 7.5 和 NDB 7.4 中,集群要求IndexMemory
设置为非零值,否则集群将拒绝启动并显示来自管理服务器的无效配置…。 从 NDB 8.0 降级到 NDB 7.6 不 需要设置IndexMemory
。
25.3.8 NDB Cluster 自动安装程序(不再受支持)
原文:
dev.mysql.com/doc/refman/8.0/en/mysql-cluster-installer.html
注意
此功能已从 NDB Cluster 中移除,并不再受支持。有关更多信息,请参见第 25.2.4 节,“MySQL NDB Cluster 8.0 中的新功能”。
基于 Web 的图形化配置安装程序(Auto-Installer)在 NDB 8.0.23 中已被移除,并不再作为 NDB Cluster 发行版的一部分。 :
代码语言:javascript复制```sql
ndb_drop_table -d mysql user db columns_priv tables_priv proxies_priv procs_priv
```
可以保留`NDB`授权表,但它们不用于访问控制,实际上被忽略。
有关 NDB 8.0 中使用的 MySQL 权限系统的更多信息,请参见第 25.6.13 节,“权限同步和 NDB_STORED_USER”,以及第 8.2.3 节,“授权表”。
- 在将任何 NDB 7.6 之前的版本升级到任何 NDB 8.0 版本时,需要使用
--initial
重新启动所有数据节点。这是因为 NDB 8.0 增加了对节点数量的支持。
尝试从 NDB 8.0 降级到以前的主要版本时遇到的问题可以在以下列表中找到:
- 由于 NDB 8.0 中对
NDB
表实现的额外元数据属性的使用方式发生了变化,导致与 NDB 7.6 和更早版本不兼容,因此在降级之前需要采取额外步骤来保留集群 SQL 节点的任何所需状态信息,然后在降级后进行恢复。 更具体地说,支持NDBCLUSTER
存储引擎的在线降级,即数据节点的降级,但 SQL 节点无法在线降级。这是因为给定 MySQL 8.0 或更早版本的 MySQL 服务器(mysqld)无法使用来自(稍后的)8.0 版本的系统文件,并且无法打开在稍后版本中创建的表。可能可以回滚最近从以前的 NDB 版本升级的集群;有关何时以及如何执行此操作,请参见回滚 NDB Cluster 8.0 升级。 有关这些问题的更多信息,请参见 NDB 表额外元数据的更改;另请参见 第十六章,MySQL 数据字典。 - 在 NDB 8.0 中,二进制配置文件格式已经改进,以支持比以前版本更多的节点。新格式对于运行旧版本
NDB
的节点不可访问,尽管新的管理服务器可以检测到旧节点并使用适当的格式与它们通信。 升级到 NDB 8.0 在这方面不应该有问题,但是旧的管理服务器无法读取更新的二进制配置文件格式,因此在从 NDB 8.0 降级到之前的主要版本时需要一些手动干预。在执行这样的降级时,需要在使用旧版NDB
软件版本启动管理之前删除任何缓存的二进制配置文件,并确保管理服务器可以读取明文配置文件。或者,您可以使用--initial
选项启动旧的管理服务器(同样,需要有config.ini
可用)。如果集群使用多个管理服务器,则必须为每个管理服务器二进制文件执行这两个操作。 与支持增加节点数量有关,由于在数据节点 LCPSysfile
中实施的不兼容更改,因此在从 NDB 8.0 在线降级到先前的主要版本时,需要重新启动所有数据节点并使用--initial
选项。 - 不支持将运行超过 48 个数据节点的集群或使用大于 48 的节点 ID 的数据节点在线降级到 NDB 8.0 之前的 NDB Cluster 版本。在这种情况下,需要减少数据节点的数量,更改所有数据节点的配置,使它们使用小于或等于 48 的节点 ID,或者根据需要同时执行这两个操作,以确保不超过旧的最大限制。
- 如果要从 NDB 8.0 降级到 NDB 7.5 或 NDB 7.4,则必须在集群配置文件中为
IndexMemory
设置一个显式值,如果尚未设置。这是因为 NDB 8.0 不使用此参数(在 NDB 7.6 中已删除),并默认将其设置为 0,而在 NDB 7.5 和 NDB 7.4 中,集群要求IndexMemory
设置为非零值,否则集群将拒绝启动并显示来自管理服务器的无效配置…。 从 NDB 8.0 降级到 NDB 7.6 不 需要设置IndexMemory
。
25.3.8 NDB Cluster 自动安装程序(不再受支持)
原文:
dev.mysql.com/doc/refman/8.0/en/mysql-cluster-installer.html
注意
此功能已从 NDB Cluster 中移除,并不再受支持。有关更多信息,请参见第 25.2.4 节,“MySQL NDB Cluster 8.0 中的新功能”。
基于 Web 的图形化配置安装程序(Auto-Installer)在 NDB 8.0.23 中已被移除,并不再作为 NDB Cluster 发行版的一部分。