### 23.5.3 ndbmtd - NDB Cluster 数据节点守护进程（多线程）

[](<>)[](<>)[](<>)[](<>)[](<>)

[**ndbmtd**](mysql-cluster-programs-ndbmtd.html)是一个多线程版本[**ndbd**](mysql-cluster-programs-ndbd.html)，用于处理表中所有数据的过程，使用[`NDBCLUSTER`](mysql-cluster.html)存储引擎。[**ndbmtd**](mysql-cluster-programs-ndbmtd.html)旨在用于具有多个 CPU 内核的主机。除非另有说明，[**ndbmtd**](mysql-cluster-programs-ndbmtd.html)以相同的方式发挥作用[**ndbd**](mysql-cluster-programs-ndbd.html);因此，在本节中，我们将重点介绍[**ndbmtd**](mysql-cluster-programs-ndbmtd.html)不同于[**ndbd**](mysql-cluster-programs-ndbd.html), 你应该咨询[第 23.5.1 节，“ndbd - NDB Cluster 数据节点守护程序”](mysql-cluster-programs-ndbd.html)，有关运行适用于数据节点进程的单线程和多线程版本的 NDB Cluster 数据节点的其他信息。

使用的命令行选项和配置参数[**ndbd**](mysql-cluster-programs-ndbd.html)也适用于[**ndbmtd**](mysql-cluster-programs-ndbmtd.html).有关这些选项和参数的更多信息，请参阅[第 23.5.1 节，“ndbd - NDB Cluster 数据节点守护程序”](mysql-cluster-programs-ndbd.html)， 和[第 23.4.3.6 节，“定义 NDB Cluster 数据节点”](mysql-cluster-ndbd-definition.html)， 分别。

[**ndbmtd**](mysql-cluster-programs-ndbmtd.html)也是文件系统兼容的[**ndbd**](mysql-cluster-programs-ndbd.html).换句话说，一个数据节点运行[**ndbd**](mysql-cluster-programs-ndbd.html)可以停止，二进制替换为[**ndbmtd**](mysql-cluster-programs-ndbmtd.html)，然后重新启动，没有任何数据丢失。（但是，在执行此操作时，您必须确保[`MaxNoOfExecutionThreads`](mysql-cluster-ndbd-definition.html#ndbparam-ndbmtd-maxnoofexecutionthreads)如果您愿意，在重新启动节点之前设置为适当的值[**ndbmtd**](mysql-cluster-programs-ndbmtd.html)以多线程方式运行。）同样，一个[**ndbmtd**](mysql-cluster-programs-ndbmtd.html)二进制可以替换为[**ndbd**](mysql-cluster-programs-ndbd.html)只需停止节点然后启动[**ndbd**](mysql-cluster-programs-ndbd.html)代替多线程二进制文件。在两者之间切换时不需要使用启动数据节点二进制文件[`- 最初的`](mysql-cluster-programs-ndbd.html#option_ndbd_initial).

使用[**ndbmtd**](mysql-cluster-programs-ndbmtd.html)不同于使用[**ndbd**](mysql-cluster-programs-ndbd.html)在两个关键方面：

1.  因为[**ndbmtd**](mysql-cluster-programs-ndbmtd.html)默认情况下以单线程模式运行（也就是说，它的行为类似于[**ndbd**](mysql-cluster-programs-ndbd.html))，您必须将其配置为使用多个线程。这可以通过在`配置文件`文件为[`MaxNoOfExecutionThreads`](mysql-cluster-ndbd-definition.html#ndbparam-ndbmtd-maxnoofexecutionthreads)配置参数或[`线程配置`](mysql-cluster-ndbd-definition.html#ndbparam-ndbmtd-threadconfig)配置参数。使用`MaxNoOfExecutionThreads`更简单，但是`线程配置`提供更大的灵活性。有关这些配置参数及其使用的更多信息，请参阅[多线程配置参数 (ndbmtd)](mysql-cluster-ndbd-definition.html#mysql-cluster-ndbd-definition-ndbmtd-parameters).

2.  跟踪文件是由严重错误生成的[**ndbmtd**](mysql-cluster-programs-ndbmtd.html)过程的方式与它们的生成方式有些不同[**ndbd**](mysql-cluster-programs-ndbd.html)失败。在接下来的几段中将更详细地讨论这些差异。

[](<>)[](<>)[](<>)[](<>)[](<>)

喜欢[**ndbd**](mysql-cluster-programs-ndbd.html),[**ndbmtd**](mysql-cluster-programs-ndbmtd.html)生成一组日志文件，这些文件放置在指定的目录中[`数据目录`](mysql-cluster-ndbd-definition.html#ndbparam-ndbd-datadir)在里面`配置文件`配置文件。除了跟踪文件之外，这些文件的生成方式和生成的名称相同[**ndbd**](mysql-cluster-programs-ndbd.html).

如果出现严重错误，[**ndbmtd**](mysql-cluster-programs-ndbmtd.html)生成描述错误发生之前发生的事情的跟踪文件。这些文件，可以在数据节点的[`数据目录`](mysql-cluster-ndbd-definition.html#ndbparam-ndbd-datadir)，对于 NDB Cluster 开发和支持团队分析问题很有用。为每个生成一个跟踪文件[**ndbmtd**](mysql-cluster-programs-ndbmtd.html)线。这些文件的名称具有以下模式：

```
ndb_node_id_trace.log.trace_id_tthread_id,
```

在这种模式下，*`node_id`*代表数据节点在集群中的唯一节点ID，*`trace_id`*是跟踪序列号，并且*`线程 ID`*是线程 ID。例如，在一个失败的情况下[**ndbmtd**](mysql-cluster-programs-ndbmtd.html)进程作为 NDB Cluster 数据节点运行，节点 ID 为 3，并且具有[`MaxNoOfExecutionThreads`](mysql-cluster-ndbd-definition.html#ndbparam-ndbmtd-maxnoofexecutionthreads)等于 4，在数据节点的数据目录中生成四个跟踪文件。如果这是该节点第一次失败，那么这些文件被命名为`ndb_3_trace.log.1_t1`,`ndb_3_trace.log.1_t2`,`ndb_3_trace.log.1_t3`， 和`ndb_3_trace.log.1_t4`.在内部，这些跟踪文件遵循与[**ndbd**](mysql-cluster-programs-ndbd.html)跟踪文件。

这[**ndbd**](mysql-cluster-programs-ndbd.html)数据节点进程过早关闭时生成的退出代码和消息也被[**ndbmtd**](mysql-cluster-programs-ndbmtd.html).看[数据节点错误消息](https://dev.mysql.com/doc/ndb-internals/en/ndb-node-error-messages.html), 列出这些。

笔记

可以使用[**ndbd**](mysql-cluster-programs-ndbd.html)和[**ndbmtd**](mysql-cluster-programs-ndbmtd.html)同时在同一个 NDB Cluster 中的不同数据节点上。但是，此类配置尚未经过广泛测试。因此，我们目前不建议在生产环境中这样做。
