文档主页
MySQL 8.4 参考手册
相关文档 下载本手册
PDF (美国信纸) - 39.9Mb
PDF (A4) - 40.0Mb
手册页 (TGZ) - 258.5Kb
手册页 (Zip) - 365.5Kb
Info (Gzip) - 4.0Mb
Info (Zip) - 4.0Mb


MySQL 8.4 参考手册  /  ...  /  ndbd — NDB Cluster 数据节点守护进程

25.5.1 ndbd — NDB Cluster 数据节点守护进程

The ndbd 二进制文件提供用于处理使用 NDBCLUSTER 存储引擎的表中所有数据的进程的单线程版本。此数据节点进程使数据节点能够完成分布式事务处理、节点恢复、检查点到磁盘、在线备份以及相关任务。在 NDB 8.4.1 及更高版本中,ndbd 在启动时会记录类似于此处显示的警告

2024-05-28 13:32:16 [ndbd] WARNING  -- Running ndbd with a single thread of
signal execution.  For multi-threaded signal execution run the ndbmtd binary.

ndbmtd 是此二进制文件的支持多线程的版本。

在 NDB Cluster 中,一组 ndbd 进程协同处理数据。这些进程可以在同一台计算机(主机)上执行,也可以在不同的计算机上执行。数据节点与集群主机之间的对应关系是完全可配置的。

可以在 ndbd 中使用的选项显示在下表中。表后附有其他描述。

注意

