前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >MySQL8 中文参考(八十六)

MySQL8 中文参考(八十六)

作者头像
ApacheCN_飞龙
发布2024-06-26 19:19:37
630
发布2024-06-26 19:19:37
举报
文章被收录于专栏:信数据得永生信数据得永生

原文: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 TABLETRUNCATE TABLE操作会释放该表使用的内存,以便任何NDB表重用,无论是同一表还是另一个NDB表。 注意 请记住,TRUNCATE TABLE会删除并重新创建表。请参阅第 15.1.37 节,“TRUNCATE TABLE 语句”。
  • 集群配置所施加的限制。 存在一些硬限制,可配置,但集群中可用的主内存设置了限制。请参阅第 25.4.3 节,“NDB Cluster 配置文件”中的完整配置参数列表。大多数配置参数可以在线升级。这些硬限制包括:
    • 数据库内存大小和索引内存大小(DataMemoryIndexMemory)。 DataMemory被分配为 32KB 页面。每个DataMemory页面被使用后,都会分配给特定的表;一旦分配,这个内存只能通过删除表来释放。 更多信息请参见第 25.4.3.6 节,“定义 NDB Cluster 数据节点”。
    • 每个事务中可以执行的操作的最大数量是通过配置参数MaxNoOfConcurrentOperationsMaxNoOfLocalOperations来设置的。 注意 批量加载、TRUNCATE TABLEALTER 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 COMMITTEDREAD UNCOMMITTEDREPEATABLE READSERIALIZABLE。)您应该记住,NDB 在每行基础上实现了 READ COMMITTED;当读取请求到达存储该行的数据节点时,返回的是该时刻该行的最后提交版本。

未提交数据永远不会返回,但是当修改多行的事务与读取相同行的事务同时提交时,执行读取的事务可能会观察到这些行中的不同行的“之前”值、“之后”值或两者,这是因为给定行读取请求可以在另一个事务提交之前或之后处理。

为确保给定事务仅读取之前或之后的值,您可以使用 SELECT ... LOCK IN SHARE MODE 强制施加行锁。在这种情况下,锁将保持直到拥有事务提交。使用行锁还可能导致以下问题:

  • 锁等待超时错误频率增加,并发性降低
  • 由于读取需要提交阶段,事务处理开销增加
  • 可能耗尽可用并发锁数量的可能性,这由 MaxNoOfConcurrentOperations 限制

NDB 在所有读取操作中使用 READ COMMITTED,除非使用诸如 LOCK IN SHARE MODEFOR UPDATE 等修饰符。LOCK IN SHARE MODE 导致使用共享行锁;FOR UPDATE 导致使用独占行锁。唯一键读取会被 NDB 自动升级锁以确保自洽读取;BLOB 读取也会为了一致性而使用额外的锁定。

参见 第 25.6.8.4 节,“NDB 集群备份故障排除”,了解 NDB 集群的事务隔离级别实现如何影响 NDB 数据库的备份和恢复。

事务和 BLOB 或 TEXT 列。 NDBCLUSTER仅在 MySQL 可见的表中存储使用 MySQL 的任何BLOBTEXT数据类型的列值的一部分;BLOBTEXT的其余部分存储在一个不可访问的单独内部表中。这会引发两个相关问题,您在执行包含这些类型列的表上的SELECT语句时应该注意:

对于从 NDB Cluster 表中的任何SELECT:如果SELECT包括BLOBTEXT列,则READ COMMITTED事务隔离级别会转换为带读锁的读取。这样做是为了保证一致性。

对于任何使用唯一键查找来检索使用任何BLOBTEXT数据类型的列的SELECT,并且在事务内执行的情况下,表上会持有一个共享读锁,直到事务要么提交要么中止。

对于使用索引或表扫描的查询,即使针对具有BLOBTEXT列的NDB表,也不会出现此问题。

例如,考虑以下CREATE TABLE语句定义的表t

代码语言:javascript
复制
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的以下查询会导致共享读锁,因为它使用了唯一键查找:

代码语言:javascript
复制
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;

这是因为在这四个查询中,第一个使用索引扫描,第二和第三使用表扫描,而第四个虽然使用主键查找,但不检索任何BLOBTEXT列的值。

通过避免检索BLOBTEXT列的唯一键查找查询,或者在无法避免这类查询的情况下,尽快提交事务,可以帮助最小化共享读锁的问题。

唯一键查找和事务隔离。 使用隐藏索引表在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 DATANDB表上使用时不具有事务性。 重要提示 在执行LOAD DATA语句时,NDB引擎以不规则的间隔执行提交,以便更好地利用通信网络。无法提前知道这些提交何时发生。
  • ALTER TABLE 和事务。 在作为ALTER TABLE的一部分复制NDB表时,复制的创建是非事务性的。(无论如何,当复制被删除时,此操作会被回滚。)

