set [--sequential-restart] [--retry] attribute_assignment_list cluster_name
attribute_assignment_list:
attribute_assignment[,attribute_assignment][,...]
attribute_assignment:
attribute_name:process_specification[+process_specification][=value]
process_specification:
[process_name][:process_id]
process_name:
{ndb_mgmd|ndbd|ndbmtd|mysqld|ndbapi}
此命令用于设置一个或多个配置属性的值。可以在进程级别或实例级别设置属性。
set
无论集群是否已经启动,命令都会被执行。在未运行的集群中,MySQL 集群管理器仅更新配置文件。但是,在正在运行的集群中,MySQL Cluster Manager 还会自动执行
使属性更改生效所需的任何节点重启或滚动重启(请参阅执行 NDB Cluster 的滚动重启)。但是,由于重启操作(尤其是滚动重启)可能会花费大量时间,因此最好在启动集群并将其投入使用之前更改配置。
对于 MySQL Cluster Manager 8.0.31 及更高版本:对于通常需要重新启动集群节点以重新配置正在运行的集群的任何配置选项,如果set
尝试使用与已使用的值相同的命令,则命令返回错误,告诉用户该命令不会对集群造成任何更改。如果确实需要set
在这种情况下运行命令并强制重启相关进程,请使用该
--retry
选项。
使用该--sequential-restart
选项使
set
命令执行的滚动重新启动是
顺序
的。
在使用 NDB Cluster TDE 时设置密码文件的路径。这实际上是作为配置属性实现的。例子:
mcm> set filesystem-password-file:ndbmtd:=/home/myndb/myc.pwd mycluster;
有关详细信息,请参阅设置加密。
要在进程级别设置属性,请使用
set
包含具有以下形式的属性分配的语句
attribute_name
:process_name
= value
。
例如,要
在ndbdDataMemory
进程级别设置为 500 MB ,以便新值适用于集群中的所有ndbd进程,您可以发出包含属性分配的命令,如下所示:
set
DataMemory:ndbd=500M
mcm> set DataMemory:ndbd=500M mycluster;
+-----------------------------------+
| Command result |
+-----------------------------------+
| Cluster reconfigured successfully |
+-----------------------------------+
1 row in set (5.68 sec)
要验证是否正在使用新设置,您可以发出以下get
命令:
mcm> get DataMemory mycluster;
+------------+-------+----------+------+----------+------+---------+---------+
| Name | Value | Process1 | Id1 | Process2 | Id2 | Level | Comment |
+------------+-------+----------+------+----------+------+---------+---------+
| DataMemory | 500M | ndbd | 1 | | | Process | |
| DataMemory | 500M | ndbd | 2 | | | Process | |
+------------+-------+----------+------+----------+------+---------+---------+
2 rows in set (0.79 sec)
有关此命令的更多信息,请参阅
第 5.5.1 节 “get
命令”。
要为特定流程实例设置属性,请在属性分配中包含流程 ID;这种属性赋值的形式是
attribute_name
: process_name
: process_id
= value
。例如,要将
进程 ID
为 200 的mysqld50
进程的 wait_timeout 属性设置为 200,您将发出
set
包含属性分配的命令wait_timeout:mysqld:51=200
,如下所示:
mcm> set wait_timeout:mysqld:50=200 mycluster;
+-----------------------------------+
| Command result |
+-----------------------------------+
| Cluster reconfigured successfully |
+-----------------------------------+
1 row in set (6.18 sec)
get
您可以使用适用的命令
验证设置是否生效:
mcm> get wait_timeout mycluster;
+--------------+-------+----------+------+----------+------+-------+---------+
| Name | Value | Process1 | Id1 | Process2 | Id2 | Level | Comment |
+--------------+-------+----------+------+----------+------+-------+---------+
| wait_timeout | 200 | mysqld | 50 | | | | |
+--------------+-------+----------+------+----------+------+-------+---------+
1 row in set (0.50 sec)
Read only
无法设置
标记的属性。尝试这样做失败并出现错误,如下所示:
mcm> get :ndbd mycluster;
+--------------+-------------+----------+-----+----------+-----+-------+-----------+
| Name | Value | Process1 | Id1 | Process2 | Id2 | Level | Comment |
+--------------+-------------+----------+-----+----------+-----+-------+-----------+
| DataDir | /opt/c2data | ndbd | 1 | | | | |
| HostName | tonfisk | ndbd | 1 | | | | Read only |
| NodeId | 2 | ndbd | 1 | | | | Read only |
| DataDir | /opt/c3data | ndbd | 2 | | | | |
| HostName | grindval | ndbd | 2 | | | | Read only |
| NodeId | 3 | ndbd | 2 | | | | Read only |
+--------------+-------------+----------+-----+----------+-----+-------+-----------+
6 rows in set (1.42 sec)
mcm> set HostName:ndbd:1=lax mycluster;
ERROR 6008 (00MGR): Config attribute HostName is read only and cannot be changed
但是,您可以设置强制属性,例如本节前面显示的示例,其中
DataDir
配置属性设置为用户定义的值。
NoOfReplicas
必须仅在进程级别设置
强制
属性。尝试在实例级别设置它可能会使集群、MySQL 集群管理器或两者都处于无法使用的配置中。
与get
命令的情况不同,您不能set
在“全局”范围内发出操作——也就是说,您不能在单个属性分配中为属性设置单个值,以便新属性值适用于所有进程,而不管进程类型,即使具有该名称的属性可以应用于所有进程类型。您也不能在单个属性分配中指定多个进程类型。尝试做这些事情中的任何一个都会导致错误,如下所示:
mcm> set DataDir=/var/cluster-data mycluster;
ERROR 3 (00MGR): Illegal syntax
mcm> set DataDir:ndb_mgmd,ndbd,mysqld=/var/cluster-data mycluster;
ERROR 3 (00MGR): Illegal syntax
相反,您必须为每个流程类型使用流程级属性分配。但是,您不一定需要为每种进程类型发出单独的设置命令。相反,您还可以在单个
set
命令中进行多个属性分配,以逗号分隔列表的形式提供分配。此命令为名为的集群中的所有 MySQL NDB Cluster 进程
set
分配/var/cdata
数据目录 ( ) :
DataDir
mycluster
mcm> set DataDir:ndb_mgmd=/var/cdata, \
DataDir:ndbd=/var/cdata, \
DataDir:mysqld=/var/cdata mycluster;
+-----------------------------------+
| Command result |
+-----------------------------------+
| Cluster reconfigured successfully |
+-----------------------------------+
1 row in set (7.66 sec)
mcm> get DataDir mycluster;
+---------+------------+----------+---------+----------+---------+-------+---------+
| Name | Value | Process1 | NodeId1 | Process2 | NodeId2 | Level | Comment |
+---------+------------+----------+---------+----------+---------+-------+---------+
| DataDir | /var/cdata | ndbmtd | 1 | | | | |
| DataDir | /var/cdata | ndbmtd | 2 | | | | |
| DataDir | /var/cdata | ndb_mgmd | 49 | | | | |
| datadir | /var/cdata | mysqld | 50 | | | | |
| datadir | /var/cdata | mysqld | 51 | | | | |
+---------+------------+----------+---------+----------+---------+-------+---------+
5 rows in set (0.08 sec)
从get
刚才的命令可以看出,属性赋值成功,并在进程级别生效。
在 MySQL Cluster Manager 中,配置属性名称不区分大小写。有关MySQL Cluster Manager 中区分大小写问题的更多信息, 请参阅字符串搜索中的区分大小写。
同样,您不能在单个属性分配中引用多个进程 ID,即使它们是同一类型的进程;以下命令不起作用:
mcm> set DataMemory:ndbd:1,2=750M mycluster;
ERROR 3 (00MGR): Illegal syntax
相反,您需要使用以下命令:
mcm> set DataMemory:ndbd:1=750M,DataMemory:ndbd:2=750M mycluster;
+-----------------------------------+
| Command result |
+-----------------------------------+
| Cluster reconfigured successfully |
+-----------------------------------+
1 row in set (7.70 sec)
(当然,如果这些是中仅有的两个数据节点
mycluster
,那么该命令set
DataMemory:ndbd=750M mycluster
也可以完成相同的任务。)
一些配置属性适用于进程之间的连接,因此需要您在设置它们的过程中引用这两个进程。在这种情况下,您必须使用特殊的流程规范语法;有关如何完成此操作的信息, 请参阅 设置 TCP 连接属性。
您也不能在单个属性分配中为多个属性设置值;这意味着以下命令 不起作用:
mcm> set UndoDataBuffer=32M,UndoIndexBuffer=8M:ndbd mycluster;
ERROR 3 (00MGR): Illegal syntax
mcm> set DataMemory,IndexMemory:ndbd=1G mycluster;
ERROR 3 (00MGR): Illegal syntax
但是,如果您为要更新其值的每个属性编写完整且有效的属性分配,则可以重写这两个命令,以便它们成功执行,如下所示:
mcm> set UndoDataBuffer:ndbd=32M,UndoIndexBuffer:ndbd=8M mycluster;
+-----------------------------------+
| Command result |
+-----------------------------------+
| Cluster reconfigured successfully |
+-----------------------------------+
1 row in set (6.62 sec)
mcm> set DataMemory:ndbd=1G,IndexMemory:ndbd=1G mycluster;
+-----------------------------------+
| Command result |
+-----------------------------------+
| Cluster reconfigured successfully |
+-----------------------------------+
1 row in set (7.04 sec)
事实上,没有理由不能在一个set
命令中执行所有四个赋值,使用四个属性赋值的列表,如下所示:
mcm> set UndoDataBuffer:ndbd=32M,UndoIndexBuffer:ndbd=8M, \
DataMemory:ndbd=1G, IndexMemory:ndbd=1G mycluster;
+-----------------------------------+
| Command result |
+-----------------------------------+
| Cluster reconfigured successfully |
+-----------------------------------+
1 row in set (6.24 sec)
但是,最好不要在任何单个set
命令中执行过多的属性分配,因为这会使发现错误变得更加困难。
在 Windows 上,设置其值包含路径(例如DataDir
)的属性时,必须将路径中的所有反斜杠字符替换为正斜杠。假设您要使用在 Windows 上运行的名为 MySQL NDB 集群中节点 ID 为 50的mysqldC:\temp\node50
进程的
tmpdir
属性
。可以使用适当的命令查看此属性的原始值:
mycluster
get
mcm> get tmpdir mycluster;
+--------+----------------+----------+-----+----------+-----+-------+---------+
| Name | Value | Process1 | Id1 | Process2 | Id2 | Level | Comment |
+--------+----------------+----------+-----+----------+-----+-------+---------+
| tmpdir | c:\c50data\tmp | mysqld | 50 | | | | |
+--------+----------------+----------+-----+----------+-----+-------+---------+
1 row in set (0.22 sec)
进行所需配置更改的正确set
命令如下所示:
mcm> set tmpdir:mysqld:50=c:/temp/node50 mycluster;
+-----------------------------------+
| Command result |
+-----------------------------------+
| Cluster reconfigured successfully |
+-----------------------------------+
1 row in set (2.62 sec)
当您使用检查值时
get
——即使它最初是使用反斜杠显示的——在显示新值时使用正斜杠:
mcm> get tmpdir mycluster;
+--------+----------------+----------+-----+----------+-----+-------+---------+
| Name | Value | Process1 | Id1 | Process2 | Id2 | Level | Comment |
+--------+----------------+----------+-----+----------+-----+-------+---------+
| tmpdir | c:/temp/node50 | mysqld | 50 | | | | |
+--------+----------------+----------+-----+----------+-----+-------+---------+
1 row in set (0.22 sec)
但是,如果您尝试在发出set
命令时在路径中使用反斜杠,命令将失败:
mcm> set tmpdir:mysqld:4=c:\temp\4 mycluster;
Outfile disabled.
ERROR:
Unknown command '\4'.
ERROR 6014 (00MGR): Path name for parameter tmpdir must be absolute.
The value 'c:mp4' is illegal.
当设置了一个动态变量时,mcmd 会向mysqld发送一条应用该值的SET GLOBAL
语句,并将该值保存到mysqld
配置文件中,以便下次重新启动该mysqld进程时可以再次应用该值。设置一个非动态的变量会触发立即重启。
MySQL Cluster Manager 8.0.30 及更高版本:当没有数据节点可用时,set
重新启动mysqld节点而不同时重新启动数据节点的命令将被拒绝。这是为了确保首先处理数据节点的任何问题,以便mysqld重启真正成功。
对于一些仅在使用 TCP 连接时适用的属性(例如
SendBufferMemory
and
ReceiveBufferMemory
属性),有必要使用修改后的语法来为属性值赋值。在这种情况下,属性分配包含两个流程规范,一个用于每个流程类型或设置应用的实例,并用加号 ( +
) 连接。对于以下示例,请考虑名为 的集群
mycluster2
,它由此处显示的进程组成:
mcm> list processes mycluster2;
+------+----------+-------------+
| Id | Name | Host |
+------+----------+-------------+
| 49 | ndb_mgmd | grindval |
| 1 | ndbd | tonfisk |
| 2 | ndbd | flundra |
| 50 | mysqld | haj |
| 51 | mysqld | torsk |
+------+----------+-------------+
5 rows in set (0.16 sec)
(有关此命令的更多信息,请参见第 5.6.3 节“list processes
命令”。)
get
除非已设置,否则
TCP 连接属性不会显示在命令的输出中
。这意味着,在
SendBufferMemory
第一次设置之前,如果您尝试检索其值,您将获得一个空结果,如下所示:
mcm> get SendBufferMemory mycluster2;
Empty set (0.18 sec)
mcm> get --include-defaults SendBufferMemory mycluster2;
Empty set (0.93 sec)
要将
SendBufferMemory
数据节点和 SQL 节点之间的所有 TCP 连接设置为 4 MB,您可以使用此处显示的命令:
mcm> set SendBufferMemory:ndbd+mysqld=4M mycluster2;
+-----------------------------------+
| Command result |
+-----------------------------------+
| Cluster reconfigured successfully |
+-----------------------------------+
1 row in set (6.44 sec)
如果您随后使用 来检查属性的值
get
,您可以看到该值应用于两个ndbd进程中的每一个和中的两个
mysqld进程中
的每一个之间的所有可能连接mycluster2
,因此输出中有四行:
mcm> get SendBufferMemory mycluster2;
+------------------+-------+----------+-----+----------+-----+---------+---------+
| Name | Value | Process1 | Id1 | Process2 | Id2 | Level | Comment |
+------------------+-------+----------+-----+----------+-----+---------+---------+
| SendBufferMemory | 4M | ndbd | 2 | mysqld | 4 | Process | |
| SendBufferMemory | 4M | ndbd | 2 | mysqld | 5 | Process | |
| SendBufferMemory | 4M | ndbd | 3 | mysqld | 4 | Process | |
| SendBufferMemory | 4M | ndbd | 3 | mysqld | 5 | Process | |
+------------------+-------+----------+-----+----------+-----+---------+---------+
4 rows in set (1.63 sec)
要仅针对具有进程 ID 的数据节点与2
mysqld 进程(进程 ID 4
)之间的连接覆盖此设置,您可以在进程规范的两个部分中的每一个部分中包含进程 ID,如下所示:
mcm> set SendBufferMemory:ndbd:2+mysqld:4=8M mycluster2;
+-----------------------------------+
| Command result |
+-----------------------------------+
| Cluster reconfigured successfully |
+-----------------------------------+
1 row in set (7.95 sec)
当您使用
get
命令检查结果时,您可以看到新设置适用于实例级别,并且仅适用于具有 ID2
和; 的进程之间的连接4
;之前进行的进程级设置仍然适用于其余 3 个连接:
mcm> get SendBufferMemory mycluster2;
+------------------+-------+----------+-----+----------+-----+---------+---------+
| Name | Value | Process1 | Id1 | Process2 | Id2 | Level | Comment |
+------------------+-------+----------+-----+----------+-----+---------+---------+
| SendBufferMemory | 8M | ndbd | 2 | mysqld | 50 | | |
| SendBufferMemory | 4M | ndbd | 2 | mysqld | 51 | Process | |
| SendBufferMemory | 4M | ndbd | 3 | mysqld | 50 | Process | |
| SendBufferMemory | 4M | ndbd | 3 | mysqld | 51 | Process | |
+------------------+-------+----------+-----+----------+-----+---------+---------+
4 rows in set (0.24 sec)
您不能在流程规范的一部分(即连接的一端)的流程级别上设置连接属性,而在另一部分的实例级别上设置连接属性。尝试这样做失败并出现错误,如下所示:
mcm> set SendBufferMemory:ndbd+mysqld:4=2M mycluster2;
ERROR 3 (00MGR): Illegal syntax
mcm> set SendBufferMemory:ndbd:2+mysqld=2M mycluster2;
ERROR 3 (00MGR): Illegal syntax
可以通过将
属性设置为所需的连接数来
为mysqld
启用连接池,但在创建集群时还需要一个额外的步骤。ndb-cluster-connection-pool
因为mysqld进程在启用连接池时尝试与集群建立多个连接,所以集群必须配置
“备用”或“空”连接。您可以通过
ndbapi
在命令中使用的 process_host 列表中添加(否则)未使用的条目来执行此操作create cluster
,如下所示:
mcm> create cluster -P mypackage
> -R ndb_mgmd@10.100.10.97,ndbd@10.100.10.98,ndbd@10.100.10.99, \
mysqld@10.100.10.100,ndbapi@10.100.10.100, \
ndbapi@10.100.10.100,ndbapi@10.100.10.100
> mycluster;
+------------------------------+
| Command result |
+------------------------------+
| Cluster created successfully |
+------------------------------+
1 row in set (6.58 sec)
在此之后,您可以使用这样的set
命令根据文件中可用的超额连接数来设置连接池的大小
config.ini
:
mcm> set ndb_cluster_connection_pool:mysqld=4;
不支持尝试为mysqlduser
进程设置属性
,并导致将警告写入 MySQL Cluster Manager 日志。
NDB
NDB Cluster 8.0.31 及更高版本支持对存储在表
中的用户数据进行透明数据加密(TDE)
(请参阅NDB Cluster 的文件系统加密);MySQL Cluster Manager 8.0.31 及更高版本也支持此功能。EncryptedFileSystem
通过在所有数据节点上将配置参数设置为 1,在数据节点上启用文件系统加密
。(通过将参数设置为 0 来禁用加密。)
加密和解密数据需要数据节点具有加密密码,该密码必须存储在数据节点进程可读的文件中。set
您可以使用使用该
filesystem-password-file
选项的命令(在 MySQL Cluster Manager 8.0.31 中引入)将其提供给数据节点。这必须在设置之前完成EncryptedFileSystem = 1
,如本节后面所示。
以下示例使用集群
运行,如mcm客户端中此命令mycluster
的输出所示:
show status
mcm> show status -r mycluster;
+--------+----------+--------+---------+-----------+-----------+
| NodeId | Process | Host | Status | Nodegroup | Package |
+--------+----------+--------+---------+-----------+-----------+
| 145 | ndb_mgmd | myndb3 | running | | mypackage |
| 1 | ndbmtd | myndb1 | running | 0 | mypackage |
| 2 | ndbmtd | myndb2 | running | 0 | mypackage |
| 146 | mysqld | myndb3 | running | | mypackage |
| 147 | mysqld | myndb4 | running | | mypackage |
| 148 | ndbapi | * | added | | |
+--------+----------+--------+---------+-----------+-----------+
不支持 直接从 mcm客户端中的命令行设置密码。如果文件系统访问权限足够严格,则使用磁盘上的文件有助于防止非特权用户访问。(在 Linux 和类似平台上,此文件的权限必须设置为 0600。)此文件应仅包含加密密码,它遵循与加密 NDB 备份的密码相同的规则;有关详细信息,请参阅 使用 NDB Cluster Management Client 创建备份。
假设密码文件存在并具有适当的权限,您可以使用以下set
命令将密码提供给数据节点:
mcm> set filesystem-password-file:ndbmtd=/opt/mcm_data/my.pwd mycluster;
+-----------------------------------+
| Command result |
+-----------------------------------+
| Cluster reconfigured successfully |
+-----------------------------------+
设置密码文件的路径后,您可以启用加密,如下所示:
mcm> set EncryptedFileSystem:ndbmtd=1 mycluster;
+-----------------------------------+
| Command result |
+-----------------------------------+
| Cluster reconfigured successfully |
+-----------------------------------+
如果没有设置加密密码文件,
set
刚才显示的命令将被错误拒绝。
get
您可以使用类似于以下命令
的命令验证是否启用了加密
:
mcm> get -d filesystem-pass*,encrypt* mycluster;
+--------------------------+---------------------------+----------+---------+----------+---------+---------+----------+
| Name | Value | Process1 | NodeId1 | Process2 | NodeId2 | Level | Comment |
+--------------------------+---------------------------+----------+---------+----------+---------+---------+----------+
| EncryptedFileSystem | 1 | ndbmtd | 1 | | | Process | |
| filesystem-password-file | /opt/mcm_data/my.pwd | ndbmtd | 1 | | | Process | MCM only |
| EncryptedFileSystem | 1 | ndbmtd | 2 | | | Process | |
| filesystem-password-file | /opt/mcm_data/my.pwd | ndbmtd | 2 | | | Process | MCM only |
+--------------------------+---------------------------+----------+---------+----------+---------+---------+----------+
您还可以在 MySQL Cluster Manager 甚至正在运行的 NDB Cluster 之外验证集群数据文件是否已使用 NDB Cluster 提供的 ndbxfrm实用程序进行加密,类似于此处显示的内容:
$> ndbxfrm -i /home/mcm/clusters/mycluster/1/data/ndb_1_fs/LCP/0/T10F0.Data
File=/home/mcm/clusters/mycluster/1/data/ndb_1_fs/LCP/0/T10F0.Data, compression=no, encryption=yes
您可以通过更改现有文件(或设置新文件)来轮换文件系统密码,然后发布
以触发初始滚动重启。或者,您可以使用
后跟
来替换每个数据节点进程使用的密码,一次一个。
set
--retry
EncryptedFilesystem:ndbmtd=1
stop process
start process
--initial