您必须验证 wild 集群中的每个进程都具有有效的 PID 文件。出于本次讨论的目的,有效的 PID 文件具有以下特征:
文件名的格式为 ,其中是用于进程的节点 ID。
ndb_
node_id
.pidnode_id
该文件位于进程使用的数据目录中。
该文件的第一行包含节点进程的进程 ID,并且仅包含该进程 ID(当应用于 MySQL Cluster Manager 1.4.7 及更高版本的数据注释时,此要求会发生变化;请参阅下面的解释)。
要检查管理节点进程的 PID 文件,请登录到 host 上的系统 shell
198.51.100.102
,切换到集群配置文件中参数指定的管理节点数据目录Datadir
,然后检查 PID 文件是否存在。在 Linux 上,您可以使用此处显示的命令:$> ls ndb_*.pid ndb_50.pid
.pid
使用寻呼机或文本编辑器 检查匹配文件的内容 。我们在这里使用更多用于此目的:$> more ndb_50.pid 10221
显示的数字应与 ndb_mgmd进程 ID 匹配。我们可以在 Linux 上使用ps 命令进行检查:
$> ps -ef | grep ndb_mgmd ari 10221 1 0 19:38 ? 00:00:09 /home/ari/bin/cluster/bin/ndb_mgmd --config-file=/home/ari/bin/cluster/wild-cluster/config.ini --config-cache=false --ndb-nodeid=50
管理节点 PID 文件满足本节开头列出的要求。
接下来,我们检查主机上数据节点的 PID 文件
198.51.100.103
和198.51.100.104
. 登录到 上的系统 shell198.51.100.103
,然后获取此主机上的ndbd进程的进程 ID,如下所示:$> ps -ef | grep ndbd ari 12838 1 0 Nov08 ? 00:10:12 ./bin/ndbd --initial --ndb-nodeid=2 --ndb-connectstring=198.51.100.102
正如集群配置文件中指定的那样,节点的
DataDir
是/home/ari/bin/cluster/wild-cluster/2/data
. 转到该目录以查找名为的文件ndb_2.pid
:$> ls ndb_*.pid ndb_2.pid
现在检查此文件的内容,您将看到数据节点的天使进程的进程 ID(有关天使进程的更多解释, 请参阅前面关于停止天使进程的说明):
$> more ndb_2.pid 12836
对于 MySQL Cluster Manager 1.4.6 及更早版本:将 PID 文件中的数字更改为数据节点自己的 PID:
$> sed -i 's/12836/12838/' ndb_2.pid $> more ndb_2.pid 12838
/home/ari/bin/cluster/wild-cluster/3/data
同样,我们定位并调整host上 剩余数据节点(节点ID为3,其数据目录为)的PID文件内容198.51.100.104
:$> ps -ef | grep ndbd ari 11276 1 0 Nov09 ? 00:09:44 ./cluster//bin/ndbd --initial --ndb-nodeid=3 --ndb-connectstring=198.51.100.102 $> more /home/ari/bin/cluster/wild-cluster/3/data/ndb_3.pid 11274
编辑
.pid
文件,使其包含数据节点进程自己的 PID:$> cd /home/ari/bin/cluster/wild-cluster/3/data/ $> sed -i 's/11274/11276/' ndb_3.pid $> more ndb_3.pid 11276
这个数据节点的PID文件现在也满足我们的要求了。
对于 MySQL Cluster Manager 1.4.7 及更高版本:无需调整 PID 文件以包含数据节点进程自己的 PID,因为这将由 导入最后一步中
--remove-angel
与命令一起使用的选项处理import cluster
过程。只要数据节点具有包含其天使进程的 PID 的有效 PID 文件,就可以导入数据节点。我们准备好继续 运行在 host 上的mysqld
198.51.100.102
节点。检查 mysqld 节点的 PID 文件:它的默认位置是节点的数据目录,由
datadir
配置文件中的选项或mysqld 进程启动时的命令行指定。让我们转到/home/ari/bin/cluster/wild-cluster/51/data
主机上的数据目录198.51.100.104
并查找 PID 文件。$> ls *.pid localhost.pid
请注意,MySQL 服务器可以使用选项启动,该
--pid-file
选项将 PID 文件放在指定位置。在以下情况下,同一个mysqld节点已使用mysqld_safe 脚本启动,并且ps 命令显示使用的值--pid-file
:$> ps -ef | grep mysqld ari 11999 5667 0 13:15 pts/1 00:00:00 /bin/sh ./bin/mysqld_safe --defaults-file=/home/ari/bin/cluster/wild-cluster.cnf --ndb-nodeid=51 ari 12136 11999 1 13:15 pts/1 00:00:00 /home/ari/bin/cluster/bin/mysqld --defaults-file=/home/ari/bin/cluster/wild-cluster.cnf --basedir=/home/ari/bin/cluster/ --datadir=/home/ari/bin/cluster/wild-cluster/51/data/ --plugin-dir=/home/ari/bin/cluster//lib/plugin --ndb-nodeid=51 --log-error=/home/ari/bin/cluster/wild-cluster/51/data//localhost.localdomain.err --pid-file=/home/ari/bin/cluster/wild-cluster/51/data//localhost.localdomain.pid
如示例中所示,您的 PID 文件很可能未以集群导入所需的格式命名 ( );如果 使用了该选项,PID 文件可能不在所需位置(数据目录)。让我们看看上一个示例中引用的 PID 文件:
ndb_
node_id
.pid--pid-file
$> more /home/ari/bin/cluster/wild-cluster/51/data//localhost.localdomain.pid 12136
SQL 节点的 PID 文件位于可接受的位置(在数据目录内)并且具有正确的内容(正确的 PID),但名称错误。让我们将 PID 文件复制到同一目录中正确命名的文件中,如下所示
$> cd /home/ari/bin/cluster/wild-cluster/51/data/ $> cp localhost.localdomain.pid ndb_51.pid