事务和 COUNT() 函数。 在使用 NDB Cluster Replication 时,无法保证副本上COUNT()函数的事务一致性。换句话说,在源上执行一系列语句(INSERTDELETE或两者)以在单个事务中更改表中的行数时,在副本上执行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 字节增加)。 每个BLOBTEXT列对此总数贡献了 256 + 8 = 264 字节;这包括JSON列。有关这些类型的更多信息,请参阅字符串类型存储要求以及 JSON 存储要求。 此外,NDB表的固定宽度列的最大偏移量为 8188 字节;试图创建违反此限制的表将导致 NDB 错误 851 最大固定大小列偏移量超过。对于基于内存的列,您可以通过使用诸如VARCHAR这样的可变宽度列类型或将列定义为COLUMN_FORMAT=DYNAMIC来解决此限制;这对于存储在磁盘上的列不起作用。对于基于磁盘的列,您可以通过重新排列一个或多个表的基于磁盘的列,使得除了在用于创建表的CREATE TABLE语句中最后定义的基于磁盘的列之外的所有列的组合宽度不超过 8188 字节,减去某些数据类型(如CHARVARCHAR)可能执行的任何可能的舍入;否则,必须使用内存存储来替代一个或多个有问题的列。
  • 每个表的 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 TABLEALTER TABLECREATE INDEX)的索引规范中使用前缀,则NDB不会创建前缀。

包含索引前缀的语句,并创建或修改NDB表,仍必须在语法上有效。例如,以下语句始终失败,显示错误 1089 不正确的前缀键; 使用的键部分不是字符串,使用的长度比键部分长,或存储引擎不支持唯一前缀键,无论存储引擎如何:

代码语言:javascript
复制
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存储引擎的顺序访问,存在查询性能问题;相对于MyISAMInnoDB,进行许多范围扫描的成本也更高。
  • 范围内记录的可靠性。 Records in range统计信息可用,但尚未完全测试或官方支持。这可能导致某些情况下的非最佳查询计划。如有必要,您可以使用USE INDEXFORCE 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
  • 模式操作。 在任何数据节点重新启动时,模式操作(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_ReadLM_Exclusive来启动。有关如何执行此操作的更多信息,请参阅NDB Cluster API GuideNdbOperation::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:\WINDOWS\system32\drivers\etc\hosts,或者您操作系统的等效文件)来提供主机查找的方法(如果可用)。

从 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 发行版)在安装过程中设置系统自身主机名的方式而引起的。考虑两台主机名为ndb1ndb2的机器,都在cluster网络域中。Red Hat Linux(包括一些衍生版如 CentOS 和 Fedora)将以下条目放在这些机器的/etc/hosts文件中:

代码语言:javascript
复制
#  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文件中:

代码语言:javascript
复制
#  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

在这两种情况下,ndb1ndb1.cluster路由到一个环回 IP 地址,但从 DNS 获取ndb2.cluster的公共 IP 地址,而ndb2ndb2.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);数据节点需要数据节点守护程序(ndbdndbmtd)。在管理节点主机和数据节点主机上安装 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 用户添加到此组中:

代码语言:javascript
复制
$> groupadd mysql
$> useradd -g mysql -s /bin/false mysql

useraddgroupadd 的语法在不同版本的 Unix 上可能略有不同,或者可能有不同的名称,如 adduseraddgroup

切换到包含下载文件的目录,解压缩存档,并创建一个名为 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 来设置系统数据库,如下所示:

代码语言:javascript
复制
$> 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(即在使用sudosu root或您系统的等效方式暂时假���系统管理员帐户特权之后),执行以下步骤在数据节点主机上安装数据节点二进制文件:

将位置更改为/var/tmp目录,并从存档中提取ndbdndbmtd")二进制文件到适当的目录,如/usr/local/bin

代码语言:javascript
复制
$> 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_mgmndb_mgmd已复制到可执行文件目录中,您可以安全地删除从/var/tmp解压下载的存档创建的目录及其包含的文件。)

将位置更改为您复制文件的目录,然后使这两个文件都可执行:

代码语言:javascript
复制
$> cd /usr/local/bin
$> chmod +x ndb*

上述步骤应在每个数据节点主机上重复执行。

虽然只需要运行一个数据节点可执行文件来运行 NDB 集群数据节点,但我们在前面的说明中已经向您展示了如何安装ndbdndbmtd。我们建议您在安装或升级 NDB 集群时执行此操作,即使您打算只使用其中一个,因为这样可以节省时间和麻烦,以防以后决定从一个切换到另一个。

注意

每台托管数据节点的机器上的数据目录是/usr/local/mysql/data。在配置管理节点时,这些信息至关重要。(参见第 25.3.3 节,“NDB 集群的初始配置”。)

管理节点。 安装管理节点不需要mysqld二进制文件。只需要 NDB 集群管理服务器(ndb_mgmd);您很可能也想安装管理客户端(ndb_mgm)。这两个二进制文件也可以在.tar.gz存档文件中找到。同样,我们假设您已将此存档文件放在/var/tmp中。

