Documentation Home
MySQL 8.4 Reference Manual
Related Documentation Download this Manual
PDF (US Ltr) - 39.8Mb
PDF (A4) - 39.9Mb
Man Pages (TGZ) - 257.9Kb
Man Pages (Zip) - 364.9Kb
Info (Gzip) - 4.0Mb
Info (Zip) - 4.0Mb


MySQL 8.4 Reference Manual  /  ...  /  ndbd — The NDB Cluster Data Node Daemon

25.5.1 NDB Cluster 数据节点守护进程

ndbd 是用于处理使用 NDB Cluster 存储引擎的表数据的进程。这个进程使得数据节点能够完成分布式事务处理、节点恢复、到磁盘上的检查点、在线备份等任务。

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

使用 ndbd 的选项显示在下表中。附加描述随表格后面出现。

Note

所有这些选项也适用于多线程版本的程序(ndbmtd),您可以将ndbmtd替换为ndbd在此节中出现的任何地方。

  • --bind-address

    Command-Line Format --bind-address=name
    Type 字符串
    Default Value

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

  • --character-sets-dir

    Command-Line Format --character-sets-dir=path

    包含字符集的目录。

  • --connect-delay=#

    Command-Line Format --connect-delay=#
    Deprecated 是的
    Type 数值型
    Default Value 5
    Minimum Value 0
    Maximum Value 3600

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

    此选项已弃用,将在未来NDB集群的发行版中删除。请使用 --connect-retry-delay 代替。

  • --connect-retries=#

    Command-Line Format --connect-retries=#
    Type 数值型
    Default Value 12
    Minimum Value -1
    Maximum Value 65535

    设置连接尝试的次数;0表示只进行一次尝试(无重试)。默认为12次尝试。连接尝试之间等待时间由 --connect-retry-delay 选项控制。

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

  • --connect-retry-delay=#

    Command-Line Format --connect-retry-delay=#
    Type 数值型
    Default Value 5
    Minimum Value 0
    Maximum Value 4294967295

    决定在尝试联系管理服务器时等待的时间(由 --connect-retries 选项控制)。默认为5秒。

    此选项取代了 --connect-delay 选项,该选项现在已弃用,并且在未来的 NDB 集群发布中可能会被删除。

    短形式 -r 的此选项也已弃用,因此将来可能会被删除。请使用长形式代替。

  • --connect-string

    Command-Line Format --connect-string=connection_string
    Type 字符串
    Default Value [none]

    --ndb-connectstring 相同。

  • --core-file

    Command-Line Format --core-file

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

  • --daemon, -d

    Command-Line Format --daemon

    指示ndbdndbmtd作为守护进程执行。这是默认行为。--nodaemon可以用来防止进程以守护进程的形式运行。

    此选项在运行ndbdndbmtd在Windows平台上没有任何效果。

  • --defaults-extra-file

    Command-Line Format --defaults-extra-file=path
    Type 字符串
    Default Value [none]

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

  • --defaults-file

    Command-Line Format --defaults-file=path
    Type String
    Default Value [none]

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

  • --defaults-group-suffix

    Command-Line Format --defaults-group-suffix=string
    Type String
    Default Value [none]

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

  • --filesystem-password

    Command-Line Format --filesystem-password=password

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

    需要EncryptedFileSystem = 1

    更多信息,请参阅Section 25.6.14,“NDB集群的文件系统加密”

  • --filesystem-password-from-stdin

    Command-Line Format --filesystem-password-from-stdin={TRUE|FALSE}

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

    需要 EncryptedFileSystem = 1.

    更多信息,请参见 Section 25.6.14, “NDB集群文件系统加密”.

  • --foreground

    Command-Line Format --foreground

    使 ndbdndbmtd 执行为前台进程,主要用于调试目的。这选项暗示了 --nodaemon 选项。

    此选项在运行 ndbdndbmtd 在 Windows 平台上没有任何效果。

  • --help

    Command-Line Format --help

    显示帮助文本并退出。

  • --initial

    Command-Line Format --initial

    指示ndbd执行初始启动。初始启动擦除任何由早期的ndbd实例创建的恢复文件。它还重新创建恢复日志文件。在某些操作系统上,这个过程可能需要很长时间。

    该选项也导致删除与磁盘数据表空间相关联的所有数据文件和与日志文件组相关联的以前在这个数据节点上的日志文件(请参阅第25.6.11节,“NDB Cluster Disk Data Tables”)。

    一个--initial启动应该只在特殊情况下使用;因为这个选项会从NDB集群文件系统中删除所有文件,并重新创建所有重做日志文件。这些情况如下所示:

    • When performing a software upgrade which has changed the contents of any files.

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

    • 作为最后的手段,当节点重启或系统重启反复失败的原因是某些问题。在这种情况下,请注意,这个节点无法再用于恢复数据,因为数据文件被破坏了。

    Warning

    为了避免可能发生的最终数据丢失,建议您不要同时使用--initial选项和StopOnError = 0。相反,在启动集群后,只在config.ini中设置StopOnError为0,然后正常重新启动数据节点——也就是说,不使用--initial选项。请参阅StopOnError参数的描述,以了解有关此问题的详细解释。(Bug #24945638)

    使用该选项会阻止StartPartialTimeoutStartPartitionedTimeout配置参数的任何影响。

    Important

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

    此选项对数据节点在启动(或重新启动)时从已运行的其他数据节点恢复数据没有任何影响(除非它们也使用 --initial 选项作为初始重启的一部分)。这种数据恢复是自动发生的,不需要用户干预来进行一个正常运行的 NDB 集群。

    在第一次启动集群(即在创建任何数据节点文件之前)时,允许使用此选项;然而,这并不必要。

  • --initial-start

    Command-Line Format --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

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

    Important

    不要将此选项与--nowait-nodes选项混淆,该选项用于ndb_mgmd,可以用来启用配置有多个管理服务器的集群在没有所有管理服务器在线的情况下启动。

  • --install[=name]

    Command-Line Format --install[=name]
    Platform Specific Windows
    Type String
    Default Value ndbd

    使ndbd作为Windows服务安装。可选地,可以指定服务名称;如果不设置,则默认为ndbd。尽管最好在ndbd程序的my.inimy.cnf配置文件中指定其他选项,但是在这种情况下,也可以使用--install。然而,在这种情况下,必须首先指定--install选项,然后再给出任何其他选项,以使Windows服务安装成功。

    使用此选项与--initial选项一起使用通常不被建议,因为这会导致每次停止和启动服务时清除并重建数据节点文件系统。极度小心地使用任何影响数据节点启动的ndbd选项,包括--initial-start--nostart--nowait-nodes,同时使用--install选项,并确保完全理解并允许任何可能的后果。

    在非Windows平台上,--install选项没有影响。

  • --logbuffer-size=#

    Command-Line Format --logbuffer-size=#
    Type 整数
    Default Value 32768
    Minimum Value 2048
    Maximum Value 4294967295

    设置数据节点日志缓冲大小。当进行高级调试时,可能会出现日志缓冲空间不足的情况,如果有太多的日志消息,这样就会丢失一些日志消息。这在正常操作中不会发生。

  • --login-path

    Command-Line Format --login-path=path
    Type String
    Default Value [none]

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

  • --no-login-paths

    Command-Line Format --no-login-paths

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

  • --ndb-connectstring

    Command-Line Format --ndb-connectstring=connection_string
    Type String
    Default Value [none]

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

  • --ndb-mgmd-host

    Command-Line Format --ndb-mgmd-host=connection_string
    Type String
    Default Value [none]

    --ndb-connectstring相同。

  • --ndb-mgm-tls

    Command-Line Format --ndb-mgm-tls=level
    Type Enumeration
    Default Value relaxed
    Valid Values

    relaxed

    strict

    设置连接到管理服务器所需的TLS支持级别;可以是relaxedstrictrelaxed(默认)意味着尝试使用TLS连接,但成功不必要求;strict意味着必须使用TLS才能连接。

  • --ndb-nodeid

    Command-Line Format --ndb-nodeid=#
    Type Integer
    Default Value [none]

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

  • --ndb-optimized-node-selection

    Command-Line Format --ndb-optimized-node-selection

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

  • --ndb-tls-search-path

    Command-Line Format --ndb-tls-search-path=list
    Type 路径名
    Default Value (Unix) $HOME/ndb-tls
    Default Value (Windows) $HOMEDIR/ndb-tls

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

    搜索从左侧命名目录开始,自左至右进行直到找到文件。空字符串表示空搜索路径,使所有搜索失败。一个由单个点(.)组成的字符串表示搜索路径限制为当前工作目录。

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

  • --nodaemon

    Command-Line Format --nodaemon

    防止ndbdndbmtd作为守护进程执行。这选项覆盖了--daemon选项。对于调试二进制时将输出重定向到屏幕上,这是有用的。

    默认情况下,ndbdndbmtd在Windows上运行时,会以前台模式运行,因此在Windows平台上,这个选项是多余的,它没有任何效果。

  • --no-defaults

    Command-Line Format --no-defaults

    不从任何选项文件中读取默认选项,除了登录文件。

  • --nostart, -n

    Command-Line Format --nostart

    指示 ndbd 不要自动启动。当使用此选项时,ndbd 连接到管理服务器,从中获取配置数据,并初始化通信对象。然而,它不会实际启动执行引擎,直到由管理服务器明确要求为此做出请求。这可以通过在管理客户端中发出适当的 START 命令来实现(请参阅Section 25.6.1,“NDB集群管理客户端中的命令”)。

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

    Command-Line Format --nowait-nodes=list
    Type 字符串
    Default Value

    此选项接受数据节点列表,用于在启动之前不等待。

    可以使用此选项启动集群以分区状态。例如,要在4节点的集群中只运行一半的数据节点(节点2、3、4和5),您可以为每个ndbd进程指定--nowait-nodes=3,5。在这种情况下,集群一旦节点2和4连接,就会启动,而不会等待节点3和5连接的StartPartitionedTimeout毫秒。

    If you wanted to start up the same cluster as in the previous example without one ndbd (say, for example, that the host machine for node 3 has suffered a hardware failure) then start nodes 2, 4, and 5 with --nowait-nodes=3. Then the cluster starts as soon as nodes 2, 4, and 5 connect, and does not wait for node 3 to start.

  • --print-defaults

    Command-Line Format --print-defaults

    Print program argument list and exit.

  • --remove[=name]

    Command-Line Format --remove[=name]
    Platform Specific Windows
    Type String
    Default Value ndbd

    使一个ndbd过程从之前安装为Windows服务被移除。可选地,可以指定一个服务名称要卸载;如果没有设置,则默认为ndbd

    在非Windows平台上,--remove选项没有任何影响。

  • --usage

    Command-Line Format --usage

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

  • --verbose, -v

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

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

  • --version

    Command-Line Format --version

    显示版本信息并退出。

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

这些日志文件的列表如下。 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***

    Listings of possible ndbd exit codes and messages generated when a data node process shuts down prematurely can be found in Data Node Error Messages.

    Important

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

  • ndb_node_id_trace.log.trace_id 是一个跟踪文件,描述了错误发生之前的确切情况。这一信息对于 NDB 集群开发团队进行分析非常有用。

    可以配置创建这些跟踪文件前要创建多少个旧文件被覆盖。 trace_id 是一个数字,每次递增为下一个跟踪文件。

  • ndb_node_id_trace.log.next 文件记录了下一个跟踪文件编号的信息。

  • ndb_node_id_out.logndbd 进程输出的任何数据文件。这一文件只在 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 Connection Strings”,了解有关此问题的更多信息。关于数据节点配置参数的详细信息,请参阅第25.4.3.6节“定义NDB Cluster Data Nodes”

ndbd启动时,它实际会启动两个进程。第一个是称为angel process;它的唯一任务就是发现执行过程已完成,然后重新启动ndbd进程,如果配置为这样做。因此,如果您尝试使用Unixkill命令杀死ndbd,需要首先杀死天使进程。终止ndbd的最佳方法是使用管理客户端并从那里停止进程。

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

对于具有许多CPU的机器,可以使用几个ndbd过程,这些过程属于不同的节点组;然而,如此配置仍被认为是实验性的,并且在MySQL 8.4的生产环境中不受支持。请参阅第25.2.7节,“NDB集群的已知限制”