所有这些选项也适用于此程序的多线程版本(ndbmtd),并且您可以将 ndbmtd 替换为 ndbd,无论在本文档的哪一部分遇到后者。

  • --bind-address

    命令行格式 --bind-address=name
    类型 字符串
    默认值

    使 ndbd 绑定到特定网络接口(主机名或 IP 地址)。此选项没有默认值。

  • --character-sets-dir

    命令行格式 --character-sets-dir=path

    包含字符集的目录。

  • --connect-delay=#

    命令行格式 --connect-delay=#
    已弃用
    类型 数字
    默认值 5
    最小值 0
    最大值 3600

    确定启动时等待连接管理服务器的时间(尝试次数由 --connect-retries 选项控制)。默认值为 5 秒。

    此选项已弃用,并且将在 NDB Cluster 的未来版本中删除。使用 --connect-retry-delay 替代。

  • --connect-retries=#

    命令行格式 --connect-retries=#
    类型 数字
    默认值 12
    最小值 -1
    最大值 65535

    设置在放弃之前重试连接的次数;0 表示仅尝试 1 次(并且不重试)。默认值为 12 次。等待尝试之间的时间由 --connect-retry-delay 选项控制。

    还可以将此选项设置为 -1,在这种情况下,数据节点进程会无限期地尝试连接。

  • --connect-retry-delay=#

    命令行格式 --connect-retry-delay=#
    类型 数字
    默认值 5
    最小值 0
    最大值 4294967295

    确定启动时等待连接管理服务器的时间(尝试之间的时间由 --connect-retries 选项控制)。默认值为 5 秒。

    此选项取代了 --connect-delay 选项,该选项现在已弃用,并且将在 NDB Cluster 的未来版本中删除。

    此选项的简写形式 -r 也已弃用,因此将被删除。请使用长格式。

  • --connect-string

    命令行格式 --connect-string=connection_string
    类型 字符串
    默认值 [无]

    --ndb-connectstring 相同。

  • --core-file

    命令行格式 --core-file

    在错误时写入核心文件;用于调试。

  • --daemon, -d

    命令行格式 --daemon

    指示 ndbdndbmtd 作为守护进程执行。这是默认行为。 --nodaemon 可用于阻止进程作为守护进程运行。

    此选项在 Windows 平台上运行 ndbdndbmtd 时无效。

  • --defaults-extra-file

    命令行格式 --defaults-extra-file=path
    类型 字符串
    默认值 [无]

    在读取全局文件后读取给定文件。

  • --defaults-file

    命令行格式 --defaults-file=path
    类型 字符串
    默认值 [无]

    仅从给定文件读取默认选项。

  • --defaults-group-suffix

    命令行格式 --defaults-group-suffix=string
    类型 字符串
    默认值 [无]

    还读取带有 concat(group, suffix) 的组。

  • --filesystem-password

    命令行格式 --filesystem-password=password

    使用 stdinttymy.cnf 文件将文件系统加密和解密密码传递给数据节点进程。

    需要 EncryptedFileSystem = 1.

    有关更多信息,请参见 Section 25.6.14, “NDB Cluster 的文件系统加密”.

  • --filesystem-password-from-stdin

    命令行格式 --filesystem-password-from-stdin={TRUE|FALSE}

    将文件系统加密和解密密码从 stdin(仅此)传递给数据节点进程。

    需要 EncryptedFileSystem = 1.

    有关更多信息,请参见 Section 25.6.14, “NDB Cluster 的文件系统加密”.

  • --foreground

    命令行格式 --foreground

    使 ndbdndbmtd 作为前台进程执行,主要用于调试目的。此选项意味着 --nodaemon 选项。

    此选项在 Windows 平台上运行 ndbdndbmtd 时无效。

  • --help

    命令行格式 --help

    显示帮助文本并退出。

  • --initial

    命令行格式 --initial

    指示 ndbd 执行初始启动。初始启动会擦除先前 ndbd 实例创建的用于恢复目的的所有文件。它还会重新创建恢复日志文件。在某些操作系统上,此过程可能需要相当长的时间。

    该选项还会导致删除与磁盘数据表空间关联的所有数据文件以及与先前在此数据节点上存在的日志文件组关联的撤消日志文件(请参见 Section 25.6.11, “NDB Cluster 磁盘数据表”)。

    在非常特殊的情况下使用 --initial 启动 ndbd 进程;这是因为此选项会导致从 NDB Cluster 文件系统中删除所有文件,并重新创建所有重做日志文件。这些情况在此列出

    • 在执行更改了任何文件内容的软件升级时。

    • 在使用新版本的 ndbd 重新启动节点时。

    • 作为最后的手段,当由于某种原因节点重启或系统重启反复失败时。在这种情况下,请注意,由于数据文件的破坏,此节点不再可用于恢复数据。

    警告

    为了避免最终数据丢失的可能性,建议您 不要--initial 选项与 StopOnError = 0 结合使用。相反,请仅在集群启动后在 config.ini 中将 StopOnError 设置为 0,然后以正常方式重启数据节点,即,不使用 --initial 选项。有关此问题的详细说明,请参见 StopOnError 参数的说明。(错误 #24945638)

    使用此选项会阻止 StartPartialTimeoutStartPartitionedTimeout 配置参数发挥任何作用。

    重要

    此选项不会影响受影响节点已创建的备份文件。

    此选项也不会影响从已运行的数据节点(除非它们也是作为初始重启的一部分使用 --initial 启动的)启动(或重新启动)的数据节点的数据恢复。此数据恢复会自动发生,并且在正常运行的 NDB Cluster 中不需要用户干预。

    在首次启动集群时(即在创建任何数据节点文件之前),可以使用此选项;但是,这不是必需的。

  • --initial-start

    命令行格式 --initial-start

    此选项用于执行集群的部分初始启动。每个节点都应使用此选项启动,以及 --nowait-nodes

    假设您有一个 4 节点集群,其数据节点 ID 为 2、3、4 和 5,并且您希望仅使用节点 2、4 和 5 执行部分初始启动,即省略节点 3。

    $> ndbd --ndb-nodeid=2 --nowait-nodes=3 --initial-start
    $> ndbd --ndb-nodeid=4 --nowait-nodes=3 --initial-start
    $> ndbd --ndb-nodeid=5 --nowait-nodes=3 --initial-start

    使用此选项时,您还必须使用 --ndb-nodeid 选项指定要启动的数据节点的节点 ID。

    重要

    不要将此选项与 --nowait-nodes 选项(用于 ndb_mgmd)混淆,该选项可用于启用配置了多个管理服务器的集群,而无需所有管理服务器在线即可启动。

  • --install[=name]

    命令行格式 --install[=name]
    平台特定 Windows
    类型 字符串
    默认值 ndbd

    导致 ndbd 安装为 Windows 服务。可以选择指定服务的名称;如果未设置,服务名称默认为 ndbd。尽管最好在 my.inimy.cnf 配置文件中指定其他 ndbd 程序选项,但可以与 --install 一起使用。但是,在这种情况下,必须首先指定 --install 选项,然后再指定任何其他选项,才能成功安装 Windows 服务。

    通常不建议将此选项与 --initial 选项一起使用,因为这会导致每次停止和启动服务时都擦除和重建数据节点文件系统。如果您打算使用任何其他影响数据节点启动的 ndbd 选项(包括 --initial-start--nostart--nowait-nodes)与 --install 一起使用,您也应该确保完全理解并允许这样做可能产生的任何后果。

    --install 选项对非 Windows 平台没有影响。

  • --logbuffer-size=#

    命令行格式 --logbuffer-size=#
    类型 整数
    默认值 32768
    最小值 2048
    最大值 4294967295

    设置数据节点日志缓冲区的大小。在使用大量额外日志记录进行调试时,如果日志消息过多,日志缓冲区可能会用完空间,在这种情况下,可能会丢失一些日志消息。这在正常操作期间不应发生。

  • --login-path

    命令行格式 --login-path=path
    类型 字符串
    默认值 [无]

    从登录文件读取给定的路径。

  • --no-login-paths

    命令行格式 --no-login-paths

    跳过从登录路径文件读取选项。

  • --ndb-connectstring

    命令行格式 --ndb-connectstring=connection_string
    类型 字符串
    默认值 [无]

    设置用于连接到 ndb_mgmd 的连接字符串。语法:[nodeid=id;][host=]hostname[:port]。覆盖 NDB_CONNECTSTRINGmy.cnf 中的条目。

  • --ndb-mgmd-host

    命令行格式 --ndb-mgmd-host=connection_string
    类型 字符串
    默认值 [无]

    --ndb-connectstring 相同。

  • --ndb-mgm-tls

    命令行格式 --ndb-mgm-tls=level
    类型 枚举
    默认值 relaxed
    有效值

    relaxed

    strict

    设置连接到管理服务器所需的 TLS 支持级别;relaxedstrict 之一。 relaxed(默认值)表示尝试建立 TLS 连接,但不要求成功; strict 表示连接需要 TLS。

  • --ndb-nodeid

    命令行格式 --ndb-nodeid=#
    类型 整数
    默认值 [无]

    设置此节点的节点 ID,覆盖 --ndb-connectstring 设置的任何 ID。

  • --ndb-optimized-node-selection

    命令行格式 --ndb-optimized-node-selection

    启用针对事务节点选择的优化。默认情况下启用;使用 --skip-ndb-optimized-node-selection 禁用。

  • --ndb-tls-search-path

    命令行格式 --ndb-tls-search-path=list
    类型 路径名
    默认值(Unix) $HOME/ndb-tls
    默认值(Windows) $HOMEDIR/ndb-tls

    指定一个目录列表以搜索 CA 文件。在 Unix 平台上,目录名称之间用冒号 (:) 分隔;在 Windows 系统上,分号字符 (;) 用作分隔符。目录引用可以是相对的或绝对的;它可以包含一个或多个环境变量,每个变量都用前缀美元符号 ($) 表示,并在使用之前进行扩展。

    搜索从最左边的命名目录开始,并从左到右进行,直到找到文件。空字符串表示空搜索路径,这会导致所有搜索失败。仅包含一个点 (.) 的字符串表示搜索路径仅限于当前工作目录。

    如果未提供搜索路径,则使用编译后的默认值。此值取决于使用的平台:在 Windows 上,它是 \ndb-tls;在其他平台(包括 Linux)上,它是 $HOME/ndb-tls。这可以通过使用 -DWITH_NDB_TLS_SEARCH_PATH 编译 NDB Cluster 来覆盖。

  • --nodaemon

    命令行格式 --nodaemon

    防止 ndbdndbmtd 作为守护进程执行。此选项将覆盖 --daemon 选项。这对于在调试二进制文件时将输出重定向到屏幕很有用。

    Windows 上 ndbdndbmtd 的默认行为是在前台运行,这使得此选项在 Windows 平台上没有必要,因为它没有影响。

  • --no-defaults

    命令行格式 --no-defaults

    不要从除登录文件以外的任何选项文件中读取默认选项。

  • --nostart, -n

    命令行格式 --nostart

    指示 ndbd 不要自动启动。使用此选项时,ndbd 连接到管理服务器,从管理服务器获取配置数据,并初始化通信对象。但是,它不会真正启动执行引擎,直到管理服务器明确要求它这样做。这可以通过在管理客户端中发出正确的 START 命令来完成(请参见 第 25.6.1 节,“NDB 集群管理客户端中的命令”)。

  • --nowait-nodes=node_id_1[, node_id_2[, ...]]

    命令行格式 --nowait-nodes=list
    类型 字符串
    默认值

    此选项接受一个数据节点列表,集群在启动之前不会等待这些节点。

    这可用于在分区状态下启动集群。例如,要在 4 节点集群中仅启动一半数据节点(节点 2、3、4 和 5),您可以使用 --nowait-nodes=3,5 启动每个 ndbd 进程。在这种情况下,集群将在节点 2 和 4 连接后立即启动,并且不像其他情况下那样等待 StartPartitionedTimeout 毫秒以等待节点 3 和 5 连接。

    如果您想启动与上一个示例相同的集群,但缺少一个 ndbd(例如,节点 3 的主机已发生硬件故障),那么使用 --nowait-nodes=3 启动节点 2、4 和 5。然后,集群将在节点 2、4 和 5 连接后立即启动,并且不会等待节点 3 启动。

  • --print-defaults

    命令行格式 --print-defaults

    打印程序参数列表并退出。

  • --remove[=name]

    命令行格式 --remove[=name]
    平台特定 Windows
    类型 字符串
    默认值 ndbd

    导致之前作为 Windows 服务安装的 ndbd 进程被删除。可以选择指定要卸载的服务的名称;如果未设置,服务名称默认为 ndbd

    --remove 选项对非 Windows 平台没有影响。

  • --usage

    命令行格式 --usage

    显示帮助文本并退出;与 --help 相同。

  • --verbose, -v

    导致将额外的调试输出写入节点日志。

    您还可以使用 NODELOG DEBUG ONNODELOG DEBUG OFF 在数据节点运行时启用和禁用此额外的日志记录。

  • --version

    命令行格式 --version

    显示版本信息并退出。

ndbd 生成一组日志文件,这些文件放置在 DataDir 指定的目录中,该目录在 config.ini 配置文件中定义。

这些日志文件列在下面。 node_id 是节点的唯一标识符。例如,ndb_2_error.log 是节点 ID 为 2 的数据节点生成的错误日志。

  • ndb_node_id_error.log 是一个文件,其中包含所引用 ndbd 进程遇到的所有崩溃记录。此文件中的每条记录都包含一个简短的错误字符串以及对该崩溃的跟踪文件的引用。此文件中典型条目可能如下所示

    Date/Time: Saturday 30 July 2004 - 00:20:01
    Type of error: error
    Message: Internal program error (failed ndbrequire)
    Fault ID: 2341
    Problem data: DbtupFixAlloc.cpp
    Object of reference: DBTUP (Line: 173)
    ProgramName: NDB Kernel
    ProcessID: 14909
    TraceFile: ndb_2_trace.log.2
    ***EOM***

    当数据节点进程过早关闭时,可能出现 ndbd 退出代码和消息的列表可以在 数据节点错误消息 中找到。

    重要

    错误日志文件中的最后一条记录不一定是最新的一条(也不太可能是)。错误日志中的条目 不是 按时间顺序排列;相反,它们对应于 ndb_node_id_trace.log.next 文件中确定的跟踪文件顺序(见下文)。因此,错误日志条目以循环方式而不是顺序方式覆盖。

  • ndb_node_id_trace.log.trace_id 是一个跟踪文件,它描述了错误发生之前的具体情况。这些信息对于 NDB Cluster 开发团队的分析很有用。

    可以配置在覆盖旧文件之前创建的跟踪文件数量。 trace_id 是一个数字,它会为每个后续的跟踪文件递增。

  • ndb_node_id_trace.log.next 是一个文件,用于跟踪要分配的下一个跟踪文件编号。

  • ndb_node_id_out.log 是一个文件,包含 ndbd 进程输出的任何数据。此文件仅在 ndbd 作为守护进程启动时创建,这是默认行为。

  • ndb_node_id.pid 是一个文件,包含 ndbd 进程的进程 ID,当它作为守护进程启动时。它也充当锁定文件,以避免启动具有相同标识符的节点。

  • ndb_node_id_signal.log 是一个文件,仅在 ndbd 的调试版本中使用,在这里,可以跟踪 ndbd 进程中的所有传入、传出和内部消息及其数据。

建议不要使用通过 NFS 挂载的目录,因为在某些环境中,这会导致 .pid 文件上的锁定即使进程已终止仍保持有效的问题。

要启动 ndbd,可能还需要指定管理服务器的主机名以及它正在监听的端口。可以选择性地指定进程要使用的节点 ID。

$> ndbd --connect-string="nodeid=2;host=ndb_mgmd.mysql.com:1186"

有关此问题的更多信息,请参阅 第 25.4.3.3 节,“NDB Cluster 连接字符串”。有关数据节点配置参数的更多信息,请参阅 第 25.4.3.6 节,“定义 NDB Cluster 数据节点”

ndbd 启动时,它实际上会启动两个进程。第一个称为 守护进程;它的唯一工作是发现执行进程何时完成,然后如果已配置这样做,则重新启动 ndbd 进程。因此,如果您尝试使用 Unix kill 命令来终止 ndbd,则需要终止这两个进程,从守护进程开始。终止 ndbd 进程的首选方法是使用管理客户端,并从那里停止进程。

执行进程使用一个线程来读取、写入和扫描数据,以及所有其他活动。此线程是异步实现的,因此它可以轻松处理数千个并发操作。此外,一个看门狗线程会监督执行线程,以确保它不会挂在无限循环中。一个线程池处理文件 I/O,每个线程都可以处理一个打开的文件。线程还可以由 ndbd 进程中的传输器用于传输器连接。在执行大量操作(包括更新)的多处理器系统中,ndbd 进程可以消耗最多 2 个 CPU,如果允许这样做。

对于具有多个 CPU 的机器,可以使用多个属于不同节点组的 ndbd 进程;但是,这种配置仍被视为实验性,在生产环境中不支持 MySQL 8.4。请参阅 第 25.2.7 节,“NDB Cluster 的已知限制”