作为系统root,执行以下步骤在管理节点主机上安装ndb_mgmdndb_mgm

切换到/var/tmp目录,并将ndb_mgmndb_mgmd从存档中提取到一个合适的目录,如/usr/local/bin

代码语言:javascript
复制
$> 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_mgmndb_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 的发行版:

  • 对于使用yumdnf的发行版,您可以使用 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 文件)。此文件的名称遵循此处显示的模式:

代码语言:javascript
复制
mysql-cluster-*license*-*ver*-*rev*.*distro*.*arch*.rpm-bundle.tar

您可以使用 tar 或您喜欢的提取存档工具从此文件中提取单独的 RPM 文件。

安装三种主要类型的 NDB 集群节点所需的组件列在以下列表中:

  • 管理节点: management-server
  • 数据节点: data-node
  • SQL 节点: servercommon

另外,应安装 client RPM 以在至少一个管理节点上提供 ndb_mgm 管理客户端。您可能还希望在 SQL 节点上安装它,以便在这些节点上提供 mysql 和其他 MySQL 客户端程序。我们稍后在本节讨论按类型安装节点。

ver 表示以 8.0.x 格式显示的三部分 NDB 存储引擎版本号,示例中显示为 8.0.34rev 提供了以 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 的名称:

代码语言:javascript
复制
$> rpm -Uhv mysql-cluster-community-data-node-8.0.34-1.el7.x86_64.rpm

这将在/usr/sbin中安装ndbdndbmtd数据节点二进制文件。这两者中的任何一个都可以用于在此主机上运行数据节点进程。

SQL 节点。servercommon RPM 复制到每台用于托管 NDB 集群 SQL 节点的机器上(server 需要common)。以系统 root 用户身份执行以下命令安装server RPM,根据需要替换从 MySQL 网站下载的 RPM 的名称:

代码语言:javascript
复制
$> rpm -Uhv mysql-cluster-community-server-8.0.34-1.el7.x86_64.rpm

这将在/usr/sbin目录中安装 MySQL 服务器二进制文件(mysqld),支持NDB存储引擎。它还安装了所有必需的 MySQL 服务器支持文件和有用的 MySQL 服务器程序,包括mysql.servermysqld_safe启动脚本(分别位于/usr/share/mysql/usr/bin)。RPM 安装程序应自动处理一般配置问题(例如自动创建mysql用户和组,如果需要)。

重要

您必须使用为 NDB 集群发布的这些 RPM 版本;为标准 MySQL 服务器发布的版本不支持NDB存储引擎。

要管理 SQL 节点(MySQL 服务器),您还应安装client RPM,如下所示:

代码语言:javascript
复制
$> rpm -Uhv mysql-cluster-community-client-8.0.34-1.el7.x86_64.rpm

这将安装mysql客户端和其他 MySQL 客户端程序,如mysqladminmysqldump/usr/bin

管理节点。 要安装 NDB 集群管理服务器,只需使用management-server RPM。将此 RPM 复制到打算托管管理节点的计算机上,然后以系统根用户身份运行以下命令进行安装(根据需要替换从 MySQL 网站下载的management-server RPM 的名称):

代码语言:javascript
复制
$> 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_descndb_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 的名称:

代码语言:javascript
复制
$> rpm -Uhv MySQL-Cluster-server-gpl-8.0.34-1.sles11.i386.rpm

尽管这会安装所有 NDB 集群二进制文件,但实际上只需要运行 NDB 集群数据节点的程序ndbdndbmtd")(都在/usr/sbin中)。

SQL 节点。 在每台用于托管集群 SQL 节点的计算机上,以系统根用户身份执行以下命令安装server RPM,根据需要替换从 MySQL 网站下载的 RPM 的名称:

代码语言:javascript
复制
$> rpm -Uhv MySQL-Cluster-server-gpl-8.0.34-1.sles11.i386.rpm

这将在/usr/sbin目录中安装带有NDB存储引擎支持的 MySQL 服务器二进制文件(mysqld),以及所有所需的 MySQL 服务器支持文件。它还安装了mysql.servermysqld_safe启动脚本(分别位于/usr/share/mysql/usr/bin)。RPM 安装程序应自动处理一般配置问题(例如,如有需要,创建mysql用户和组)。

要管理 SQL 节点(MySQL 服务器),您还应安装client RPM,如下所示:

代码语言:javascript
复制
$> rpm -Uhv MySQL-Cluster-client-gpl-8.0.34-1.sles11.i386.rpm

这将安装mysql客户端程序。

管理节点。 要安装 NDB Cluster 管理服务器,只需使用server RPM。将此 RPM 复制到打算托管管理节点的计算机上,然后以系统 root 用户身份运行以下命令进行安装(根据需要替换从 MySQL 网站下载的server RPM 的名称):

代码语言:javascript
复制
$> rpm -Uhv MySQL-Cluster-server-gpl-8.0.34-1.sles11.i386.rpm

尽管此 RPM 安装了许多其他文件,但实际上只需要管理服务器二进制文件ndb_mgmd(位于/usr/sbin目录)来运行管理节点。server RPM 还安装了ndb_mgmNDB管理客户端。

有关使用 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 版本和架构,此文件的命名遵循此模式:

代码语言:javascript
复制
mysql-cluster-gpl-*ndbver*-debian*debianver*-*arch*.deb

这里,ndbverNDB 引擎版本号的三部分,debianver 是 Debian 的主要版本号(89),archi686x86_64 中的一个。在接下来的示例中,我们假设您希望在 64 位 Debian 9 系统上安装 NDB 8.0.34;在这种情况下,安装文件名为 mysql-cluster-gpl-8.0.34-debian9-x86_64.deb-bundle.tar

下载适当的 .deb 文件后,您可以解压缩它,然后使用 dpkg 命令行安装,如下所示:

代码语言:javascript
复制
$> dpkg -i mysql-cluster-gpl-8.0.34-debian9-i686.deb

您也可以像下面这样使用 dpkg 进行卸载:

代码语言:javascript
复制
$> 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 中,情况已经不再是这样了—这两个产品现在都是从相同的源代码构建的

CMakeWITH_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_mgmdndb_mgm)可以在 /usr/local/mysql/bin 中找到。在管理节点主机上只需要存在 ndb_mgmd;但是,在同一主机上也有 ndb_mgm 是个好主意。这两个可执行文件都不需要在主机文件系统上的特定位置。

数据节点。 数据节点主机上唯一需要的可执行文件是数据节点二进制文件 ndbdndbmtd。(例如,mysqld 不需要存在于主机机器上。)默认情况下,从源代码构建时,此文件放置在目录 /usr/local/mysql/bin 中。对于在多个数据节点主机上安装,只需将 ndbdndbmtd 复制到其他主机机器上即可。(这假设所有数据节点主机使用相同的架构和操作系统;否则,您可能需要为每个不同平台单独编译。)数据节点二进制文件不需要在主机文件系统上的任何特定位置,只要位置已知即可。

当从源代码编译 NDB Cluster 时,构建多线程数据节点二进制文件不需要特殊选项。配置构建时使用 NDB 存储引擎支持会自动构建 ndbmtdmake installndbmtd 二进制文件放置在安装的 bin 目录中,与 mysqldndbdndb_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.57.68.0latest)。如果省略了:*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 网络:

代码语言:javascript
复制
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客户端登录到服务器并更改密码:

代码语言:javascript
复制
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命令以打印集群的状态。您应该看到以下内容:

代码语言:javascript
复制
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标志加载外部文件。例如(将整个命令输入在同一行):

代码语言:javascript
复制
$> 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.exendbmtd.exe"))。在本示例中,我们将 ndbd.exe 称为数据节点可执行文件,但您也可以安装 ndbmtd.exe"),这是该程序的多线程版本,方式完全相同。您还应该在管理服务器主机上安装管理客户端 (ndb_mgm.exe)。本节涵盖了为每种类型的 NDB Cluster 节点安装正确的 Windows 二进制文件所需的步骤。

注意

与其他 Windows 程序一样,NDB Cluster 可执行文件的文件扩展名为.exe。但是,在从命令行调用这些程序时,不需要包含.exe扩展名。因此,在本文档中,我们通常简称这些程序为mysqldmysqlndb_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,其中*verNDB存储引擎版本(例如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 Documents\Downloads中,其中*username*是当前用户的名称。(您可以在命令行上使用ECHO %USERNAME%获取此名称。)要将 NDB Cluster 可执行文件安装并运行为 Windows 服务,此用户应为Administrators组的成员。

从存档中提取所有文件。与 Windows 资源管理器集成的提取向导足以完成此任务。(如果您使用不同的存档程序,请确保它从存档中提取所有文件和目录,并保留存档的目录结构。)当要求输入目标目录时,请输入C:\,这将导致提取向导将存档提取到目录C:\mysql-cluster-gpl-*ver*-win*arch*。将此目录重命名为C:\mysql

可以将 NDB Cluster 二进制文件安装到除C:\mysql\bin之外的目录;但是,如果这样做,必须相应地修改本过程中显示的路径。特别是,如果 MySQL Server(SQL 节点)二进制文件安装到除C:\mysqlC:\Program Files\MySQL\MySQL Server 8.0之外的位置,或者如果 SQL 节点的数据目录位于除C:\mysql\dataC:\Program Files\MySQL\MySQL Server 8.0\data之外的位置,则在启动 SQL 节点时必须在命令行上使用额外的配置选项或将其添加到my.inimy.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启动。虽然可以在命令行上指定这些选项,但通常更方便将它们放在一个选项文件中。为此,请在记事本或其他文本编辑器中创建一个新的文本文件。将以下配置信息输入到此文件中:

代码语言:javascript
复制
[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:\mysql\my.ini。这完成了 SQL 节点的安装和设置。

数据节点。 Windows 主机上的 NDB Cluster 数据节点只需要一个可执行文件,即ndbd.exendbmtd.exe")之一。在本示例中,我们假设您正在使用ndbd.exe,但当使用ndbmtd.exe")时,相同的说明也适用。在每台计算机上,您希望运行数据节点的计算机(具有 IP 地址 198.51.100.30 和 198.51.100.40),创建目录C:\mysqlC:\mysql\binC:\mysql\cluster-data;然后,在您下载并解压no-install存档的计算机上,将ndbd.exe定位于C:\mysql\bin目录。将此文件复制到两个数据节点主机上的C:\mysql\bin目录。

要作为 NDB 集群的一部分运行,每个数据节点必须提供管理服务器的地址或主机名。您可以在启动每个数据节点进程时使用 --ndb-connectstring-c 选项在命令行上提供此信息。然而,通常最好将此信息放在一个选项文件中。为此,请在记事本或其他文本编辑器中创建一个新的文本文件,并输入以下文本:

代码语言:javascript
复制
[mysql_cluster]
# Options for data node process:
ndb-connectstring=198.51.100.10 # location of management server

将此文件保存为 C:\mysql\my.ini,保存在数据节点主机上。创建另一个文本文件,其中包含相同的信息,并将其保存为 C:mysql\my.ini,保存在另一个数据节点主机上,或者将第一个数据节点主机上的 my.ini 文件复制到第二个数据节点主机上,确保将副本放在第二个数据节点的 C:\mysql 目录中。现在,两个数据节点主机已准备好用于 NDB 集群,只剩下安装和配置管理节点。

管理节点。 在用于托管 NDB 集群管理节点的计算机上唯一需要的可执行程序是管理服务器程序 ndb_mgmd.exe。然而,为了在启动 NDB 集群后对其进行管理,您还应该在与管理服务器相同的计算机上安装 NDB 集群管理客户端程序 ndb_mgm.exe。在您下载和提取 no-install 存档的计算机上找到这两个程序;这应该是 SQL 节点主机上的目录 C:\mysql\bin。在具有 IP 地址 198.51.100.10 的计算机上创建目录 C:\mysql\bin,然后将这两个程序复制到该目录。

现在,您应该为 ndb_mgmd.exe 创建两个配置文件:

一个本地配置文件,提供特定于管理节点本身的配置数据。通常,此文件只需要提供 NDB 集群全局配置文件的位置(参见项目 2)。

要创建此文件,请在记事本或其他文本编辑器中启动一个新的文本文件,并输入以下信息:

代码语言:javascript
复制
[mysql_cluster]
# Options for management node process
config-file=C:/mysql/bin/config.ini

将此文件保存为文本文件 C:\mysql\bin\my.ini

一个全局配置文件,管理节点可以从中获取管理整个 NDB 集群的配置信息。至少,此文件必须包含 NDB 集群中每个节点的部分,并且管理节点和所有数据节点的 IP 地址或主机名(HostName 配置参数)。还建议包括以下附加信息:

  • 任何 SQL 节点的 IP 地址或主机名
  • 分配给每个数据节点的数据内存和索引内存(DataMemoryIndexMemory 配置参数)
  • 使用 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:\mysql\bin\config.ini

重要提示

在 Windows 上,当在程序选项或 NDB Cluster 使用的配置文件中指定目录路径时,不能使用单个反斜杠字符(\)。相反,你必须要么用第二个反斜杠字符(\\)转义每个反斜杠字符,要么用正斜杠字符(/)替换反斜杠。例如,NDB Cluster config.ini 文件中 [ndb_mgmd] 部分的以下行不起作用:

代码语言:javascript
复制
DataDir=C:\mysql\bin\cluster-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:\mysql\bin> 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:\mysql\bin> 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:\mysql\bin中。(不要尝试在运行ndb_mgmd.exe的控制台窗口中重新使用,因为这会终止管理节点。)生成的输出应如下所示:

代码语言:javascript
复制
C:\mysql\bin> ndb_mgm
-- NDB Cluster -- Management Client --
ndb_mgm>

当出现提示符ndb_mgm>时,这表示管理客户端已准备好接收 NDB 集群管理命令。您可以通过在管理客户端提示符处输入ALL STATUS来观察数据节点的启动状态。此命令会导致数据节点启动序列的运行报告,应该看起来像这样:

代码语言:javascript
复制
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:\mysql\bin)。

通过从命令行调用mysqld.exe来启动 SQL 节点,如下所示:

代码语言:javascript
复制
C:\mysql\bin> mysqld --console

--console选项会导致日志信息写入控制台,在出现问题时可能会有所帮助。(一旦您确信 SQL 节点以令人满意的方式运行,您可以停止它并重新启动,而不使用--console选项,以便正常执行日志记录。)

在管理节点主机上运行管理客户端(ndb_mgm.exe)的控制台窗口中,输入SHOW命令,应该会产生类似于这里显示的输出:

代码语言:javascript
复制
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.exendbd.exendbmtd.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 STARTSC STOP命令,或使用 Windows 图形Services实用程序来控制这些进程。也可以使用NET STARTNET STOP命令。

通常必须使用具有系统管理员权限的帐户来将程序安装为 Windows 服务。

要在 Windows 上将管理节点安装为服务,请在托管管理节点的计算机上使用命令行调用ndb_mgmd.exe,使用--install选项,如下所示:

代码语言:javascript
复制
C:\> C:\mysql\bin\ndb_mgmd.exe --install
Installing service 'NDB Cluster Management Server'
  as '"C:\mysql\bin\ndbd.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选项中,如下例所示:

代码语言:javascript
复制
C:\> C:\mysql\bin\ndb_mgmd.exe --install=mgmd1
Installing service 'NDB Cluster Management Server'
  as '"C:\mysql\bin\ndb_mgmd.exe" "--service=mgmd1"'
Service successfully installed.

现在您应该能够使用您指定的名称启动或停止服务,就像这样:

代码语言:javascript
复制
C:\> SC START mgmd1

C:\> SC STOP mgmd1

要删除管理节点服务,请使用SC DELETE service_name

代码语言:javascript
复制
C:\> SC DELETE mgmd1

或者,使用ndb_mgmd.exe并带上--remove选项,如下所示:

代码语言:javascript
复制
C:\> C:\mysql\bin\ndb_mgmd.exe --remove
Removing service 'NDB Cluster Management Server'
Service successfully removed.

如果使用非默认服务名称安装服务,请将服务名称作为ndb_mgmd.exe --remove选项的值传递,如下所示:

代码语言:javascript
复制
C:\> C:\mysql\bin\ndb_mgmd.exe --remove=mgmd1
Removing service 'mgmd1'
Service successfully removed.

将 NDB Cluster 数据节点进程安装为 Windows 服务的操作方式类似,使用ndbd.exe--install选项(或ndbmtd.exe")),如下所示:

代码语言:javascript
复制
C:\> C:\mysql\bin\ndbd.exe --install
Installing service 'NDB Cluster Data Node Daemon' as '"C:\mysql\bin\ndbd.exe" "--service=ndbd"'
Service successfully installed.

现在您可以按照以下示例启动或停止数据节点:

代码语言:javascript
复制
C:\> SC START ndbd

C:\> SC STOP ndbd

要删除数据节点服务,请使用SC DELETE service_name

代码语言:javascript
复制
C:\> SC DELETE ndbd

或者,使用ndbd.exe并带上--remove选项,如下所示:

代码语言:javascript
复制
C:\> C:\mysql\bin\ndbd.exe --remove
Removing service 'NDB Cluster Data Node Daemon'
Service successfully removed.

ndb_mgmd.exe(和mysqld.exe)一样,当将ndbd.exe安装为 Windows 服务时,也可以指定服务名称作为--install的值,然后在启动或停止服务时使用它,如下所示:

代码语言:javascript
复制
C:\> C:\mysql\bin\ndbd.exe --install=dnode1
Installing service 'dnode1' as '"C:\mysql\bin\ndbd.exe" "--service=dnode1"'
Service successfully installed.

C:\> SC START dnode1

C:\> SC STOP dnode1

如果在安装数据节点服务时指定了服务名称,那么在删除时也可以使用该名称,如下所示:

代码语言:javascript
复制
C:\> SC DELETE dnode1

或者,可以将服务名称作为ndbd.exe --remove选项的值传递,如下所示:

代码语言:javascript
复制
C:\> C:\mysql\bin\ndbd.exe --remove=dnode1
Removing service 'dnode1'
Service successfully removed.

将 SQL 节点安装为 Windows 服务,启动服务,停止服务和删除服务的操作方式类似,使用mysqld --installSC STARTSC STOPSC 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目录中,并且可以使用任何文本编辑器进行编辑(如果文件不存在,则创建文件)。例如:

代码语言:javascript
复制
$> vi /etc/my.cnf

注意

我们在这里展示使用vi创建文件,但任何文本编辑器都可以正常工作。

对于我们示例设置中的每个数据节点和 SQL 节点,my.cnf应该如下所示:

代码语言:javascript
复制
[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]部分中使用了ndbclusterndb-connectstring参数启动了一个mysqld进程,您就不能在实际启动集群之前执行任何CREATE TABLEALTER TABLE语句。否则,这些语句将失败并显示错误。这是设计上的限制。

配置管理节点。 配置管理节点的第一步是创建包含配置文件的目录,然后创建文件本身。例如(以root身份运行):

代码语言:javascript
复制
$> mkdir /var/lib/mysql-cluster
$> cd /var/lib/mysql-cluster
$> vi config.ini

对于我们的代表性设置,config.ini文件应该如下所示:

代码语言:javascript
复制
[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=NDBCLUSTERENGINE=NDB选项来指定:

代码语言:javascript
复制
CREATE TABLE *tbl_name* (*col_name* *column_definitions*) ENGINE=NDBCLUSTER;

或者,对于使用不同存储引擎的现有表,可以使用ALTER TABLE将表更改为使用NDBCLUSTER

代码语言:javascript
复制
ALTER TABLE *tbl_name* ENGINE=NDBCLUSTER;

每个NDBCLUSTER表都有一个主键。如果用户在创建表时没有定义主键,NDBCLUSTER存储引擎会自动生成一个隐藏的主键。这样的主键占用空间,就像任何其他表索引一样。(由于内存不足以容纳这些自动生成的索引,遇到问题并不罕见。)

如果您正在使用mysqldump的输出从现有数据库导入表,您可以在文本编辑器中打开 SQL 脚本,并为任何表创建语句添加ENGINE选项,或替换任何现有的ENGINE选项。假设您在另一个不支持 NDB Cluster 的 MySQL 服务器上有world示例数据库,并且想要导出City表:

代码语言:javascript
复制
$> mysqldump --add-drop-table world City > city_table.sql

生成的city_table.sql文件包含此表创建语句(以及导入表数据所需的INSERT语句):

代码语言:javascript
复制
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选项如下:

代码语言:javascript
复制
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,并按照通常的方式创建和填充相应的表:

代码语言:javascript
复制
$> mysql world < city_table.sql

非常重要的一点是要记住,前述命令必须在运行 SQL 节点的主机上执行(在本例中,在具有 IP 地址198.51.100.20的机器上)。

要在 SQL 节点上创建整个world数据库的副本,请在非集群服务器上使用mysqldump将数据库导出到名为world.sql的文件中(例如,在/tmp目录中)。然后按照刚才描述的方式修改表定义,并将文件导入到集群的 SQL 节点中:

代码语言:javascript
复制
$> mysql world < /tmp/world.sql

如果您将文件保存到不同位置,请相应调整前述说明。

在 SQL 节点上运行SELECT查询与在任何其他 MySQL 服务器实例上运行它们没有任何区别。要从命令行运行查询,您首先需要以通常的方式登录到 MySQL Monitor(在Enter password:提示处指定root密码):

代码语言:javascript
复制
$> 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子句,则应在此时运行以下语句:

代码语言:javascript
复制
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语句:

代码语言:javascript
复制
<!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_mgmndb_mgmd以及任何ndbdndbmtd")进程优雅地终止。任何 SQL 节点都可以使用mysqladmin shutdown和其他方法终止。在 Windows 平台上,假设您已将 SQL 节点安装为 Windows 服务,您可以使用 SC STOP service_nameNET STOP service_name

要在 Unix 平台上重新启动集群,请运行以下命令:

在管理主机(我们示例设置中的198.51.100.10)上:

代码语言:javascript
复制
$> ndb_mgmd -f /var/lib/mysql-cluster/config.ini

在每个数据节点主机(198.51.100.30198.51.100.40)上:

代码语言:javascript
复制
$> ndbd

使用ndb_mgm客户端验证两个数据节点已成功启动。

在 SQL 主机(198.51.100.20)上:

代码语言:javascript
复制
$> mysqld_safe &

在 Windows 平台上,假设您已使用默认服务名称将所有 NDB 集群进程安装为 Windows 服务(参见 Section 25.3.2.4, “Installing NDB Cluster Processes as Windows Services”),您可以按以下方式重新启动集群:

在管理主机(我们示例设置中的198.51.100.10)上执行以下命令:

代码语言:javascript
复制
C:\> SC START ndb_mgmd

在每个数据节点主机(198.51.100.30198.51.100.40)上执行以下命令:

代码语言:javascript
复制
C:\> SC START ndbd

在管理节点主机上,使用ndb_mgm客户端验证管理节点和两个数据节点已成功启动(参见 Section 25.3.2.3, “Initial Startup of NDB Cluster on Windows”)。

在 SQL 节点主机(198.51.100.20)上执行以下命令:

代码语言:javascript
复制
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 节点状态。可以通过以下一种或多种方式完成:
    • 使用诸如cprsyncfwbackups、Amanda 等一个或多个系统工具在静止状态下复制版本X SQL 节点文件系统的副本。 未存储在NDB中的任何版本X表的转储。您可以使用mysqldump生成此转储。 使用 MySQL Enterprise Backup 创建的备份;有关更多信息,请参见第 32.1 节,“MySQL Enterprise Backup 概述”。

    在任何升级之前建议备份 SQL 节点,无论您是否打算将集群恢复到先前的NDB版本。

  • *升级到 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 节点AB,您可以这样做:
    1. 在使用 SQL 节点B作为复制通道时,将 SQL 节点A从 NDB 版本X升级到版本Y。这将导致A上的二进制日志在时期E1处出现间隙。
    2. 在所有复制应用程序消耗了 SQL 节点B过去时期E1的二进制日志后,将复制通道切换到使用 SQL 节点A
    3. 将 SQL 节点B升级到 NDB 版本Y。这将导致B上的二进制日志在时期E2处出现间隙。
    4. 在所有复制应用程序消耗了 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降级后:将数据节点降级为 NDB X后,启动版本X SQL 节点(mysqld的实例)。在每个 SQL 节点上恢复或修复任何其他所需的本地状态信息。可以通过以下操作的某种组合(0 个或多个)将 MySQLD 状态调整为必要的状态:
    • 初始化命令,如mysqld --initialize
    • 恢复从版本*X* SQL 节点捕获的任何所需或必要的状态信息。
    • 恢复从版本*Y* SQL 节点捕获的任何所需或必要的状态信息。
    • 执行清理操作,例如删除过时的日志,如二进制日志或中继日志,并删除任何不再有效的时间相关状态。

    在降级时,为了保持 NDB 复制的连续性,需要以一种方式降级集群的 SQL 节点,以确保在降级过程中至少有一个mysqld在任何给定时间点充当复制源。这可以通过与升级 SQL 节点类似的方式来完成。有两个 SQL 节点 AB,你可以在降级过程中保持二进制日志没有任何间隙,就像这样:

    1. 以 SQL 节点 B 充当复制通道,将 SQL 节点 A 从 NDB 版本 Y 降级到版本 *X。这会导致在时期 F1 上的 SQL 节点 A 上的二进制日志中出现间隙。
    2. 在所有复制应用程序消耗了 SQL 节点 B 过去时期 F1 的二进制日志后,切换复制通道以使用 SQL 节点 A
    3. 将 SQL 节点 B 降级到 NDB 版本 X。这会导致在时期 F2 上的 SQL 节点 B 上的二进制日志中出现间隙。
    4. 在所有复制应用程序消耗了 SQL 节点 A 过去时期 F2 的二进制日志后,二进制日志的冗余性得以恢复,你可以根据需要再次使用任一 SQL 节点作为复制通道。

    另请参阅 Section 25.7.7, “Using Two Replication Channels for NDB Cluster Replication”。

升级或降级 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 地址,请执行以下步骤:

  1. 以通常方式将集群升级到版本 8.0.22 或更高版本的 NDB Cluster 软件。
  2. config.ini 文件中使用的地址更改为 IPv6 地址。
  3. 执行集群的系统重启。

在 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 或更早版本升级时,必须显式设置在先前版本中隐含的mainreprecvldm线程的任何使用。在从 NDB 8.0.23 或更高版本升级到 NDB 8.0.30 或更高版本时,必须在ThreadConfig字符串中显式设置任何recv线程的使用。此外,为了避免在 NDB 8.0.30 或更高版本中使用mainrepldm线程,必须显式将给定类型的线程计数设置为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授权表,如下所示:

代码语言:javascript
复制
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可用)。如果集群使用多个管理服务器,则必须为每个管理服务器二进制文件执行这两个操作。 与支持增加节点数量有关,由于在数据节点 LCP Sysfile 中实施的不兼容更改,因此在从 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可用)。如果集群使用多个管理服务器,则必须为每个管理服务器二进制文件执行这两个操作。 与支持增加节点数量有关,由于在数据节点 LCP Sysfile 中实施的不兼容更改,因此在从 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 发行版的一部分。

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2024-06-24,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 25.3 NDB Cluster 安装
  • 25.3.1 在 Linux 上安装 NDB 集群
  • 25.3.2 在 Windows 上安装 NDB 集群
  • 25.3.3 NDB 集群的初始配置
  • 25.3.4 NDB Cluster 的初始启动
  • 25.3.5 带有表和数据的 NDB Cluster 示例
  • 25.3.6 安全关闭和重启 NDB 集群
  • 25.3.7 NDB Cluster 的升级和降级
  • 25.3.8 NDB Cluster 自动安装程序(不再受支持)
  • 25.3.8 NDB Cluster 自动安装程序(不再受支持)
相关产品与服务
云数据库 MySQL
腾讯云数据库 MySQL(TencentDB for MySQL)为用户提供安全可靠,性能卓越、易于维护的企业级云数据库服务。其具备6大企业级特性,包括企业级定制内核、企业级高可用、企业级高可靠、企业级安全、企业级扩展以及企业级智能运维。通过使用腾讯云数据库 MySQL,可实现分钟级别的数据库部署、弹性扩展以及全自动化的运维管理,不仅经济实惠,而且稳定可靠,易于运维。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档