MySQL8-中文参考-四十二-
MySQL8 中文参考(四十二)
译文:
dev.mysql.com/doc/refman/8.0/en/ndb-restore-to-different-version.html
25.5.23.1 将 NDB 备份还原到不同版本的 NDB 集群
以下两个部分提供了有关将本机 NDB 备份还原到与备份所在版本不同的 NDB 集群版本的信息。
此外,您应该参考第 25.3.7 节,“升级和降级 NDB 集群”,了解尝试将 NDB 备份还原到运行不同版本 NDB 软件的集群时可能遇到的其他问题。
此外,建议查看 What is New in NDB Cluster 8.0 以及第 3.5 节,“MySQL 8.0 中的更改”,了解 NDB 8.0 与 NDB 集群以前版本之间的其他变化,这些变化可能与您的特定情况相关。
25.5.23.1.1 将 NDB 备份还原到较旧版本的 NDB 集群
当尝试将从较新版本的 NDB 集群中获取的备份还原到较旧版本时,可能会遇到问题,原因是使用了在较早版本中不存在的功能。以下列出了一些问题:
-
utf8mb4_ai_ci 字符集。 NDB 8.0 中默认使用
utf8mb4_ai_ci
字符集创建的表,在 NDB 7.6 及更早版本中不可用,因此无法被这些较早版本中的ndb_restore二进制文件读取。在这种情况下,必须修改任何使用utf8mb4_ai_ci
的表,以便它们使用较旧版本支持的字符集进行备份前的操作。 -
表元数据格式。 由于 MySQL 服务器和 NDB 处理表元数据的方式发生了变化,使用 NDB 8.0 中包含的 MySQL 服务器二进制文件创建或更改的表无法使用ndb_restore还原到 NDB 7.6 或更早版本的 NDB 集群。这些表使用
.sdi
文件,较旧版本的mysqld无法理解。一个在 NDB 8.0 中备份的表,该表在 NDB 7.6 或更早版本中创建,并且自升级到 NDB 8.0 以来未被修改,应该可以恢复到较旧版本的 NDB 集群。
由于可以分别恢复元数据和表数据,因此在这种情况下,您可以使用mysqldump制作的转储文件恢复表模式,或者手动执行必要的
CREATE TABLE
语句,然后仅使用ndb_restore和--restore-data
选项导入表数据。 -
多线程备份。 在 NDB 8.0 中进行的多线程备份可以通过以下两种方式之一还原到运行较早版本
NDB
的集群中:-
使用 NDB 8.0 中的ndb_restore二进制文件执行并行还原。参见第 25.5.23.3.1 节,“并行还原并行备份”。
-
串行还原备份;在这种情况下,不需要较新版本的ndb_restore。请参见第 25.5.23.3.2 节,“串行还原并行备份”。
-
-
加密备份。 在 NDB 8.0.22 及更高版本中创建的加密备份无法使用 NDB 8.0.21 或更早版本的ndb_restore进行还原。
-
NDB_STORED_USER 权限。
NDB_STORED_USER
权限仅在 NDB 8.0 中受支持。 -
数据节点的最大数量。 NDB Cluster 8.0 支持最多 144 个数据节点,而较早版本仅支持最多 48 个数据节点。有关此不兼容性引起问题的情况,请参见第 25.5.23.2.1 节,“还原到少于原始节点数”。
25.5.23.1.2 将 NDB 备份还原到较新版本的 NDB Cluster
一般来说,应该可以将使用 ndb_mgm 客户端的 START BACKUP
命令创建的备份从旧版本的 NDB 恢复到新版本,只要你使用新版本附带的 ndb_restore 二进制文件即可。(可能可以使用旧版本的 ndb_restore,但不建议这样做。)其他潜在问题列在这里:
-
在从备份中恢复元数据时(
--restore-meta
选项),ndb_restore 通常会尝试精确复制备份时的表模式。在 NDB 8.0 之前的版本中创建的表使用
.frm
文件存储它们的元数据。这些文件可以被 mysqld 在 NDB 8.0 中读取,mysqld 可以使用其中包含的信息来创建后续版本中 MySQL 数据字典使用的.sdi
文件。 -
在将旧备份恢复到新版本的 NDB 时,可能无法利用新功能,如 hashmap 分区、更多的 hashmap 桶、读取备份和不同的分区布局。因此,最好使用 mysqldump 和 mysql 客户端来恢复旧模式,这样 NDB 就可以利用新的模式功能。
-
使用旧的时间类型且不支持小数秒(用于 MySQL 5.6.4 之前和 NDB 7.3.31 之前)的表无法使用 ndb_restore 恢复到 NDB 8.0。您可以使用
CHECK TABLE
检查这样的表,然后在 mysql 客户端中使用REPAIR TABLE
必要时将其升级到新的时间列格式;这必须在进行备份之前完成。有关更多信息,请参见 Section 3.6, “Preparing Your Installation for Upgrade”。您还可以使用使用 mysqldump 创建的转储来恢复这样的表。
-
在 NDB 7.6 及更早版本中创建的分布式授权表在 NDB 8.0 中不受支持。这些表可以恢复到 NDB 8.0 集群,但对访问控制没有影响。
译文:
dev.mysql.com/doc/refman/8.0/en/ndb-restore-different-number-nodes.html
25.5.23.2 还原到不同数量的数据节点
可以将从 NDB 备份还原到具有不同数量数据节点的集群,与备份来源的原始集群数量不同。以下两个部分分别讨论了目标集群比备份源具有更少或更多数据节点的情况。
25.5.23.2.1 还原到比原始节点少的节点
您可以将备份还原到比原始数据节点少的集群,只要较大数量的节点是较小数量的节点的偶数倍。在以下示例中,我们使用在具有四个数据节点的集群上进行的备份还原到具有两个数据节点的集群。
-
原始集群的管理服务器位于主机
host10
上。原始集群有四个数据节点,节点 ID 和主机名如下所示,来自管理服务器的config.ini
文件的摘录:[ndbd] NodeId=2 HostName=host2 [ndbd] NodeId=4 HostName=host4 [ndbd] NodeId=6 HostName=host6 [ndbd] NodeId=8 HostName=host8
我们假设每个数据节点最初都是使用ndbmtd")
--ndb-connectstring=host10
或等效方式启动的。 -
以正常方式执行备份。有关如何执行此操作的信息,请参见 Section 25.6.8.2, “Using The NDB Cluster Management Client to Create a Backup”。
-
每个数据节点备份创建的文件在这里列出,其中
N
是节点 ID,B
是备份 ID。-
BACKUP-*
B*-0.*
N*.Data
-
BACKUP-*
B*.*
N*.ctl
-
BACKUP-*
B*.*
N*.log
这些文件位于每个数据节点的
BackupDataDir``/BACKUP/BACKUP-*
B*
下,在本示例的其余部分中,我们假设备份 ID 为 1。将所有这些文件保存以备将来复制到新数据节点(可以通过ndb_restore在数据节点的本地文件系统上访问)。将它们全部复制到一个位置最简单;我们假设您已经这样做了。
-
-
目标集群的管理服务器位于主机
host20
上,目标集群有两个数据节点,节点 ID 和主机名如下所示,来自主机host20
上的管理服务器config.ini
文件:[ndbd] NodeId=3 hostname=host3 [ndbd] NodeId=5 hostname=host5
host3
和host5
上的每个数据节点进程应该使用ndbmtd")-c host20
--initial
或等效方式启动,以便新(目标)集群以干净的数据节点文件系统启动。 -
将两组不同的两个备份文件复制到目标数据节点中的每一个。例如,将原始集群中节点 2 和 4 的备份文件复制到目标集群中的节点 3。这些文件如下所示:
-
BACKUP-1-0.2.Data
-
BACKUP-1.2.ctl
-
BACKUP-1.2.log
-
BACKUP-1-0.4.Data
-
BACKUP-1.4.ctl
-
BACKUP-1.4.log
然后将节点 6 和 8 的备份文件复制到节点 5;这些文件如下列表所示:
-
BACKUP-1-0.6.Data
-
BACKUP-1.6.ctl
-
BACKUP-1.6.log
-
BACKUP-1-0.8.Data
-
BACKUP-1.8.ctl
-
BACKUP-1.8.log
在本示例的其余部分中,我们假设相应的备份文件已保存在节点 3 和 5 上的目录
/BACKUP-1
中。 -
-
在两个目标数据节点上,您必须从两组备份中恢复。首先,通过在
host3
上调用ndb_restore将节点 2 和 4 的备份还原到节点 3,如下所示:$> ndb_restore -c host20 --nodeid=2 --backupid=1 --restore-data --backup-path=/BACKUP-1 $> ndb_restore -c host20 --nodeid=4 --backupid=1 --restore-data --backup-path=/BACKUP-1
然后通过在
host5
上调用ndb_restore将节点 6 和 8 的备份还原到节点 5,如下所示:$> ndb_restore -c host20 --nodeid=6 --backupid=1 --restore-data --backup-path=/BACKUP-1 $> ndb_restore -c host20 --nodeid=8 --backupid=1 --restore-data --backup-path=/BACKUP-1
25.5.23.2.2 恢复到比原始节点更多的节点
给定ndb_restore命令指定的节点 ID 是原始备份中的节点 ID,而不是要将其恢复到的数据节点的节点 ID。当使用本节描述的方法执行备份时,ndb_restore连接到管理服务器并获取正在将备份恢复到的集群中的数据节点列表。恢复的数据相应地分布,因此在执行备份时不需要知道或计算目标集群中的节点数。
注意
当更改每个节点组的 LCP 线程或 LQH 线程的总数时,应重新创建使用mysqldump创建的备份的模式。
-
创建数据备份。您可以通过从系统 shell 调用ndb_mgm客户端的
START BACKUP
命令来执行此操作,如下所示:$> ndb_mgm -e "START BACKUP 1"
这假定所需的备份 ID 为 1。
-
创建模式备份。只有在更改每个节点组的 LCP 线程或 LQH 线程的总数时才需要执行此步骤。
$> mysqldump --no-data --routines --events --triggers --databases > myschema.sql
重要
一旦使用ndb_mgm创建了
NDB
本地备份,您在创建模式备份之前不得进行任何模式更改,如果这样做。 -
将备份目录复制到新集群。例如,如果要恢复的备份具有 ID 1 和
BackupDataDir
=/backups/node_*
nodeid*
,则此节点上备份的路径为/backups/node_1/BACKUP/BACKUP-1
。在此目录中有三个文件,列在此处:-
BACKUP-1-0.1.Data
-
BACKUP-1.1.ctl
-
BACKUP-1.1.log
您应该将整个目录复制到新节点。
如果您需要创建模式文件,请将其复制到 SQL 节点上的位置,以便mysqld可以读取。
-
没有要求必须从特定节点或节点恢复备份。
要从刚刚创建的备份中恢复,请执行以下步骤:
-
恢复模式。
-
如果您使用mysqldump创建了单独的模式备份文件,请使用mysql客户端导入此文件,类似于以下内容:
$> mysql < myschema.sql
在导入模式文件时,您可能需要指定
--user
和--password
选项(可能还有其他选项),以便mysql客户端能够连接到 MySQL 服务器。 -
如果您不需要创建模式文件,可以使用ndb_restore
--restore-meta
(简写为-m
)重新创建模式,类似于以下内容:$> ndb_restore --nodeid=1 --backupid=1 --restore-meta --backup-path=/backups/node_1/BACKUP/BACKUP-1
ndb_restore 必须能够联系管理服务器;根据需要添加
--ndb-connectstring
选项以实现这一点。
-
-
恢复数据。这需要针对原始集群中的每个数据节点执行一次,每次使用该数据节点的节点 ID。假设原始有 4 个数据节点,则所需的命令集将类似于以下内容:
ndb_restore --nodeid=1 --backupid=1 --restore-data --backup-path=/backups/node_1/BACKUP/BACKUP-1 --disable-indexes ndb_restore --nodeid=2 --backupid=1 --restore-data --backup-path=/backups/node_2/BACKUP/BACKUP-1 --disable-indexes ndb_restore --nodeid=3 --backupid=1 --restore-data --backup-path=/backups/node_3/BACKUP/BACKUP-1 --disable-indexes ndb_restore --nodeid=4 --backupid=1 --restore-data --backup-path=/backups/node_4/BACKUP/BACKUP-1 --disable-indexes
这些可以并行运行。
请务必根据需要添加
--ndb-connectstring
选项。 -
重建索引。这些索引已被禁用,因为在刚刚显示的命令中使用了
--disable-indexes
选项。重新创建索引可以避免由于恢复在所有点上不一致而导致的错误。重建索引在某些情况下还可以提高性能。要重建索引,请在单个节点上执行以下命令一次:$> ndb_restore --nodeid=1 --backupid=1 --backup-path=/backups/node_1/BACKUP/BACKUP-1 --rebuild-indexes
正如之前提到的,您可能需要添加
--ndb-connectstring
选项,以便ndb_restore可以联系管理服务器。
原文:
dev.mysql.com/doc/refman/8.0/en/ndb-restore-parallel-data-node-backup.html
25.5.23.3 从并行进行的备份中恢复
NDB Cluster 8.0 支持在每个数据节点上使用ndbmtd进行并行备份,具有多个 LDMs(参见第 25.6.8.5 节,“使用并行数据节点进行 NDB 备份”)。接下来的两节描述了如何恢复以这种方式进行的备份。
25.5.23.3.1 并行恢复并行备份
并行恢复并行备份需要来自 NDB 8.0 发行版的ndb_restore二进制文件。该过程与在ndb_restore程序描述下的一般用法部分中概述的过程没有实质性区别,并且包括执行两次ndb_restore,类似于以下所示:
$> ndb_restore -n 1 -b 1 -m --backup-path=*path/to/backup_dir*/BACKUP/BACKUP-*backup_id*
$> ndb_restore -n 1 -b 1 -r --backup-path=*path/to/backup_dir*/BACKUP/BACKUP-*backup_id*
backup_id
是要恢复的备份的 ID。在一般情况下,不需要额外的特殊参数;ndb_restore始终检查由--backup-path
选项指示的目录下是否存在并行子目录,并恢复元数据(串行)然后表数据(并行)。
25.5.23.3.2 串行恢复并行备份
可以以串行方式恢复在数据节点上使用并行方式创建的备份。为此,请调用ndb_restore,并使用--backup-path
指向每个 LDM 在主备份目录下创建的子目录,首先恢复任何一个子目录以恢复元数据(由于每个子目录包含元数据的完整副本,因此无论选择哪一个都可以),然后依次恢复每个子目录中的数据。假设我们想要恢复备份 ID 为 100 的备份,该备份使用四个 LDMs,并且BackupDataDir
为/opt
。在这种情况下,我们可以像这样调用ndb_restore来恢复元数据:
$> ndb_restore -n 1 -b 1 -m --backup-path=opt/BACKUP/BACKUP-100/BACKUP-100-PART-1-OF-4
要恢复表数据,请依次执行ndb_restore 四次,每次使用一个子目录,如下所示:
$> ndb_restore -n 1 -b 1 -r --backup-path=opt/BACKUP/BACKUP-100/BACKUP-100-PART-1-OF-4
$> ndb_restore -n 1 -b 1 -r --backup-path=opt/BACKUP/BACKUP-100/BACKUP-100-PART-2-OF-4
$> ndb_restore -n 1 -b 1 -r --backup-path=opt/BACKUP/BACKUP-100/BACKUP-100-PART-3-OF-4
$> ndb_restore -n 1 -b 1 -r --backup-path=opt/BACKUP/BACKUP-100/BACKUP-100-PART-4-OF-4
您可以使用相同的技术将并行备份恢复到不支持并行备份的较旧版本的 NDB 集群(7.6 或更早版本),使用较旧版本 NDB 集群软件提供的ndb_restore二进制文件。
25.5.24 ndb_secretsfile_reader — 从加密的 NDB 数据文件中获取密钥信息
原文:
dev.mysql.com/doc/refman/8.0/en/mysql-cluster-programs-ndb-secretsfile-reader.html
ndb_secretsfile_reader 从 NDB
加密秘密文件中获取加密密钥,给定密码。
用法
ndb_secretsfile_reader *options* *file*
选项
必须包括 --filesystem-password
或 --filesystem-password-from-stdin
之一,并且必须提供加密密码,如下所示:
> ndb_secretsfile_reader --filesystem-password=54kl14 ndb_5_fs/D1/NDBCNTR/S0.sysfile
ndb_secretsfile_reader: [Warning] Using a password on the command line interface can be insecure.
cac256e18b2ddf6b5ef82d99a72f18e864b78453cc7fa40bfaf0c40b91122d18
可与 ndb_secretsfile_reader 一起使用的其他选项显示在下表中。表后面有附加描述。
表 25.45 与程序 ndb_secretsfile_reader 一起使用的命令行选项
格式 | 描述 | 添加、弃用或移除 |
---|---|---|
--defaults-extra-file=path |
在读取全局文件后读取给定文件 | (在基于 MySQL 8.0 的所有 NDB 版本中支持) |
--defaults-file=path |
仅从给定文件中读取默认选项 | (在基于 MySQL 8.0 的所有 NDB 版本中支持) |
--defaults-group-suffix=string |
还读取具有 concat(group, suffix) 的组 | (在基于 MySQL 8.0 的所有 NDB 版本中支持) |
--filesystem-password=password |
节点文件系统加密的密码;可以从 stdin、tty 或 my.cnf 文件传递 | 添加: 8.0.31 |
--filesystem-password-from-stdin={TRUE|FALSE} |
从 stdin 获取加密密码 | 添加: 8.0.31 |
--help ,-? |
显示帮助文本并退出 | (在基于 MySQL 8.0 的所有 NDB 版本中支持) |
--login-path=path |
从登录文件中读取���定路径 | (在基于 MySQL 8.0 的所有 NDB 版本中支持) |
--no-defaults |
不从登录文件以外的任何选项文件中读取默认选项 | (在基于 MySQL 8.0 的所有 NDB 版本中支持) |
--print-defaults |
打印程序参数列表并退出 | (在基于 MySQL 8.0 的所有 NDB 版本中支持) |
--usage ,-? |
显示帮助文本并退出;与 --help 相同 | (在基于 MySQL 8.0 的所有 NDB 版本中支持) |
--version ,-V |
显示版本信息并退出 | (在基于 MySQL 8.0 的所有 NDB 版本中支持) |
格式 | 描述 | 添加、弃用或移除 |
-
--defaults-extra-file
命令行格式 --defaults-extra-file=path
类型 字符串 默认值 [none]
在读取全局文件后读取给定文件。
-
--defaults-file
命令行格式 --defaults-file=path
类型 字符串 默认值 [none]
仅从给定文件中读取默认选项。
-
--defaults-group-suffix
命令行格式 --defaults-group-suffix=string
类型 字符串 默认值 [none]
还读取带有 concat(group, suffix) 的组。
-
--filesystem-password
命令行格式 --filesystem-password=password
引入版本 8.0.31 通过
stdin
、tty
或my.cnf
文件将文件系统加密和解密密码传递给ndb_secretsfile_reader。 -
--filesystem-password-from-stdin
命令行格式 --filesystem-password-from-stdin={TRUE|FALSE}
引入版本 8.0.31 从
stdin
(仅限)向 ndb_secretsfile_reader 传递文件系统加密和解密密码。 -
--help
命令行格式 --help
显示帮助文本并退出。
-
--login-path
命令行格式 --login-path=path
类型 字符串 默认值 [none]
从登录文件中读取给定路径。
-
--no-defaults
命令行格式 --no-defaults
不要从除登录文件之外的任何选项文件中读取默认选项。
-
--print-defaults
命令行格式 --print-defaults
打印程序参数列表并退出。
-
--usage
命令行格式 --usage
显示帮助文本并退出;与 --help 相同。
-
--version
命令行格式 --version
显示版本信息并退出。
ndb_secretsfile_reader是在 NDB 8.0.31 中添加的。
25.5.25 ndb_select_all — 从 NDB 表中打印行
原文:
dev.mysql.com/doc/refman/8.0/en/mysql-cluster-programs-ndb-select-all.html
ndb_select_all 将所有行从 NDB
表打印到 stdout
。
用法
ndb_select_all -c *connection_string* *tbl_name* -d *db_name* [> *file_name*]
可与 ndb_select_all 一起使用的选项显示��下表中。表后面还有附加描述。
表 25.46 与程序 ndb_select_all 一起使用的命令行选项
格式 | 描述 | 添加、弃用或移除 |
---|---|---|
--character-sets-dir=path |
包含字符集的目录 | 移除:8.0.31 |
--connect-retries=# |
放弃之前重试连接的次数 | (在基于 MySQL 8.0 的所有 NDB 版本中支持) |
--connect-retry-delay=# |
重试联系管理服务器之间等待的秒数 | (在基于 MySQL 8.0 的所有 NDB 版本中支持) |
--connect-string=connection_string ,-c connection_string |
与 --ndb-connectstring 相同 | (在基于 MySQL 8.0 的所有 NDB 版本中支持) |
--core-file |
在错误时写入核心文件;用于调试 | 移除:8.0.31 |
--database=name ,-d name |
表所在数据库的名称 | (在基于 MySQL 8.0 的所有 NDB 版本中支持) |
--defaults-extra-file=path |
读取全局文件后读取给定文件 | (在基于 MySQL 8.0 的所有 NDB 版本中支持) |
--defaults-file=path |
仅从给定文件中读取默认选项 | (在基于 MySQL 8.0 的所有 NDB 版本中支持) |
--defaults-group-suffix=string |
也读取 concat(group, suffix) 组 | (在基于 MySQL 8.0 的所有 NDB 版本中支持) |
--delimiter=char ,-D char |
设置列分隔符 | (在基于 MySQL 8.0 的所有 NDB 版本中支持) |
--descending ,-z |
按降序对结果集进行排序(需要--order) | (在基于 MySQL 8.0 的所有 NDB 版本中支持) |
--disk |
打印磁盘引用(仅对具有未索引列的磁盘数据表有用) | (在基于 MySQL 8.0 的所有 NDB 版本中支持) |
--gci |
在输出中包含 GCI | (在基于 MySQL 8.0 的所有 NDB 版本中支持) |
--gci64 |
在输出中包含 GCI 和行时代 | (在基于 MySQL 8.0 的所有 NDB 版本中支持) |
[--header[=value]](mysql-cluster-programs-ndb-select-all.html#option_ndb_select_all_header) ,-h |
打印标题(设置为 0 或 FALSE 以禁用输出中的标题) | (在基于 MySQL 8.0 的所有 NDB 版本中支持) |
--lock=# ,-l # |
锁类型 | (在基于 MySQL 8.0 的所有 NDB 版本中支持) |
--login-path=path |
从登录文件中读取给定路径 | (在基于 MySQL 8.0 的所有 NDB 版本中支持) |
--help ,-? |
显示帮助文本并退出 | (在基于 MySQL 8.0 的所有 NDB 版本中支持) |
--ndb-connectstring=connection_string ,-c connection_string |
设置连接到 ndb_mgmd 的连接字符串。语法:"[nodeid=id;][host=]hostname[:port]"。覆盖 NDB_CONNECTSTRING 和 my.cnf 中的条目 | (在基于 MySQL 8.0 的所有 NDB 版本中支持) |
--ndb-mgmd-host=connection_string ,-c connection_string |
与--ndb-connectstring 相同 | (在基于 MySQL 8.0 的所有 NDB 版本中支持) |
--ndb-nodeid=# |
为此节点设置节点 ID,覆盖任何由 --ndb-connectstring 设置的 ID | (在基于 MySQL 8.0 的所有 NDB 发行版中支持) |
--ndb-optimized-node-selection |
启用用于事务节点选择的优化。默认启用;使用 --skip-ndb-optimized-node-selection 禁用 | 移除: 8.0.31 |
--no-defaults |
不从除登录文件之外的任何选项文件中读取默认选项 | (在基于 MySQL 8.0 的所有 NDB 发行版中支持) |
--nodata |
不打印表列数据 | (在基于 MySQL 8.0 的所有 NDB 发行版中支持) |
--order=index ,-o index |
根据具有此名称的索引对结果集进行排序 | (在基于 MySQL 8.0 的所有 NDB 发行版中支持) |
--parallelism=# ,-p # |
并行度 | (在基于 MySQL 8.0 的所有 NDB 发行版中支持) |
--print-defaults |
打印程序参数列表并退出 | (在基于 MySQL 8.0 的所有 NDB 发行版中支持) |
--rowid |
打印行 ID | (在基于 MySQL 8.0 的所有 NDB 发行版中支持) |
--tupscan ,-t |
按照 tup 顺序扫描 | (在基于 MySQL 8.0 的所有 NDB 发行版中支持) |
--usage ,-? |
显示帮助文本并退出;与 --help 相同 | (在基于 MySQL 8.0 的所有 NDB 发行版中支持) |
--useHexFormat ,-x |
以十六进制格式输出数字 | (在基于 MySQL 8.0 的所有 NDB 发行版中支持) |
--version ,-V |
显示版本信息并退出 | (在基于 MySQL 8.0 的所有 NDB 发行版中支持) |
格式 | 描述 | 添加、弃用或移除 |
-
--character-sets-dir
命令行格式 --character-sets-dir=path
移除 8.0.31 包含字符集的目录。
-
--connect-retries
命令行格式 --connect-retries=#
类型 整数 默认值 12
最小值 0
最大值 12
放弃之前重试连接的次数。
-
--connect-retry-delay
命令行格式 --connect-retry-delay=#
类型 整数 默认值 5
最小值 0
最大值 5
尝试联系管理服务器之间等待的秒数。
-
--connect-string
命令行格式 --connect-string=connection_string
类型 字符串 默认值 [none]
与
--ndb-connectstring
相同。 -
--core-file
命令行格式 --core-file
移除 8.0.31 在错误时写入核心文件;用于调试。
-
--database=*
dbname*
,-d
dbname
表所在的数据库名称。默认值为
TEST_DB
。 -
--descending
,-z
将输出按降序排序。此选项只能与
-o
(--order
) 选项一起使用。 -
--defaults-extra-file
命令行格式 --defaults-extra-file=path
类型 字符串 默认值 [none]
在读取全局文件后读取给定文件。
-
--defaults-file
命令行格式 --defaults-file=path
类型 字符串 默认值 [none]
仅从给定文件中读取默认选项。
-
--defaults-group-suffix
命令行格式 --defaults-group-suffix=string
类型 字符串 默认值 [none]
还可以读取使用 concat(group, suffix)的组。
-
--delimiter=*
character*
,-D *
character*
导致
character
被用作列分隔符。只有表数据列才会被此分隔符分隔。默认分隔符是制表符。
-
--disk
向输出中添加一个磁盘引用列。该列仅对具有非索引列的磁盘数据表非空。
-
--gci
向输出中添加一个
GCI
列,显示每行最后更新时的全局检查点。有关检查点的更多信息,请参见第 25.2 节,“NDB 集群概述”和第 25.6.3.2 节,“NDB 集群日志事件”。 -
--gci64
向输出中添加一个
ROW$GCI64
列,显示每行最后更新时的全局检查点,以及此更新发生的时代编号。 -
--help
命令行格式 --help
显示帮助文本并退出。
-
--lock=*
lock_type*
,-l *
lock_type*
在读取表时使用锁定。
lock_type
的可能值为:-
0
: 读取锁定 -
1
: 读取锁定并保持 -
2
: 独占读取锁定
此选项没有默认值。
-
-
--login-path
命令行格式 --login-path=path
类型 字符串 默认值 [none]
从登录文件中读取给定路径。
-
--header=FALSE
从输出中排除列标题。
-
--nodata
导致任何表数据被省略。
-
--ndb-connectstring
命令行格式 --ndb-connectstring=connection_string
类型 字符串 默认值 [none]
设置用于连接到 ndb_mgmd 的连接字符串。语法:"[nodeid=id;][host=]hostname[:port]"。覆盖 NDB_CONNECTSTRING 和 my.cnf 中的条目。
-
--ndb-mgmd-host
命令行格式 --ndb-mgmd-host=connection_string
类型 字符串 默认值 [none]
与
--ndb-connectstring
相同。 -
--ndb-nodeid
命令行格式 --ndb-nodeid=#
类型 整数 默认值 [none]
设置此节点的节点 ID,覆盖由
--ndb-connectstring
设置的任何 ID。 -
--ndb-optimized-node-selection
命令行格式 --ndb-optimized-node-selection
已移除 8.0.31 启用用于事务节点选择的优化。默认启用;使用
--skip-ndb-optimized-node-selection
来禁用。 -
--no-defaults
命令行格式 --no-defaults
不要从登录文件以外的任何选项文件中读取默认选项。
-
--order=*
index_name*
,-o *
index_name*
根据名为
index_name
的索引对输出进行排序。注意
这是一个索引的名称,而不是列的名称;在创建时必须显式命名索引。
-
parallelism=*
#*
,-p
#
指定并行度。
-
--print-defaults
命令行格式 --print-defaults
打印程序参数列表并退出。
-
--rowid
添加一个
ROWID
列,提供有关存储行的片段的信息。 -
--tupscan
,-t
按元组的顺序扫描表。
-
--usage
命令行格式 --usage
显示帮助文本并退出;与
--help
相同。 -
--useHexFormat
-x
导致所有数字值以十六进制格式显示。这不会影响包含在字符串或日期时间值中的数字的输出。
-
--version
命令行格式 --version
显示版本信息并退出。
示例输出
来自 MySQL SELECT
语句的输出:
mysql> SELECT * FROM ctest1.fish;
+----+-----------+
| id | name |
+----+-----------+
| 3 | shark |
| 6 | puffer |
| 2 | tuna |
| 4 | manta ray |
| 5 | grouper |
| 1 | guppy |
+----+-----------+
6 rows in set (0.04 sec)
与等效调用ndb_select_all的输出:
$> ./ndb_select_all -c localhost fish -d ctest1
id name
3 [shark]
6 [puffer]
2 [tuna]
4 [manta ray]
5 [grouper]
1 [guppy]
6 rows returned
所有字符串值在ndb_select_all的输出中都用方括号([
...]
)括起来。另一个示例,请考虑在此处创建和填充的表:
CREATE TABLE dogs (
id INT(11) NOT NULL AUTO_INCREMENT,
name VARCHAR(25) NOT NULL,
breed VARCHAR(50) NOT NULL,
PRIMARY KEY pk (id),
KEY ix (name)
)
TABLESPACE ts STORAGE DISK
ENGINE=NDBCLUSTER;
INSERT INTO dogs VALUES
('', 'Lassie', 'collie'),
('', 'Scooby-Doo', 'Great Dane'),
('', 'Rin-Tin-Tin', 'Alsatian'),
('', 'Rosscoe', 'Mutt');
这演示了几个额外的ndb_select_all选项的使用:
$> ./ndb_select_all -d ctest1 dogs -o ix -z --gci --disk
GCI id name breed DISK_REF
834461 2 [Scooby-Doo] [Great Dane] [ m_file_no: 0 m_page: 98 m_page_idx: 0 ]
834878 4 [Rosscoe] [Mutt] [ m_file_no: 0 m_page: 98 m_page_idx: 16 ]
834463 3 [Rin-Tin-Tin] [Alsatian] [ m_file_no: 0 m_page: 34 m_page_idx: 0 ]
835657 1 [Lassie] [Collie] [ m_file_no: 0 m_page: 66 m_page_idx: 0 ]
4 rows returned
25.5.26 ndb_select_count — 打印 NDB 表的行数
原文:
dev.mysql.com/doc/refman/8.0/en/mysql-cluster-programs-ndb-select-count.html
ndb_select_count 打印一个或多个 NDB
表中的行数。对于单个表,结果等同于使用 MySQL 语句 SELECT COUNT(*) FROM *
tbl_name*
获得的结果。
用法
ndb_select_count [-c *connection_string*] -d*db_name* *tbl_name*[, *tbl_name2*[, ...]]
可与ndb_select_count一起使用的选项如下表所示。表后面会有额外的描述。
表 25.47 与程序 ndb_select_count 一起使用的命令行选项
格式 | 描述 | 添加、弃用或移除 |
---|---|---|
--character-sets-dir=path |
包含字符集的目录 | 移除:8.0.31 |
--connect-retries=# |
放弃之前重试连接的次数 | (在基于 MySQL 8.0 的所有 NDB 版本中支持) |
--connect-retry-delay=# |
尝试联系管理服务器之间等待的秒数 | (在基于 MySQL 8.0 的所有 NDB 版本中支持) |
--connect-string=connection_string ,-c connection_string |
与 --ndb-connectstring 相同 | (在基于 MySQL 8.0 的所有 NDB 版本中支持) |
--core-file |
在错误时写入核心文件;用于调试 | 移除:8.0.31 |
--database=name ,-d name |
表所在数据库的名称 | (在基于 MySQL 8.0 的所有 NDB 版本中支持) |
--defaults-extra-file=path |
在全局文件读取后读取给定文件 | (在基于 MySQL 8.0 的所有 NDB 版本中支持) |
--defaults-file=path |
仅从给定文件中读取默认选项 | (在基于 MySQL 8.0 的所有 NDB 版本中支持) |
--defaults-group-suffix=string |
也读取带有 concat(group, suffix) 的组 | (在基于 MySQL 8.0 的所有 NDB 版本中支持) |
--help ,-? |
显示帮助文本并退出 | (在基于 MySQL 8.0 的所有 NDB 版本中支持) |
--lock=# ,-l # |
锁类型 | (在基于 MySQL 8.0 的所有 NDB 版本中支持) |
--login-path=path |
从登录文件中读取给定路径 | (在基于 MySQL 8.0 的所有 NDB 版本中支持) |
--ndb-connectstring=connection_string ,-c connection_string |
设置连接到 ndb_mgmd 的连接字符串。语法: "[nodeid=id;][host=]hostname[:port]"。覆盖 NDB_CONNECTSTRING 和 my.cnf 中的条目 | (在基于 MySQL 8.0 的所有 NDB 版本中支持) |
--ndb-mgmd-host=connection_string ,-c connection_string |
与 --ndb-connectstring 相同 | (在基于 MySQL 8.0 的所有 NDB 版本中支持) |
--ndb-nodeid=# |
为此节点设置节点 ID,覆盖由 --ndb-connectstring 设置的任何 ID | (在基于 MySQL 8.0 的所有 NDB 版本中支持) |
--ndb-optimized-node-selection |
启用用于事务节点选择的优化。默认启用;使用 --skip-ndb-optimized-node-selection 来禁用 | 已移除: 8.0.31 |
--no-defaults |
不从登录文件以外的任何选项文件中读取默认选项 | (在基于 MySQL 8.0 的所有 NDB 版本中支持) |
--parallelism=# ,-p # |
并行度 | (在基于 MySQL 8.0 的所有 NDB 版本中支持) |
--print-defaults |
打印程序参数列表并退出 | (在基于 MySQL 8.0 的所有 NDB 版本中支持) |
--usage ,-? |
显示帮助文本并退出;与 --help 相同 | (在基于 MySQL 8.0 的所有 NDB 版本中支持) |
--version ,-V |
显示版本信息并退出 | (在基于 MySQL 8.0 的所有 NDB 版本中支持) |
格式 | 描述 | 添加、弃用或移除 |
-
--character-sets-dir
命令行格式 --character-sets-dir=path
移除 8.0.31 包含字符集的目录。
-
--connect-retries
命令行格式 --connect-retries=#
类型 整数 默认值 12
最小值 0
最大值 12
在放弃之前重试连接的次数。
-
--connect-retry-delay
命令行格式 --connect-retry-delay=#
类型 整数 默认值 5
最小值 0
最大值 5
尝试联系管理服务器之间等待的秒数。
-
--connect-string
命令行格式 --connect-string=connection_string
类型 字符串 默认值 [none]
与
--ndb-connectstring
相同。 -
--core-file
命令行格式 --core-file
移除 8.0.31 在错误时写入核心文件;用于调试。
-
--defaults-file
命令行格式 --defaults-file=path
类型 字符串 默认值 [none]
仅从给定文件中读取默认选项。
-
--defaults-extra-file
命令行格式 --defaults-extra-file=path
类型 字符串 默认值 [none]
在全局文件读取后读取给定文件。
-
--defaults-group-suffix
命令行格式 --defaults-group-suffix=string
类型 字符串 默认值 [none]
同时读取带有 concat(group, suffix) 的组。
-
--login-path
命令行格式 --login-path=path
类型 字符串 默认值 [none]
从登录文件中读取给定路径。
-
--help
命令行格式 --help
显示帮助文本并退出。
-
--ndb-connectstring
命令行格式 --ndb-connectstring=connection_string
类型 字符串 默认值 [none]
设置连接到 ndb_mgmd 的连接字符串。语法:"[nodeid=id;][host=]hostname[:port]"。覆盖 NDB_CONNECTSTRING 和 my.cnf 中的条目。
-
--ndb-mgmd-host
命令行格式 --ndb-mgmd-host=connection_string
类型 字符串 默认值 [none]
与
--ndb-connectstring
相同。 -
--ndb-optimized-node-selection
命令行格式 --ndb-optimized-node-selection
已移除 8.0.31 启用优化以选择事务节点。默认启用;使用
--skip-ndb-optimized-node-selection
来禁用。 -
--ndb-nodeid
命令行格式 --ndb-nodeid=#
类型 整数 默认值 [none]
为此节点设置节点 ID,覆盖由
--ndb-connectstring
设置的任何 ID。 -
--no-defaults
命令行格式 --no-defaults
不要从除登录文件以外的任何选项文件中读取默认选项。
-
--print-defaults
命令行格式 --print-defaults
打印程序参数列表并退出。
-
--usage
命令行格式 --usage
显示帮助文本并退出;与
--help
相同。 -
--version
命令行格式 --version
显示版本信息并退出。
通过在调用此命令时用空格分隔的表名列表,可以从同一数据库中获取多个表的行数,如示例输出所示。
示例输出
$> ./ndb_select_count -c localhost -d ctest1 fish dogs
6 records in table fish
4 records in table dogs
25.5.27 ndb_show_tables — 显示 NDB 表的列表
原文:
dev.mysql.com/doc/refman/8.0/en/mysql-cluster-programs-ndb-show-tables.html
ndb_show_tables 显示集群中所有NDB
数据库对象的列表。默认情况下,这不仅包括用户创建的表和NDB
系统表,还包括NDB
特定的索引、内部触发器和 NDB 集群磁盘数据对象。
可与 ndb_show_tables 一起使用的选项显示在下表中。表后面是附加描述。
表 25.48 与程序 ndb_show_tables 一起使用的命令行选项
格式 | 描述 | 添加、弃用或移除 |
---|---|---|
--character-sets-dir=path |
包含字符集的目录 | 移除:8.0.31 |
--connect-retries=# |
放弃之前重试连接的次数 | (在基于 MySQL 8.0 的所有 NDB 发行版中支持) |
--connect-retry-delay=# |
尝试联系管理服务器之间等待的秒数 | (在基于 MySQL 8.0 的所有 NDB 发行版中支持) |
--connect-string=connection_string ,-c connection_string |
与 --ndb-connectstring 相同 | (在基于 MySQL 8.0 的所有 NDB 发行版中支持) |
--core-file |
在错误时写入核心文件;用于调试 | 移除:8.0.31 |
--database=name ,-d name |
指定表所在的数据库;数据库名称后必须跟表名 | (在基于 MySQL 8.0 的所有 NDB 发行版中支持) |
--defaults-extra-file=path |
在读取全局文件后读取给定文件 | (在基于 MySQL 8.0 的所有 NDB 发行版中支持) |
--defaults-file=path |
仅从给定文件中读取默认选项 | (在基于 MySQL 8.0 的所有 NDB 版本中支持) |
--defaults-group-suffix=string |
还读取具有 concat(group, suffix) 的组 | (在基于 MySQL 8.0 的所有 NDB 版本中支持) |
--login-path=path |
从登录文件中读取给定路径 | (在基于 MySQL 8.0 的所有 NDB 版本中支持) |
--loops=# ,-l # |
重复输出的次数 | (在基于 MySQL 8.0 的所有 NDB 版本中支持) |
--help ,-? |
显示帮助文本并退出 | (在基于 MySQL 8.0 的所有 NDB 版本中支持) |
--ndb-connectstring=connection_string ,-c connection_string |
设置连接到 ndb_mgmd 的连接字符串。语法:“[nodeid=id;][host=]hostname[:port]”。覆盖 NDB_CONNECTSTRING 和 my.cnf 中的条目 | (在基于 MySQL 8.0 的所有 NDB 版本中支持) |
--ndb-mgmd-host=connection_string ,-c connection_string |
与 --ndb-connectstring 相同 | (在基于 MySQL 8.0 的所有 NDB 版本中支持) |
--ndb-nodeid=# |
设置此节点的节点 ID,覆盖 --ndb-connectstring 设置的任何 ID | (在基于 MySQL 8.0 的所有 NDB 版本中支持) |
--ndb-optimized-node-selection |
启用用于事务节点选择的优化。默认情况下启用;使用 --skip-ndb-optimized-node-selection 来禁用 | 已移除: 8.0.31 |
--no-defaults |
不从登录文件以外的任何选项文件中读取默认选项 | (在基于 MySQL 8.0 的所有 NDB 版本中支持) |
--parsable ,-p |
返回适用于 MySQL LOAD DATA 语句的输出 | (在基于 MySQL 8.0 的所有 NDB 版本中支持) |
--print-defaults |
打印程序参数列表并退出 | (在基于 MySQL 8.0 的所有 NDB 版本中支持) |
--show-temp-status |
显示表临时标志 | (在基于 MySQL 8.0 的所有 NDB 版本中支持) |
--type=# ,-t # |
限制输出到此类型的对象 | (在基于 MySQL 8.0 的所有 NDB 版本中支持) |
--unqualified ,-u |
不限定表名 | (在基于 MySQL 8.0 的所有 NDB 版本中支持) |
--usage ,-? |
显示帮助文本并退出;与 --help 相同 | (在基于 MySQL 8.0 的所有 NDB 版本中支持) |
--version ,-V |
显示版本信息并退出 | (在基于 MySQL 8.0 的所有 NDB 版本中支持) |
格式 | 描述 | 添加、弃用或移除 |
使用
ndb_show_tables [-c *connection_string*]
-
--character-sets-dir
命令行格式 --character-sets-dir=path
已移除 8.0.31 包含字符集的目录。
-
--connect-retries
命令行格式 --connect-retries=#
类型 整数 默认值 12
最小值 0
最大值 12
在放弃之前重试连接的次数。
-
--connect-retry-delay
命令行格式 --connect-retry-delay=#
类型 整数 默认值 5
最小值 0
最大值 5
尝试联系管理服务器之间等待的秒数。
-
--connect-string
命令行格式 --connect-string=connection_string
类型 字符串 默认值 [无]
与
--ndb-connectstring
相同。 -
--core-file
命令行格式 --core-file
已移除 8.0.31 在错误时写入核心文件;用于调试。
-
--database
,-d
指定所找到所需表的数据库的名称。如果给定此选项,则表的名称必须跟在数据库名称后面。
如果未指定此选项,并且
TEST_DB
数据库中找不到任何表,则ndb_show_tables会发出警告。 -
--defaults-extra-file
命令行格式 --defaults-extra-file=path
类型 字符串 默认值 [无]
在读取全局文件后读取给定文件。
-
--defaults-file
命令行格式 --defaults-file=path
类型 字符串 默认值 [无]
仅从给定文件中读取默认选项。
-
--defaults-group-suffix
命令行格式 --defaults-group-suffix=string
类型 字符串 默认值 [无]
还读取具有 concat(group, suffix)的组。
-
--help
命令行格式 --help
显示帮助文本并退出。
-
--login-path
命令行格式 --login-path=path
类型 字符串 默认值 [无]
从登录文件中读取给定路径。
-
--loops
,-l
指定实用程序应执行的次数。当未指定此选项时,此值为 1,但如果使用该选项,则必须为其提供整数参数。
-
--ndb-connectstring
命令行格式 --ndb-connectstring=connection_string
类型 字符串 默认值 [无]
设置用于连接到 ndb_mgmd 的连接字符串。语法:"[nodeid=id;][host=]hostname[:port]"。覆盖 NDB_CONNECTSTRING 和 my.cnf 中的条目。
-
--ndb-mgmd-host
命令行格式 --ndb-mgmd-host=connection_string
类型 字符串 默认值 [无]
与
--ndb-connectstring
相同。 -
--ndb-nodeid
命令行格式 --ndb-nodeid=#
类型 整数 默认值 [无]
为此节点设置节点 ID,覆盖
--ndb-connectstring
设置的任何 ID。 -
--ndb-optimized-node-selection
命令行格式 --ndb-optimized-node-selection
已移除 8.0.31 启用用于事务节点选择的优化。默认情况下启用;使用
--skip-ndb-optimized-node-selection
来禁用。 -
--no-defaults
命令行格式 --no-defaults
不要从除登录文件以外的任何选项文件中读取默认选项。
-
--parsable
,-p
使用此选项会使输出格式适合与
LOAD DATA
一起使用。 -
--print-defaults
命令行格式 --print-defaults
打印程序参数列表并退出。
-
--show-temp-status
如果指定,将显示临时表。
-
--type
,-t
可用于将输出限制为此处显示的整数类型代码指定的一种对象类型:
-
1
: 系统表 -
2
: 用户创建的表 -
3
: 唯一哈希索引
任何其他值会导致列出所有
NDB
数据库对象(默认)。 -
-
--unqualified
,-u
如果指定,将显示未经限定的对象名称。
-
--usage
命令行格式 --usage
显示帮助文本并退出;与
--help
相同。 -
--version
命令行格式 --version
显示版本信息并退出。
注意
只有用户创建的 NDB Cluster 表可以从 MySQL 访问;系统表如SYSTAB_0
对mysqld不可见。但是,您可以使用NDB
API 应用程序(如ndb_select_all)来检查系统表的内容(请参阅 Section 25.5.25, “ndb_select_all — Print Rows from an NDB Table”)。
在 NDB 8.0.20 之前,该程序在运行完成时打印NDBT_ProgramExit - *
status*
,因为不必要地依赖于NDBT
测试库。已删除此依赖项,消除了多余的输出。
25.5.28 ndb_size.pl — NDBCLUSTER 大小需求估算器
原文:
dev.mysql.com/doc/refman/8.0/en/mysql-cluster-programs-ndb-size-pl.html
这是一个 Perl 脚本,可用于估算如果将 MySQL 数据库转换为使用NDBCLUSTER
存储引擎所需的空间量。与本节讨论的其他实用程序不同,它不需要访问 NDB 集群(实际上,它没有理由这样做)。但是,它确实需要访问要测试的数据库所在的 MySQL 服务器。
要求
-
运行中的 MySQL 服务器。服务器实例不必提供对 NDB 集群的支持。
-
需要安装 Perl。
-
DBI
模块,如果它不是您的 Perl 安装的一部分,可以从 CPAN 获取。(许多 Linux 和其他操作系统发行版为此库提供了自己的软件包。) -
具有必要权限的 MySQL 用户帐户。如果您不希望使用现有帐户,则使用
GRANT USAGE ON *
db_name*.*
—其中db_name
是要检查的数据库的名称—对于此目的已经足够。
ndb_size.pl
也可以在 MySQL 源代码中的 storage/ndb/tools
中找到。
可与ndb_size.pl一起使用的选项显示在以下表中。表后面会有额外的描述。
表 25.49 与程序 ndb_size.pl 一起使用的命令行选项
格式 | 描述 | 已添加、已弃用或已移除 |
---|---|---|
--database=string |
要检查的数据库或数据库;逗号分隔的列表;默认为 ALL(使用在服务器上找到的所有数据库) | (在基于 MySQL 8.0 的所有 NDB 版本中支持) |
--hostname=string |
指定主机和可选端口的主机[:端口]格式 | (在基于 MySQL 8.0 的所有 NDB 版本中支持) |
--socket=path |
指定要连接的套接字 | (在基于 MySQL 8.0 的所有 NDB 版本中支持) |
--user=string |
指定 MySQL 用户名 | (在基于 MySQL 8.0 的所有 NDB 版本中支持) |
--password=password |
指定 MySQL 用户密码 | (在基于 MySQL 8.0 的所有 NDB 版本中支持) |
--format=string |
设置输出格式(文本或 HTML) | (在基于 MySQL 8.0 的所有 NDB 版本中支持) |
--excludetables=list |
跳过逗号分隔列表中的任何表 | (在基于 MySQL 8.0 的所有 NDB 版本中支持) |
--excludedbs=list |
跳过逗号分隔列表中的任何数据库 | (在基于 MySQL 8.0 的所有 NDB 版本中支持) |
--savequeries=path |
将数据库中的所有查询保存到指定文件中 | (在基于 MySQL 8.0 的所有 NDB 版本中支持) |
--loadqueries=path |
从指定文件加载所有查询;不连接到数据库 | (在基于 MySQL 8.0 的所有 NDB 版本中支持) |
--real_table_name=string |
指定处理唯一索引大小计算的表 | (在基于 MySQL 8.0 的所有 NDB 版本中支持) |
格式 | 描述 | 添加、弃用或删除 |
用法
perl ndb_size.pl [--database={*db_name*|ALL}] [--hostname=*host*[:*port*]] [--socket=*socket*] \
[--user=*user*] [--password=*password*] \
[--help|-h] [--format={html|text}] \
[--loadqueries=*file_name*] [--savequeries=*file_name*]
默认情况下,此实用程序尝试分析服务器上的所有数据库。您可以使用--database
选项指定单个数据库;使用ALL
作为数据库名称可以明确指定默认行为。您还可以使用逗号分隔的数据库名称列表使用--excludedbs
选项排除一个或多个数据库。类似地,您可以通过在可选的--excludetables
选项后列出其名称(用逗号分隔)来跳过特定表。可以使用--hostname
指定主机名;默认值为localhost
。除了主机,还可以使用host
:port
格式为--hostname
的值指定端口。默认端口号为 3306。必要时,还可以指定套接字;默认值为/var/lib/mysql.sock
。可以使用相应的选项指定 MySQL 用户名和密码。还可以使用--format
选项控制输出的格式;可以使用html
或text
中的任一值,text
为默认值。这里展示了文本输出的示例:
$> ndb_size.pl --database=test --socket=/tmp/mysql.sock
ndb_size.pl report for database: 'test' (1 tables)
--------------------------------------------------
Connected to: DBI:mysql:host=localhost;mysql_socket=/tmp/mysql.sock
Including information for versions: 4.1, 5.0, 5.1
test.t1
-------
DataMemory for Columns (* means varsized DataMemory):
Column Name Type Varsized Key 4.1 5.0 5.1
HIDDEN_NDB_PKEY bigint PRI 8 8 8
c2 varchar(50) Y 52 52 4*
c1 int(11) 4 4 4
-- -- --
Fixed Size Columns DM/Row 64 64 12
Varsize Columns DM/Row 0 0 4
DataMemory for Indexes:
Index Name Type 4.1 5.0 5.1
PRIMARY BTREE 16 16 16
-- -- --
Total Index DM/Row 16 16 16
IndexMemory for Indexes:
Index Name 4.1 5.0 5.1
PRIMARY 33 16 16
-- -- --
Indexes IM/Row 33 16 16
Summary (for THIS table):
4.1 5.0 5.1
Fixed Overhead DM/Row 12 12 16
NULL Bytes/Row 4 4 4
DataMemory/Row 96 96 48
(Includes overhead, bitmap and indexes)
Varsize Overhead DM/Row 0 0 8
Varsize NULL Bytes/Row 0 0 4
Avg Varside DM/Row 0 0 16
No. Rows 0 0 0
Rows/32kb DM Page 340 340 680
Fixedsize DataMemory (KB) 0 0 0
Rows/32kb Varsize DM Page 0 0 2040
Varsize DataMemory (KB) 0 0 0
Rows/8kb IM Page 248 512 512
IndexMemory (KB) 0 0 0
Parameter Minimum Requirements
------------------------------
* indicates greater than default
Parameter Default 4.1 5.0 5.1
DataMemory (KB) 81920 0 0 0
NoOfOrderedIndexes 128 1 1 1
NoOfTables 128 1 1 1
IndexMemory (KB) 18432 0 0 0
NoOfUniqueHashIndexes 64 0 0 0
NoOfAttributes 1000 3 3 3
NoOfTriggers 768 5 5 5
为了调试目的,可以从指定文件中读取此脚本运行的 Perl 数组包含的查询,并使用--savequeries
将其保存到文件中;可以使用--loadqueries
指定包含在脚本执行期间读取的数组的文件。这两个选项都没有默认值。
要以 HTML 格式生成输出,请使用--format
选项并将输出重定向到文件,如下所示:
$> ndb_size.pl --database=test --socket=/tmp/mysql.sock --format=html > ndb_size.html
(如果没有重定向,则输出将发送到stdout
。)
此脚本的输出包括以下信息:
-
为了容纳分析的表所需的
DataMemory
、IndexMemory
、MaxNoOfTables
、MaxNoOfAttributes
、MaxNoOfOrderedIndexes
和MaxNoOfTriggers
配置参数的最小值。 -
数据库中定义的所有表、属性、有序索引和唯一哈希索引的内存需求。
-
每个表和表行所需的
IndexMemory
和DataMemory
。
25.5.29 ndb_top — 查看 NDB 线程的 CPU 使用信息
原文:
dev.mysql.com/doc/refman/8.0/en/mysql-cluster-programs-ndb-top.html
ndb_top 在终端中显示有关 NDB 线程在 NDB Cluster 数据节点上的 CPU 使用情况的运行信息。每个线程在输出中由两行表示,第一行显示系统统计信息,第二行显示线程的测量统计信息。
ndb_top 从 MySQL NDB Cluster 7.6.3 版本开始提供。
使用方法
ndb_top [-h *hostname*] [-t *port*] [-u *user*] [-p *pass*] [-n *node_id*]
ndb_top 连接到作为集群的 SQL 节点运行的 MySQL Server。默认情况下,它尝试连接到在 localhost
和端口 3306 上运行的 mysqld,作为 MySQL root
用户,未指定密码。您可以使用 --host
(-h
) 和 --port
(-t
) 分别覆盖默认主机和端口。要指定 MySQL 用户和密码,请使用 --user
(-u
) 和 --passwd
(-p
) 选项。此用户必须能够读取 ndbinfo
数据库中的表(ndb_top 使用来自 ndbinfo.cpustat
和相关表的信息)。
欲了解更多关于 MySQL 用户账户和密码的信息,请参阅 Section 8.2, “访问控制和账户管理”。
输出可作为纯文本或 ASCII 图形获得;您可以使用 --text
(-x
) 和 --graph
(-g
) 选项分别指定。这两种显示模式提供相同的信息;它们可以同时使用。至少一个显示模式必须在使用中。
图形的彩色显示受支持并默认启用 (--color
或 -c
选项)。启用彩色支持后,图形显示中显示 OS 用户时间为蓝色,OS 系统时间为绿色,空闲时间为空白。对于测量负载,蓝色用于执行时间,黄色用于发送时间,红色用于在发送缓冲区满等待的时间,空白用于空闲时间。图形显示中显示的百分比是所有非空闲线程的百分比之和。目前无法配置颜色;您可以使用 --skip-color
来使用灰度代替。
排序视图 (--sort
, -r
) 基于测量负载的最大值和操作系统报告的负载。可以使用 --measured-load
(-m
) 和 --os-load
(-o
) 选项启用和禁用这些负载的显示。这些负载中至少一个必须启用显示。
程序尝试从具有由--node-id
(-n
) 选项给定的节点 ID 的数据节点获取统计信息;如果未指定,则为 1. ndb_top 无法提供关于其他类型节点的信息。
视图会根据终端窗口的高度和宽度自动调整;最小支持宽度为 76 个字符。
一旦启动,ndb_top 将持续运行直到强制退出;您可以使用 Ctrl-C
退出程序。显示每秒更新一次;要设置不同的延迟间隔,请使用 --sleep-time
(-s
)。
注意
ndb_top 可在 macOS、Linux 和 Solaris 上使用。目前不支持在 Windows 平台上。
以下表格包含所有特定于 NDB 集群程序 ndb_top 的选项。表格后面是附加描述。
表 25.50 与程序 ndb_top 一起使用的命令行选项
格式 | 描述 | 添加、弃用或移除 |
---|---|---|
--color ,-c |
以彩色显示 ASCII 图形;使用 --skip-colors 可以禁用 | (在基于 MySQL 8.0 的所有 NDB 版本中支持) |
--defaults-extra-file=path |
在读取全局文件后读取给定文件 | (在基于 MySQL 8.0 的所有 NDB 版本中支持) |
--defaults-file=path |
仅从给定文件中读取默认选项 | (在基于 MySQL 8.0 的所有 NDB 版本中支持) |
--defaults-group-suffix=string |
还读取具有 concat(group, suffix) 的组 | (在基于 MySQL 8.0 的所有 NDB 版本中支持) |
--graph ,-g |
使用图表显示数据;使用 --skip-graphs 禁用 | (在基于 MySQL 8.0 的所有 NDB 版本中支持) |
--help |
显示程序使用信息 | (在基于 MySQL 8.0 的所有 NDB 版本中支持) |
--host=string ,-h string |
要连接的 MySQL 服务器的主机名或 IP 地址 | (在基于 MySQL 8.0 的所有 NDB 版本中支持) |
--login-path=path |
从登录文件中读取给定路径 | (在基于 MySQL 8.0 的所有 NDB 版本中支持) |
--measured-load ,-m |
按线程显示测量负载 | (在基于 MySQL 8.0 的所有 NDB 版本中支持) |
--no-defaults |
不从登录文件以外的任何选项文件中读取默认选项 | (在基于 MySQL 8.0 的所有 NDB 版本中支持) |
--node-id=# ,-n # |
查看具有此节点 ID 的节点 | (在基于 MySQL 8.0 的所有 NDB 版本中支持) |
--os-load ,-o |
操作系统测量的负载显示 | (在基于 MySQL 8.0 的所有 NDB 版本中支持) |
--password=password ,-p password |
使用此密码连接 | (在基于 MySQL 8.0 的所有 NDB 版本中支持) |
--port=# ,-P # (>=7.6.6) |
连接到 MySQL 服务器时要使用的端口号 | (在基于 MySQL 8.0 的所有 NDB 版本中支持) |
--print-defaults |
打印程序参数列表并退出 | (在基于 MySQL 8.0 的所有 NDB 版本中支持) |
--sleep-time=# ,-s # |
显示刷新之间等待的时间,以秒为单位 | (在基于 MySQL 8.0 的所有 NDB 版本中支持) |
--socket=path ,-S path |
用于连接的套接字文件 | (在基于 MySQL 8.0 的所有 NDB 版本中支持) |
--sort ,-r |
按使用情况对线程进行排序;使用 --skip-sort 来禁用 | (在基于 MySQL 8.0 的所有 NDB 版本中支持) |
--text ,-t (>=7.6.6) |
使用文本显示数据 | (在基于 MySQL 8.0 的所有 NDB 版本中支持) |
--usage |
显示程序使用信息;与 --help 相同 | (在基于 MySQL 8.0 的所有 NDB 版本中支持) |
--user=name ,-u name |
以此 MySQL 用户连接 | (在基于 MySQL 8.0 的所有 NDB 版本中支持) |
格式 | 描述 | 添加、弃用或移除 |
附加选项
-
--color
,-c
命令行格式 --color
以彩色显示 ASCII 图形;使用
--skip-colors
来禁用。 -
--defaults-extra-file
命令行格式 --defaults-extra-file=path
类型 字符串 默认值 [none]
在读取全局文件后读取给定文件。
-
--defaults-file
命令行格式 --defaults-file=path
类型 字符串 默认值 [none]
仅从给定文件中读取默认选项。
-
--defaults-group-suffix
命令行格式 --defaults-group-suffix=string
类型 字符串 默认值 [none]
还读取带有 concat(group, suffix) 的组。
-
--graph
,-g
命令行格式 --graph
使用图形显示数据;使用
--skip-graphs
来禁用。此选项或--text
必须为真;两个选项都可以为真。 -
--help
,-?
命令行格式 --help
显示程序使用信息。
-
--host[
=name]
,-h
命令行格式 --host=string
类型 字符串 默认值 localhost
要连接到的 MySQL 服务器的主机名或 IP 地址。
-
--login-path
命令行格式 --login-path=path
类型 字符串 默认值 [none]
从登录文件中读取给定路径。
-
--measured-load
,-m
命令行格式 --measured-load
显示线程的测量负载。此选项或
--os-load
必须为真;这两个选项都可以为真。 -
--no-defaults
命令行格式 --no-defaults
不要从登录文件以外的任何选项文件中读取默认选项。
-
--node-id
=#]
,-n
命令行格式 --node-id=#
类型 整数 默认值 1
观察具有此节点 ID 的数据节点。
-
--os-load
,-o
命令行格式 --os-load
显示操作系统测量的负载。此选项或
--measured-load
必须为真;这两个选项都可以为真。 -
--password
=password]
,-p
命令行格式 --password=password
类型 字符串 默认值 NULL
使用此密码和由
--user
指定的 MySQL 用户连接到 MySQL 服务器。此密码仅与 MySQL 用户帐户关联,与用于加密
NDB
备份的密码无关。 -
--port
=#]
,-P
命令行格式 --port=#
类型 整数 默认值 3306
连接到 MySQL 服务器时要使用的端口号。
(以前,此选项的简短形式是
-t
,现在已被重新用作--text
的简短形式。) -
--print-defaults
命令行格式 --print-defaults
打印程序参数列表并退出。
-
--sleep-time
=seconds]
,-s
命令行格式 --sleep-time=#
类型 整数 默认值 1
显示刷新之间的等待时间,以秒为单位。
-
--socket=*
path/to/file*
,-S
命令行格式 --socket=path
类型 路径名 默认值 [none]
使用指定的套接字文件进行连接。
-
--sort
,-r
命令行格式 --sort
按使用情况对线程进行排序;使用
--skip-sort
来禁用。 -
--text
,-t
命令行格式 --text
使用文本显示数据。此选项或
--graph
必须为真;两个选项都可以为真。(在之前的 NDB Cluster 版本中,此选项的简写形式为
-x
,但不再支持。) -
--usage
命令行格式 --usage
显示帮助文本并退出;与
--help
相同。 -
--user[
=name]
,-u
命令行格式 --user=name
类型 字符串 默认值 root
连接作为这个 MySQL 用户。通常需要由
--password
选项提供的密码。
示例输出。 下图显示了在 Linux 系统上的终端窗口中运行的ndb_top在中等负载下的ndbmtd数据节点。在这里,程序已经使用ndb_top -n8
-x
被调用以提供文本和图形输出:
图 25.5 ndb_top 在终端中运行
从 NDB 8.0.20 开始,ndb_top还显示线程的自旋时间,显示为绿色。
25.5.30 ndb_waiter — 等待 NDB 集群达到给定状态
原文:
dev.mysql.com/doc/refman/8.0/en/mysql-cluster-programs-ndb-waiter.html
ndb_waiter 每隔 100 毫秒重复打印出所有集群数据节点的状态,直到集群达到给定状态或超过--timeout
限制,然后退出。默认情况下,它等待集群达到STARTED
状态,其中所有节点已启动并连接到集群。可以使用--no-contact
和--not-started
选项覆盖此设置。
此实用程序报告的节点状态如下:
-
NO_CONTACT
: 无法联系节点。 -
UNKNOWN
: 可以联系节点,但其状态尚不清楚。通常,这意味着节点已收到管理服务器的START
或RESTART
命令,但尚未执行。 -
NOT_STARTED
: 节点已停止,但仍与集群保持联系。在使用管理客户端的RESTART
命令重���启动节点时会出现此状态。 -
STARTING
: 节点的ndbd 进程已启动,但节点尚未加入集群。 -
STARTED
: 节点正在运行,并已加入集群。 -
SHUTTING_DOWN
: 节点正在关闭。 -
SINGLE USER MODE
: 当集群处于单用户模式时,所有集群数据节点都会显示此状态。
可与ndb_waiter一起使用的选项显示在以下表中。表后面是附加描述。
表 25.51 与程序 ndb_waiter 一起使用的命令行选项
格式 | 描述 | 添加、弃用或移除 |
---|---|---|
--character-sets-dir=path |
包含字符集的目录 | 移除:8.0.31 |
--connect-retries=# |
放弃之前重试连接的次数 | (在基于 MySQL 8.0 的所有 NDB 发行版中支持) |
--connect-retry-delay=# |
尝试联系管理服务器之间等待的秒数 | (在基于 MySQL 8.0 的所有 NDB 发行版中支持) |
--connect-string=connection_string ,-c connection_string |
与 --ndb-connectstring 相同 | (在基于 MySQL 8.0 的所有 NDB 版本中支持) |
--core-file |
在错误时写入核心文件;用于调试 | 已移除:8.0.31 |
--defaults-extra-file=path |
在读取全局文件后读取给定文件 | (在基于 MySQL 8.0 的所有 NDB 版本中支持) |
--defaults-file=path |
仅从给定文件中读取默认选项 | (在基于 MySQL 8.0 的所有 NDB 版本中支持) |
--defaults-group-suffix=string |
还读取带有 concat(group, suffix) 的组 | (在基于 MySQL 8.0 的所有 NDB 版本中支持) |
--help ,-? |
显示帮助文本并退出 | (在基于 MySQL 8.0 的所有 NDB 版本中支持) |
--login-path=path |
从登录文件中读取给定路径 | (在基于 MySQL 8.0 的所有 NDB 版本中支持) |
--ndb-connectstring=connection_string ,-c connection_string |
设置连接到 ndb_mgmd 的连接字符串。语法:“[nodeid=id;][host=]hostname[:port]”。覆盖 NDB_CONNECTSTRING 和 my.cnf 中的条目 | (在基于 MySQL 8.0 的所有 NDB 版本中支持) |
--ndb-mgmd-host=connection_string ,-c connection_string |
与 --ndb-connectstring 相同 | (在基于 MySQL 8.0 的所有 NDB 版本中支持) |
--ndb-nodeid=# |
为此节点设置节点 ID,覆盖 --ndb-connectstring 设置的任何 ID | 已移除:8.0.31 |
--ndb-optimized-node-selection |
启用用于事务节点选择的优化。默认启用;使用 --skip-ndb-optimized-node-selection 禁用 | 已移除:8.0.31 |
--no-contact ,-n |
等待集群达到无联系状态 | (在基于 MySQL 8.0 的所有 NDB 版本中支持) |
--no-defaults |
不从登录文件以外的任何选项文件中读取默认选项 | (在基于 MySQL 8.0 的所有 NDB 版本中支持) |
--not-started |
等待集群达到未启动状态 | (在基于 MySQL 8.0 的所有 NDB 版本中支持) |
--nowait-nodes=list |
不等待的节点列表 | (在基于 MySQL 8.0 的所有 NDB 版本中支持) |
--print-defaults |
打印程序参数列表并退出 | (在基于 MySQL 8.0 的所有 NDB 版本中支持) |
--single-user |
等待集群进入单用户模式 | (在基于 MySQL 8.0 的所有 NDB 版本中支持) |
--timeout=# ,-t # |
等待这么多秒,然后退出,无论集群是否达到所需状态 | (在基于 MySQL 8.0 的所有 NDB 版本中支持) |
--usage ,-? |
显示帮助文本并退出;与 --help 相同 | (在基于 MySQL 8.0 的所有 NDB 版本中支持) |
--verbose=# ,-v |
设置输出详细程度;查看文本以获取输入和返回值 | 添加: 8.0.37 |
--version ,-V |
显示版本信息并退出 | (在基于 MySQL 8.0 的所有 NDB 版本中支持) |
--wait-nodes=list ,-w list |
等待的节点列表 | (在基于 MySQL 8.0 的所有 NDB 版本中支持) |
格式 | 描述 | 添加、废弃或移除 |
用法
ndb_waiter [-c *connection_string*]
附加选项
-
--character-sets-dir
命令行格式 --character-sets-dir=path
移除 8.0.31 包含字符集的目录。
-
--connect-retries
命令行格式 --connect-retries=#
类型 整数 默认值 12
最小值 0
最大值 12
连接重试次数上限。
-
--connect-retry-delay
命令行格式 --connect-retry-delay=#
类型 整数 默认值 5
最小值 0
最大值 5
尝试联系管理服务器之间等待的秒数。
-
--connect-string
命令行格式 --connect-string=connection_string
类型 字符串 默认值 [none]
与
--ndb-connectstring
相同。 -
--core-file
命令行格式 --core-file
已移除 8.0.31 在错误时写入核心文件;用于调试。
-
--defaults-extra-file
命令行格式 --defaults-extra-file=path
类型 字符串 默认值 [none]
在读取全局文件后读取给定文件。
-
--defaults-file
命令行格式 --defaults-file=path
类型 字符串 默认值 [none]
仅从给定文件中读取默认选项。
-
--defaults-group-suffix
命令行格式 --defaults-group-suffix=string
类型 字符串 默认值 [none]
还读取具有 concat(group, suffix)的组。
-
--login-path
命令行格式 --login-path=path
类型 字符串 默认值 [none]
从登录文件中读取给定路径。
-
--help
命令行格式 --help
显示帮助文本并退出。
-
--ndb-connectstring
命令行格式 --ndb-connectstring=connection_string
类型 字符串 默认值 [none]
设置用于连接到 ndb_mgmd 的连接字符串。语法:"[nodeid=id;][host=]hostname[:port]"。覆盖 NDB_CONNECTSTRING 和 my.cnf 中的条目。
-
--ndb-mgmd-host
命令行格式 --ndb-mgmd-host=connection_string
类型 字符串 默认值 [none]
与--
ndb-connectstring
相同。 -
--ndb-nodeid
命令行格式 --ndb-nodeid=#
已移除 8.0.31 类型 整数 默认值 [none]
设置此节点的节点 ID,覆盖由
--ndb-connectstring
设置的任何 ID。 -
--ndb-optimized-node-selection
命令行格式 --ndb-optimized-node-selection
移除 8.0.31 启用优化以选择事务节点。默认情况下启用;使用
--skip-ndb-optimized-node-selection
来禁用。 -
--no-contact
,-n
而不是等待
STARTED
状态,ndb_waiter在退出之前继续运行,直到集群达到NO_CONTACT
状态。 -
--no-defaults
命令行格式 --no-defaults
不要从登录文件以外的任何选项文件中读取默认选项。
-
--not-started
而不是等待
STARTED
状态,ndb_waiter在退出之前继续运行,直到集群达到NOT_STARTED
状态。 -
--nowait-nodes=*
list*
当使用此选项时,ndb_waiter不会等待列出的节点 ID。列表以逗号分隔;范围可以用破折号表示,如下所示:
$> ndb_waiter --nowait-nodes=1,3,7-9
重要
不要与
--wait-nodes
选项一起使用。 -
--print-defaults
命令行格式 --print-defaults
打印程序参数列表并退出。
-
--timeout=*
seconds*
,-t *
seconds*
等待时间。如果在此秒数内未达到所需状态,则程序将退出。默认值为 120 秒(1200 个报告周期)。
-
--single-user
该程序等待集群进入单用户��式。
-
--usage
命令行格式 --usage
显示帮助文本并退出;与
--help
相同。 -
--verbose
命令行格式 --verbose=#
引入 8.0.37 类型 整数 默认值 2
最小值 0
最大值 2
控制打印输出的详细程度。可能的级别及其效果在此处列出:
-
0
: 仅返回退出代码,不打印(请参阅后续的退出代码)。 -
1
: 仅打印最终连接状态。 -
2
: 每次检查时打印状态。这与 8.4 之前的 NDB Cluster 版本的行为相同。
ndb_waiter 返回的退出代码在此处列出,及其含义:
-
0
: 成功。 -
1
: 等待超时。 -
2
: 参数错误,如无效的节点 ID。 -
3
: 连接到管理服务器失败。
-
-
--version
命令行格式 --version
显示版本信息并退出。
-
--wait-nodes=*
list*
,-w *
list*
当使用此选项时,ndb_waiter 仅等待列出的节点。列表以逗号分隔;范围可以用破折号表示,如下所示:
$> ndb_waiter --wait-nodes=2,4-6,10
重要
不要与
--nowait-nodes
选项一起使用。
示例输出。 这里显示了对一个 4 节点集群运行ndb_waiter的输出,其中两个节点已手动关闭然后重新启动。重复报告(由...
表示)被省略。
$> ./ndb_waiter -c localhost
Connecting to mgmsrv at (localhost)
State node 1 STARTED
State node 2 NO_CONTACT
State node 3 STARTED
State node 4 NO_CONTACT
Waiting for cluster enter state STARTED
...
State node 1 STARTED
State node 2 UNKNOWN
State node 3 STARTED
State node 4 NO_CONTACT
Waiting for cluster enter state STARTED
...
State node 1 STARTED
State node 2 STARTING
State node 3 STARTED
State node 4 NO_CONTACT
Waiting for cluster enter state STARTED
...
State node 1 STARTED
State node 2 STARTING
State node 3 STARTED
State node 4 UNKNOWN
Waiting for cluster enter state STARTED
...
State node 1 STARTED
State node 2 STARTING
State node 3 STARTED
State node 4 STARTING
Waiting for cluster enter state STARTED
...
State node 1 STARTED
State node 2 STARTED
State node 3 STARTED
State node 4 STARTING
Waiting for cluster enter state STARTED
...
State node 1 STARTED
State node 2 STARTED
State node 3 STARTED
State node 4 STARTED
Waiting for cluster enter state STARTED
注意
如果未指定连接字符串,则ndb_waiter 尝试连接到localhost
上的管理服务器,并报告Connecting to mgmsrv at (null)
。
在 NDB 8.0.20 之前,该程序在运行完成后打印NDBT_ProgramExit - *
status*
,这是由于对NDBT
测试库的不必要依赖。已经移除了这种依赖,消除了多余的输出。
25.5.31 ndbxfrm — 压缩、解压、加密和解密由 NDB Cluster 创建的文件
原文:
dev.mysql.com/doc/refman/8.0/en/mysql-cluster-programs-ndbxfrm.html
ndbxfrm 实用程序,引入于 NDB 8.0.22,可用于解压、解密和输出由 NDB Cluster 创建的文件的信息,这些文件可能被压缩、加密或两者兼有。它还可用于压缩或加密文件。
表 25.52 与程序 ndbxfrm 一起使用的命令行选项
格式 | 描述 | 新增、弃用或移除 |
---|---|---|
--compress ,-c |
压缩文件 | 新增:NDB 8.0.22 |
--decrypt-key=key |
提供文件解密密钥 | 新增:NDB 8.0.31 |
--decrypt-key-from-stdin |
从标准输入中提供文件解密密钥 | 新增:NDB 8.0.31 |
--decrypt-password=password |
使用此密码解密文件 | 新增:NDB 8.0.22 |
--decrypt-password-from-stdin |
从标准输入中以安全方式获取解密密码 | 新增:NDB 8.0.24 |
--defaults-extra-file=path |
在全局文件读取后读取给定文件 | (在基于 MySQL 8.0 的所有 NDB 版本中支持) |
--defaults-group-suffix=string |
也读取带有 concat(group, suffix) 的组 | (在基于 MySQL 8.0 的所有 NDB 版本中支持) |
--defaults-file=path |
仅从给定文件中读取默认选项 | (在基于 MySQL 8.0 的所有 NDB 版本中支持) |
--encrypt-block-size=# |
打印有关文件的信息,包括文件头和尾部 | 新增:NDB 8.0.31 |
--encrypt-block-size=# |
作为一个单元加密的输入数据块的大小。与 XTS 一起使用,对于 CBC 模式设置为零 | 新增:NDB 8.0.29 |
--encrypt-cipher=# |
加密密码:1 代表 CBC,2 代表 XTS | 新增:NDB 8.0.29 |
--encrypt-kdf-iter-count=# ,-k # |
密钥定义中使用的迭代次数 | 新增:NDB 8.0.22 |
--encrypt-key=key |
使用此密钥加密文件 | 新增:NDB 8.0.31 |
--encrypt-key-from-stdin |
使用从标准输入提供的密钥加密文件 | 新增:NDB 8.0.31 |
--encrypt-password=password |
使用此密码加密文件 | 新增:NDB 8.0.22 |
--encrypt-password-from-stdin |
从标准输入安全获取加密密码 | 新增:NDB 8.0.24 |
--help ,-? |
打印使用信息 | 新增:NDB 8.0.22 |
--info ,-i |
打印文件信息 | 新增:NDB 8.0.22 |
--login-path=path |
从登录文件中读取给定路径 | (支持所有基于 MySQL 8.0 的 NDB 发行版) |
--no-defaults |
不从除登录文件以外的任何选项文件中读取默认选项 | (支持所有基于 MySQL 8.0 的 NDB 发行版) |
--print-defaults |
打印程序参数列表并退出 | (支持所有基于 MySQL 8.0 的 NDB 发行版) |
--usage ,-? |
打印使用信息;--help 的同义词 | 新增:NDB 8.0.22 |
--version ,-V |
输出版本信息 | 新增:NDB 8.0.22 |
格式 | 描述 | 添加、弃用或移除 |
用法
ndbxfrm --info *file*[ *file* ...]
ndbxfrm --compress *input_file* *output_file*
ndbxfrm --decrypt-password=*password* *input_file* *output_file*
ndbxfrm [--encrypt-ldf-iter-count=#] --encrypt-password=*password* *input_file* *output_file*
input_file
和 output_file
不能是同一个文件。
选项
-
--compress
,-c
命令行格式 --compress
引入版本 8.0.22-ndb-8.0.22 压缩输入文件,使用与压缩 NDB 集群备份相同的压缩方法,并将输出写入输出文件。要解压未加密的压缩
NDB
备份文件,只需调用 ndbxfrm,并提供压缩文件的名称和输出文件的名称(无需任何选项)。 -
--decrypt-key=*
key*
,-K
key
命令行格式 --decrypt-key=key
引入版本 8.0.31-ndb-8.0.31 使用提供的密钥解密由
NDB
加密的文件。注意
此选项不能与
--decrypt-password
一起使用。 -
--decrypt-key-from-stdin
命令行格式 --decrypt-key-from-stdin
引入版本 8.0.31-ndb-8.0.31 使用从标准输入提供的密钥解密由
NDB
加密的文件。 -
--decrypt-password=*
password*
命令行格式 --decrypt-password=password
引入版本 8.0.22-ndb-8.0.22 类型 字符串 默认值 [none]
使用提供的密码解密由
NDB
加密的文件。注意
此选项不能与
--decrypt-key
一起使用。 -
--decrypt-password-from-stdin[=TRUE|FALSE]
命令行格式 --decrypt-password-from-stdin
引入版本 8.0.24-ndb-8.0.24 使用从标准输入提供的密码解密由
NDB
加密的文件。这类似于在调用mysql--password
时不跟随选项后输入密码�� -
--defaults-extra-file
命令行格式 --defaults-extra-file=path
类型 字符串 默认值 [none]
在全局文件读取后读取给定文件。
-
--defaults-file
命令行格式 --defaults-file=path
类型 字符串 默认值 [none]
仅从给定文件中读取默认选项。
-
--defaults-group-suffix
命令行格式 --defaults-group-suffix=string
类型 字符串 默认值 [none]
还读取带有
CONCAT(*
group*, *
suffix*)
的组。 -
--detailed-info
命令行格式 --encrypt-block-size=#
引入版本 8.0.31-ndb-8.0.31 类型 布尔值 默认值 FALSE
打印出文件信息,类似于
--info
,但包括文件的头部和尾部。示例:
$> ndbxfrm --detailed-info S0.sysfile File=/var/lib/cluster-data/ndb_7_fs/D1/NDBCNTR/S0.sysfile, compression=no, encryption=yes header: { fixed_header: { magic: { magic: { 78, 68, 66, 88, 70, 82, 77, 49 }, endian: 18364758544493064720, header_size: 32768, fixed_header_size: 160, zeros: { 0, 0 } }, flags: 73728, flag_extended: 0, flag_zeros: 0, flag_file_checksum: 0, flag_data_checksum: 0, flag_compress: 0, flag_compress_method: 0, flag_compress_padding: 0, flag_encrypt: 18, flag_encrypt_cipher: 2, flag_encrypt_krm: 1, flag_encrypt_padding: 0, flag_encrypt_key_selection_mode: 0, dbg_writer_ndb_version: 524320, octets_size: 32, file_block_size: 32768, trailer_max_size: 80, file_checksum: { 0, 0, 0, 0 }, data_checksum: { 0, 0, 0, 0 }, zeros01: { 0 }, compress_dbg_writer_header_version: { ... }, compress_dbg_writer_library_version: { ... }, encrypt_dbg_writer_header_version: { ... }, encrypt_dbg_writer_library_version: { ... }, encrypt_key_definition_iterator_count: 100000, encrypt_krm_keying_material_size: 32, encrypt_krm_keying_material_count: 1, encrypt_key_data_unit_size: 32768, encrypt_krm_keying_material_position_in_octets: 0, }, octets: { 102, 68, 56, 125, 78, 217, 110, 94, 145, 121, 203, 234, 26, 164, 137, 180, 100, 224, 7, 88, 173, 123, 209, 110, 185, 227, 85, 174, 109, 123, 96, 156, } } trailer: { fixed_trailer: { flags: 48, flag_extended: 0, flag_zeros: 0, flag_file_checksum: 0, flag_data_checksum: 3, data_size: 512, file_checksum: { 0, 0, 0, 0 }, data_checksum: { 226, 223, 102, 207 }, magic: { zeros: { 0, 0 } fixed_trailer_size: 56, trailer_size: 32256, endian: 18364758544493064720, magic: { 78, 68, 66, 88, 70, 82, 77, 49 }, }, } }
-
--encrypt-block-size=*
#*
命令行格式 --encrypt-block-size=#
引入版本 8.0.29-ndb-8.0.29 类型 整数 默认值 0
最小值 0
最大值 2147483647
作为一个单元加密的输入数据块的大小。与 XTS 一起使用;对于 CBC 模式,设置为
0
(默认值)。 -
--encrypt-cipher=*
#*
命令行格式 --encrypt-cipher=#
引入版本 8.0.29-ndb-8.0.29 类型 整数 默认值 1
最小值 0
最大值 2147483647
用于加密的密码。设置为
1
表示 CBC 模式(默认),或2
表示 XTS。 -
--encrypt-kdf-iter-count=*
#*
,-k *
#*
命令行格式 --encrypt-kdf-iter-count=#
引入版本 8.0.22-ndb-8.0.22 类型 整数 默认值 0
最小值 0
最大值 2147483647
在加密文件时,指定用于加密密钥的迭代次数。需要
--encrypt-password
选项。 -
--encrypt-key=*
key*
命令行格式 --encrypt-key=key
引入版本 8.0.31-ndb-8.0.31 使用提供的密钥加密文件。
注意
此选项不能与
--encrypt-password
一起使用。 -
--encrypt-key-from-stdin
命令行格式 --encrypt-key-from-stdin
引入版本 8.0.31-ndb-8.0.31 使用从
stdin
提供的密钥加密文件。 -
--encrypt-password=*
password*
命令行格式 --encrypt-password=password
引入版本 8.0.22-ndb-8.0.22 类型 字符串 默认值 [none]
使用选项提供的密码加密备份文件。密码必须符合此处列出的要求:
- 使用除
!
、'
、"
、$
、%
、\
之外的任何可打印 ASCII 字符
$> ndbxfrm -i BACKUP-10-0.5.Data BACKUP-10.5.ctl BACKUP-10.5.log
文件=BACKUP-10-0.5.Data,压缩=no,加密=yes
文件=BACKUP-10.5.ctl,压缩=no,加密=yes
文件=BACKUP-10.5.log,压缩=no,加密=yes
Beginning with NDB 8.0.31, you can also see the file's header and trailer using the `--detailed-info` option.
- 使用除
-
--login-path
| Command-Line Format |
--login-path=path
|
| Type | String |
| Default Value |[none]
|Read given path from login file.
-
--no-defaults
| Command-Line Format |
--no-defaults
|Do not read default options from any option file other than login file.
-
--print-defaults
| Command-Line Format |
--print-defaults
|Print program argument list and exit.
-
--usage
,-?
| Command-Line Format |
--usage
|
| Introduced | 8.0.22-ndb-8.0.22 |Synonym for
--help
. -
--version
,-V
| Command-Line Format |
--version
|
| Introduced | 8.0.22-ndb-8.0.22 |Prints out version information.
ndbxfrm can encrypt backups created by any version of NDB Cluster. The .Data
, .ctl
, and .log
files comprising the backup must be encrypted separately, and these files must be encrypted separately for each data node. Once encrypted, such backups can be decrypted only by ndbxfrm, ndb_restore, or ndb_print_backup from NDB Cluster 8.0.22 or later.
An encrypted file can be re-encrypted with a new password using the --encrypt-password
and --decrypt-password
options together, like this:
ndbxfrm --decrypt-password=*old* --encrypt-password=*new* *input_file* *output_file*
在刚才显示的示例中,old
和new
分别是旧密码和新密码;这两者都必须用引号括起来。输入文件被解密,然后作为输出文件被加密。输入文件本身不会改变;如果您不希望使用旧密码访问它,必须手动删除输入文件。
25.6 NDB 集群管理
原文:
dev.mysql.com/doc/refman/8.0/en/mysql-cluster-management.html
25.6.1 NDB 集群管理客户端中的命令
25.6.2 NDB 集群日志消息
25.6.3 NDB 集群生成的事件报告
25.6.4 NDB 集群启动阶段摘要
25.6.5 对 NDB 集群执行滚动重启
25.6.6 NDB 集群单用户模式
25.6.7 在线添加 NDB 集群数据节点
25.6.8 NDB 集群在线备份
25.6.9 将数据导入 MySQL 集群
25.6.10 用于 NDB 集群的 MySQL 服务器用法
25.6.11 NDB 集群磁盘数据表
25.6.12 在 NDB 集群中使用 ALTER TABLE 进行在线操作
25.6.13 权限同步和 NDB_STORED_USER
25.6.14 NDB 集群的文件系统加密
25.6.15 NDB API 统计计数器和变量
25.6.16 ndbinfo:NDB 集群信息数据库
25.6.17 用于 NDB 集群的 INFORMATION_SCHEMA 表
25.6.18 NDB 集群和性能模式
25.6.19 快速参考:NDB 集群 SQL 语句
25.6.20 NDB 集群安全问题
管理 NDB 集群涉及许多任务,首先是配置和启动 NDB 集群。这在第 25.4 节,“NDB 集群配置”和第 25.5 节,“NDB 集群程序”中有所涵盖。
接下来的几节涵盖了运行 NDB 集群的管理。
有关与 NDB 集群管理和部署相关的安全问题,请参阅第 25.6.20 节,“NDB 集群安全问题”。
实际上有两种主动管理运行中 NDB 集群的方法。其中之一是通过输入到管理客户端的命令来检查集群状态,更改日志级别,启动和停止备份,以及停止和启动节点。第二种方法涉及研究集群日志ndb_*
node_id*_cluster.log
的内容;通常可以在管理服务器的DataDir
目录中找到,但可以使用LogDestination
选项覆盖此位置。(请记住node_id
代表被记录活动的节点的唯一标识符。)集群日志包含由ndbd生成的事件报告。还可以将集群日志条目发送到 Unix 系统日志。
一些集群操作的方面也可以通过在 SQL 节点上使用SHOW ENGINE NDB STATUS
语句来监控。
通过使用ndbinfo
数据库,可以实时通过 SQL 接口获取有关 NDB 集群操作的更详细信息。有关更多信息,请参见 Section 25.6.16, “ndbinfo: The NDB Cluster Information Database”。
NDB 统计计数器通过mysql客户端提供了改进的监控。这些计数器,由 NDB 内核实现,涉及由或影响Ndb
对象执行的操作,如启动、关闭和中止事务;主键和唯一键操作;表、范围和修剪扫描;等待各种操作完成的阻塞线程;以及 NDB 集群发送和接收的数据和事件。每当进行 NDB API 调用或数据被发送到或接收到数据节点时,NDB 内核都会递增计数器。
mysqld将 NDB API 统计计数器公开为系统状态变量,可以从它们的名称中共同前缀(Ndb_api_
)中识别。这些变量的值可以通过SHOW STATUS
语句的输出在mysql客户端中读取,或者通过查询 Performance Schema 的session_status
或global_status
表。通过比较执行对NDB
表操作的 SQL 语句之前和之后的状态变量的值,您可以观察到与该语句对应的 NDB API 级别的操作,这对于监视和性能调整 NDB Cluster 可能是有益的。
MySQL Cluster Manager 提供了一个高级命令行界面,简化了许多复杂的 NDB Cluster 管理任务,比如启动、停止或重新启动具有大量节点的 NDB Cluster。MySQL Cluster Manager 客户端还支持获取和设置大多数节点配置参数以及与 NDB Cluster 相关的mysqld服务器选项和变量的命令。MySQL Cluster Manager 8.0 支持 NDB 8.0。有关更多信息,请参阅 MySQL Cluster Manager 8.0.36 用户手册。
25.6.1 NDB Cluster 管理客户端中的命令
原文:
dev.mysql.com/doc/refman/8.0/en/mysql-cluster-mgm-client-commands.html
除了中央配置文件外,集群还可以通过管理客户端提供的命令行界面进行控制 ndb_mgm。这是运行集群的主要管理界面。
事件日志的命令在 第 25.6.3 节,“NDB Cluster 生成的事件报告” 中给出;创建备份并从中恢复的命令在 第 25.6.8 节,“NDB Cluster 的在线备份” 中提供。
使用 MySQL Cluster Manager 的 ndb_mgm。 MySQL Cluster Manager 1.4.8 提供对 NDB 8.0 的实验性支持。MySQL Cluster Manager 处理启动和停止进程,并在内部跟踪其状态,因此不需要使用 ndb_mgm 来执行这些任务,对于由 MySQL Cluster Manager 控制的 NDB Cluster。建议不要使用随 NDB Cluster 发行版一起提供的 ndb_mgm 命令行客户端执行涉及启动或停止节点的操作。这些操作包括但不限于 START
、STOP
、RESTART
和 SHUTDOWN
命令。更多信息,请参阅 MySQL Cluster Manager 进程命令。
管理客户端具有以下基本命令。在接下来的清单中,node_id
表示数据节点 ID 或关键字 ALL
,表示该命令应用于集群的所有数据节点。
-
CONNECT *
connection-string*
连接到连接字符串指示的管理服务器。如果客户端已连接到此服务器,则客户端重新连接。
-
CREATE NODEGROUP *
nodeid*[, *
nodeid*, ...]
创建新的 NDB Cluster 节点组,并使数据节点加入其中。
此命令用于在线添加新数据节点到 NDB 集群后,使它们加入新的节点组,从而开始完全参与集群。该命令的唯一参数是一个逗号分隔的节点 ID 列表—这些是刚刚添加并启动的节点的 ID,它们将加入新的节点组。列表中不能包含重复的 ID;从 NDB 8.0.26 开始,任何重复的存在会导致命令返回错误。列表中节点的数量必须与已经是集群一部分的每个节点组中的节点数量相同(每个 NDB 集群节点组必须有相同数量的节点)。换句话说,如果 NDB 集群由 2 个每个有 2 个数据节点的节点组组成,则新的节点组也必须有 2 个数据节点。
由此命令创建的新节点组的节点组 ID 是自动确定的,并且始终是集群中未使用的最高的节点组 ID;无法手动设置它。
欲了解更多信息,请参阅 第 25.6.7 节,“在线添加 NDB 集群数据节点”。
-
DROP NODEGROUP *
nodegroup_id*
删除具有给定
nodegroup_id
的 NDB 集群节点组。此命令可用于从 NDB 集群中删除节点组。
DROP NODEGROUP
的唯一参数是要删除的节点��的节点组 ID。DROP NODEGROUP
仅用于从受影响的节点组中移除数据节点。它不会停止数据节点,也不会将它们分配给不同的节点组,或从集群的配置中移除它们。在管理客户端SHOW
命令的输出中,不属于任何节点组的数据节点会显示为no nodegroup
,而不是节点组 ID,就像这样(使用粗体文本表示):id=3 @10.100.2.67 (8.0.35-ndb-8.0.35, no nodegroup)
DROP NODEGROUP
仅在欲删除的节点组中的所有数据节点完全不包含任何表数据和表定义时才有效。由于目前无法使用 ndb_mgm 或 mysql 客户端从特定数据节点或节点组中删除所有数据,这意味着该命令仅在以下两种情况下成功:-
在 ndb_mgm 客户端中发出
CREATE NODEGROUP
命令之后,但在 mysql 客户端中发出任何ALTER TABLE ... REORGANIZE PARTITION
命令之前。 -
在使用
DROP TABLE
删除所有NDBCLUSTER
表之后。TRUNCATE TABLE
对此目的无效,因为这只会删除表数据;数据节点将继续存储NDBCLUSTER
表的定义,直到发出导致表元数据被删除的DROP TABLE
语句。
有关
DROP NODEGROUP
的更多信息,请参见 Section 25.6.7, “Adding NDB Cluster Data Nodes Online”。 -
-
ENTER SINGLE USER MODE *
node_id*
进入单用户模式,只允许由节点 ID
node_id
标识的 MySQL 服务器访问数据库。ndb_mgm客户端明确确认已发出此命令并已生效,如下所示:
ndb_mgm> ENTER SINGLE USER MODE 100 Single user mode entered Access is granted for API node 100 only.
此外,在单用户模式下具有独占访问权限的 API 或 SQL 节点在
SHOW
命令的输出中会被指示,如下所示:ndb_mgm> SHOW Cluster Configuration --------------------- [ndbd(NDB)] 2 node(s) id=5 @127.0.0.1 (mysql-8.0.35 ndb-8.0.35, single user mode, Nodegroup: 0, *) id=6 @127.0.0.1 (mysql-8.0.35 ndb-8.0.35, single user mode, Nodegroup: 0) [ndb_mgmd(MGM)] 1 node(s) id=50 @127.0.0.1 (mysql-8.0.35 ndb-8.0.35) [mysqld(API)] 2 node(s) id=100 @127.0.0.1 (mysql-8.0.35 ndb-8.0.35, allowed single user) id=101 (not connected, accepting connect from any host)
-
EXIT SINGLE USER MODE
退出单用户模式,使所有 SQL 节点(即所有运行的mysqld进程)可以访问数据库。
注意
即使不在单用户模式下,也可以使用
EXIT SINGLE USER MODE
,但在这种情况下该命令不起作用。 -
HELP
显示所有可用命令的信息。
-
*
node_id* NODELOG DEBUG {ON|OFF}
在节点日志中切换调试日志记录,就好像受影响的数据节点已经使用
--verbose
选项启动一样。NODELOG DEBUG ON
开始调试日志记录;NODELOG DEBUG OFF
关闭调试日志记录。 -
更改ndb_mgm显示的提示为字符串文字
prompt
。prompt
不应该被引用(除非您希望提示包含引号)。与mysql客户端不同,不会识别特殊字符序列和转义。如果没有参数调用,该命令将重置提示为默认值(ndb_mgm>
)。��下是一些示例:
ndb_mgm> PROMPT mgm#1: mgm#1: SHOW Cluster Configuration ... mgm#1: PROMPT mymgm > mymgm > PROMPT 'mymgm:' 'mymgm:' PROMPT mymgm: mymgm: PROMPT ndb_mgm> EXIT $>
请注意,
prompt
字符串中的前导空格和空格不会被修剪。尾随空格会被移除。 -
QUIT
,EXIT
终止管理客户端。
此命令不会影响连接到集群的任何节点。
-
*
node_id* REPORT *
report-type*
显示标识为
node_id
的数据节点或使用ALL
显示的report-type
类型报告。目前,
report-type
有三个可接受的值:-
BackupStatus
提供正在进行的集群备份的状态报告 -
MemoryUsage
显示每个数据节点使用的数据内存和索引内存量,如下所示:ndb_mgm> ALL REPORT MEMORY Node 1: Data usage is 5%(177 32K pages of total 3200) Node 1: Index usage is 0%(108 8K pages of total 12832) Node 2: Data usage is 5%(177 32K pages of total 3200) Node 2: Index usage is 0%(108 8K pages of total 12832)
这些信息也可以从
ndbinfo.memoryusage
表中获取。 -
EventLog
报告一个或多个数据节点的事件日志缓冲区中的事件。
report-type
对大小写不敏感且“模糊”;对于MemoryUsage
,可以使用MEMORY
(如前面的示例中所示),memory
,甚至简单地使用MEM
(或mem
)。类似地,您可以缩写BackupStatus
。 -
-
*
node_id* RESTART [-n] [-i] [-a] [-f]
重新启动标识为
node_id
(或所有数据节点)的数据节点。使用
RESTART
选项与-i
一起会导致数据节点执行初始重启;也就是说,节点的文件系统会被删除并重新创建。效果与停止数据节点进程,然后在系统 shell 中使用ndbd--initial
重新启动相同。注意
当使用此选项时,备份文件和磁盘数据文件不会被删除。
使用
-n
选项会导致数据节点进程重新启动,但数据节点实际上不会上线,直到发出适当的START
命令为止。此选项的效果与停止数据节点,然后在系统 shell 中使用ndbd--nostart
或ndbd-n
重新启动相同。使用
-a
会导致依赖于此节点的所有当前事务被中止。当节点重新加入集群时,不会执行 GCP 检查。通常,如果使节点脱机会导致集群不完整,则
RESTART
会失败。-f
选项会强制节点在不检查此情况下重新启动。如果使用此选项并导致集群不完整,则整个集群会重新启动。 -
SHOW
显示有关集群和集群节点的基本信息。对于所有节点,输出包括节点的 ID、类型和
NDB
软件版本。如果节点已连接,还会显示其 IP 地址;否则输出显示not connected, accepting connect from *
ip_address*
,对于允许从任何地址连接的节点,使用any host
。此外,对于数据节点,如果节点尚未启动,则输出包括
starting
,并显示节点所属的节点组。如果数据节点充当主节点,则用星号(*
)表示。考虑一个配置文件包含此处显示的信息的集群(为清晰起见,可能的其他设置被省略):
[ndbd default] DataMemory= 128G NoOfReplicas= 2 [ndb_mgmd] NodeId=50 HostName=198.51.100.150 [ndbd] NodeId=5 HostName=198.51.100.10 DataDir=/var/lib/mysql-cluster [ndbd] NodeId=6 HostName=198.51.100.20 DataDir=/var/lib/mysql-cluster [ndbd] NodeId=7 HostName=198.51.100.30 DataDir=/var/lib/mysql-cluster [ndbd] NodeId=8 HostName=198.51.100.40 DataDir=/var/lib/mysql-cluster [mysqld] NodeId=100 HostName=198.51.100.100 [api] NodeId=101
在启动此集群(包括一个 SQL 节点)后,
SHOW
显示以下输出:ndb_mgm> SHOW Connected to Management Server at: localhost:1186 Cluster Configuration --------------------- [ndbd(NDB)] 4 node(s) id=5 @198.51.100.10 (mysql-8.0.35 ndb-8.0.35, Nodegroup: 0, *) id=6 @198.51.100.20 (mysql-8.0.35 ndb-8.0.35, Nodegroup: 0) id=7 @198.51.100.30 (mysql-8.0.35 ndb-8.0.35, Nodegroup: 1) id=8 @198.51.100.40 (mysql-8.0.35 ndb-8.0.35, Nodegroup: 1) [ndb_mgmd(MGM)] 1 node(s) id=50 @198.51.100.150 (mysql-8.0.35 ndb-8.0.35) [mysqld(API)] 2 node(s) id=100 @198.51.100.100 (mysql-8.0.35 ndb-8.0.35) id=101 (not connected, accepting connect from any host)
此命令的输出还指示集群何时处于单用户模式(请参阅
进入单用户模式
命令的描述,以及第 25.6.6 节,“NDB 集群单用户模式”)。在 NDB 8.0 中,它还指示在此模式生效时哪个 API 或 SQL 节点具有独占访问权限;这仅在所有连接到集群的数据节点和管理节点运行 NDB 8.0 时有效。 -
SHUTDOWN
关闭所有集群数据节点和管理节点。在执行此操作后退出管理客户端,请使用
EXIT
或QUIT
。此命令不会关闭连接到集群的任何 SQL 节点或 API 节点。
-
*
node_id*启动
将由
node_id
标识的数据节点(或所有数据节点)在线化。ALL START
仅对所有数据节点起作用,不影响管理节点。重要
要使用此命令将数据节点在线化,数据节点必须使用
--nostart
或-n
启动。 -
*
node_id*状态
显示由
node_id
标识的数据节点(或所有数据节点)的状态信息。可能的节点状态值包括
UNKNOWN
、NO_CONTACT
、NOT_STARTED
、STARTING
、STARTED
、SHUTTING_DOWN
和RESTARTING
。此命令的输出还指示集群何时处于单用户模式。
-
停止由
node_id
标识的数据或管理节点。注意
ALL STOP
仅用于停止所有数据节点,不影响管理节点。受此命令影响的节点会从集群中断开连接,并且其关联的ndbd或ndb_mgmd进程终止。
-a
选项会导致节点立即停止,而不等待任何待处理事务的完成。通常,如果结果导致集群不完整,则
STOP
会失败。-f
选项强制节点关闭而不检查此情况。如果使用此选项且结果是不完整的集群,则集群立即关闭。警告
使用
-a
选项还会禁用通常在调用STOP
时执行的安全检查,以确保停止节点不会导致集群不完整。换句话说,当使用STOP
命令时,使用-a
选项时应该非常小心,因为该选项使得集群可能会因为不再具有存储在NDB
中的所有数据的完整副本而被强制关闭。
附加命令。 ndb_mgm客户端中提供了其他一些命令,如下列表所示:
-
START BACKUP
用于在ndb_mgm客户端中执行在线备份;ABORT BACKUP
命令用于取消已经进行中的备份。有关更多信息,请参阅第 25.6.8 节,“NDB 集群的在线备份”。 -
CLUSTERLOG
命令用于执行各种日志功能。有关更多信息和示例,请参阅第 25.6.3 节,“NDB 集群生成的事件报告”。NODELOG DEBUG
激活或停用节点日志中的调试打印输出,如本节先前所述。 -
用于测试和诊断工作,客户端支持一个
DUMP
命令,可用于在集群上执行内部命令。除非由 MySQL 支持指示,否则不应在生产环境中使用。有关更多信息,请参阅 NDB 集群管理客户端 DUMP 命令。
25.6.2 NDB 集群日志消息
原文:
dev.mysql.com/doc/refman/8.0/en/mysql-cluster-logs-ndb-messages.html
25.6.2.1 NDB 集群:集群日志中的消息
25.6.2.2 NDB 集群日志启动消息
25.6.2.3 集群日志中的事件缓冲区报告
25.6.2.4 NDB 集群:NDB 传输器错误
本节包含有关响应不同集群日志事件而写入集群日志的消息的信息。它提供了有关NDB
传输器错误的额外、更具体的信息。
原文:
dev.mysql.com/doc/refman/8.0/en/mysql-cluster-logs-cluster-log.html
25.6.2.1 NDB 集群:集群日志中的消息
以下表列出了最常见的 NDB
集群日志消息。有关集群日志、日志事件和事件类型的信息,请参阅 第 25.6.3 节 “NDB 集群中生成的事件报告”。这些日志消息还对应于 MGM API 中的日志事件类型;有关集群 API 开发人员感兴趣的相关信息,请参阅 Ndb_logevent_type 类型。
表 25.53 常见 NDB 集群日志消息
日志消息 | 描述 | 事件名称 | 事件类型 | 优先级 | 严重性 |
---|---|---|---|---|---|
Node * mgm_node_id*: 节点 * data_node_id* 已连接 |
具有节点 ID node_id 的数据节点已连接到管理服务器(节点 mgm_node_id )。 |
已连接 |
连接 |
8 | 信息 |
Node * mgm_node_id*: 节点 * data_node_id* 已断开连接 |
具有节点 ID data_node_id 的数据节点已从管理服务器(节点 mgm_node_id )断开连接。 |
已断开连接 |
连接 |
8 | 警报 |
Node * data_node_id*: 与节点 * api_node_id* 的通信已关闭 |
具有节点 ID api_node_id 的 API 节点或 SQL 节点不再与数据节点 data_node_id 进行通信。 |
通信已关闭 |
连接 |
8 | 信息 |
Node * data_node_id*: 与节点 * api_node_id* 的通信已打开 |
具有节点 ID api_node_id 的 API 节点或 SQL 节点现在正在与数据节点 data_node_id 进行通信。 |
通信已打开 |
连接 |
8 | 信息 |
Node * mgm_node_id*: 节点 * api_node_id*:API * version* |
具有节点 ID api_node_id 的 API 节点已连接到管理节点 mgm_node_id ,使用 NDB API 版本 version (通常与 MySQL 版本号相同)。 |
ConnectedApiVersion |
连接 |
8 | 信息 |
Node * node_id*: 全局检查点 * gci* 已启动 |
具有 ID gci 的全局检查点已启动;节点 node_id 是负责此全局检查点的主节点。 |
全局检查点已启动 |
检查点 |
9 | 信息 |
Node * node_id*: 全局检查点 * gci* 已完成 |
具有 ID gci 的全局检查点已完成;节点 node_id 是负责此全局检查点的主节点。 |
全局检查点已完成 |
检查点 |
10 | 信息 |
Node * node_id*: 本地检查点* lcp*已启动。保持 GCI = * current_gci*,最旧可恢复的 GCI = * old_gci* |
具有序列 ID lcp 的本地检查点已在节点 node_id 上启动。可以使用的最近的 GCI 具有索引 current_gci ,而集群可以恢复的最旧 GCI 具有索引 old_gci 。 |
LocalCheckpointStarted |
检查点 |
7 | 信息 |
Node * node_id*: 本地检查点* lcp*已完成 |
在节点 node_id 上具有序列 ID lcp 的本地检查点已经完成。 |
LocalCheckpointCompleted |
检查点 |
8 | 信息 |
Node * node_id*: 本地检查点在 CALCULATED_KEEP_GCI 中停止 |
节点无法确定最近可用的 GCI。 | LCPStoppedInCalcKeepGci |
检查点 |
0 | 警报 |
Node * node_id*: 表 ID = * table_id*,片段 * ID = fragment_id* 在节点 * node_id* 上完成了 LCP,maxGciStarted: * started_gci* maxGciCompleted: * completed_gci* |
一个表片段已经在节点 node_id 上被检查点到磁盘上。正在进行的 GCI 具有索引 started_gci ,而最近完成的 GCI 具有索引 completed_gci 。 |
LCPFragmentCompleted |
检查点 |
11 | 信息 |
Node * node_id*: ACC 阻塞了* num_1*次,TUP 阻塞了* num_2*次上一秒 |
因为日志缓冲区接近溢出,撤销日志记录被阻塞。 | UndoLogBlocked |
检查点 |
7 | 信息 |
Node * node_id*: 启动初始化* version* |
数据节点 node_id ,运行NDB 版本 version ,正在开始启动过程。 |
NDBStartStarted |
启动 |
1 | 信息 |
Node * node_id*: 启动* version*已启动 |
运行NDB 版本 version 的数据节点 node_id 已成功启动。 |
NDBStartCompleted |
启动 |
1 | 信息 |
Node * node_id*: 重启完成后收到 STTORRY 信号 |
节点收到一个信号,表示集群重启已经完成。 | STTORRYRecieved |
启动 |
15 | 信息 |
Node * node_id*: 启动阶段* phase*已完成(* type*) |
节点已完成type 启动的启动阶段phase 。有关启动阶段的列表,请参见第 25.6.4 节,“NDB 集群启动阶段总结”。(type 是initial 、system 、node 、initial node 或<未知> 之一。) |
StartPhaseCompleted |
启动 |
4 | 信息 |
Node * node_id*: CM_REGCONF 主席 = * president_id*,自己的节点 = * own_id*,我们的动态 ID = * dynamic_id* |
节点 president_id 被选为“主席”。own_id 和 dynamic_id 应始终与报告节点的 ID(node_id )相同。 |
CM_REGCONF |
启动 |
3 | 信息 |
Node * node_id*: 来自节点 * president_id* 对我们节点 * node_id* 的 CM_REGREF。原因 = * cause* |
报告节点(ID node_id )无法接受节点 president_id 为主席。问题的cause 给出为Busy 、Election with wait = false 、Not president 、Election without selecting new candidate 或No such cause 之一。 |
CM_REGREF |
StartUp |
8 | INFO |
Node * node_id*: 我们是节点 * own_id*,动态 ID 为 * dynamic_id*,左邻节点是节点 * id_1*,右邻节点是节点 * id_2* |
节点已发现其在集群中的邻居节点(节点 id_1 和节点 id_2 )。node_id 、own_id 和 dynamic_id 应始终相同;如果它们不同,则表示集群节点配置严重错误。 |
FIND_NEIGHBOURS |
StartUp |
8 | INFO |
Node * node_id*: * type* 关闭已启动 |
节点已接收到关闭信号。关闭的type 可以是Cluster 或Node 。 |
NDBStopStarted |
StartUp |
1 | INFO |
Node * node_id*: 节点关闭已完成 [, * action* ] [`由信号 `signal` 发起。] |
节点已关闭。此报告可能包括一个action ,如果存在,则为restarting 、no start 或initial 之一。报告还可能包括对NDB 协议 signal 的引用;有关可能的信号,请参阅操作和信号。 |
NDBStopCompleted |
StartUp |
1 | INFO |
Node * node_id*: 强制节点关闭已完成 [, action ]. [发生在启动阶段 * start_phase*。] [ 由 signal 发起。] [由错误 * error_code*: '* error_message*(* error_classification*). * error_status*'. [(额外信息 * extra_code*) ]] |
节点已被强制关闭。随后采取的action (restarting 、no start 或initial 之一)也会报告。如果节点在启动时关闭,报告将包括节点失败的start_phase 。如果这是由发送给节点的signal 导致的,还会提供此信息(有关更多信息,请参阅操作和信号)。如果已知导致失败的错误,也会包括在内;有关更多关于NDB 错误消息和分类的信息,请参阅 NDB Cluster API 错误。 |
NDBStopForced |
StartUp |
1 | ALERT |
Node * node_id*: 节点关闭已中止 |
用户中止了节点关闭过程。 | NDBStopAborted |
StartUp |
1 | INFO |
节点 * node_id*:StartLog:[GCI 保留:* keep_pos* 最后完成:* last_pos* 最新可恢复:* restore_pos*] |
这报告了节点启动期间引用的全局检查点。在 keep_pos 之前的重做日志将被丢弃。last_pos 是数据节点参与的最后一个全局检查点;restore_pos 是实际用于恢复所有数据节点的全局检查点。 |
StartREDOLog |
StartUp |
4 | 信息 |
startup_message [单独列出;请参见下文.] |
在不同情况下可能记录的启动消息有很多种。这些将单独列出;请参见第 25.6.2.2 节,“NDB Cluster 日志启动消息”。 | StartReport |
StartUp |
4 | 信息 |
节点 * node_id*:节点重新启动完成了字典信息的复制 |
数据字典信息已复制到重新启动的节点 | NR_CopyDict |
NodeRestart |
8 | 信息 |
节点 * node_id*:节点重新启动完成了分布信息的复制 |
数据分布信息已复制到重新启动的节点 | NR_CopyDistr |
NodeRestart |
8 | 信息 |
节点 * node_id*:节点重新启动开始复制片段到节点 * node_id* |
开始将片段复制到正在重新启动的数据节点 node_id |
NR_CopyFragsStarted |
NodeRestart |
8 | 信息 |
Node * node_id*:表 ID = * table_id*,片段 ID = * fragment_id* 已复制到节点 * node_id* |
来自表 table_id 的片段 fragment_id 已复制到数据节点 node_id |
NR_CopyFragDone |
NodeRestart |
10 | 信息 |
节点 * node_id*:节点重新启动完成了复制片段到节点 * node_id* |
将所有表片段复制到重新启动的数据节点 node_id 已完成 |
NR_CopyFragsCompleted |
NodeRestart |
8 | 信息 |
Node * node_id*:节点 * node1_id* 完成了节点 * node2_id* 的故障 |
数据节点 node1_id 检测到了数据节点 node2_id 的故障 |
NodeFailCompleted |
NodeRestart |
8 | 警报 |
所有节点完成了节点 * node_id* 的故障 |
所有(剩余)数据节点已检测到数据节点 node_id 的故障 |
NodeFailCompleted |
NodeRestart |
8 | 警报 |
节点 * node_id* 的块故障已完成 |
在NDB 内核块中检测到了数据节点 node_id 的故障,其中块是 DBTC 的第 1 块,DBDICT ,DBDIH ,或 DBLQH ;更多信息,请参阅 NDB 内核块 |
NodeFailCompleted |
NodeRestart |
8 | 警报 |
节点 * mgm_node_id*: 节点 * data_node_id* 失败。节点在失败时的状态为 * state_code* |
一个数据节点失败了。其在失败时的状态由仲裁状态代码 state_code 描述:可能的状态代码值可以在文件include/kernel/signaldata/ArbitSignalData.hpp 中找到。 |
节点失败报告 |
节点重启 |
8 | 警报 |
主节点重新启动仲裁线程 [状态=* state_code*] 或 准备仲裁节点 * node_id* [票=* ticket_id*] 或 接收仲裁节点 * node_id* [票=* ticket_id*] 或 启动仲裁节点 * node_id* [票=* ticket_id*] 或 丢失仲裁节点 * node_id* - 进程失败 [状态=* state_code*] 或 丢失仲裁节点 * node_id* - 进程退出 [状态=* state_code*] 或 丢失仲裁节点 * node_id* - * error_message* [状态=* state_code*] |
这是对集群中仲裁当前状态和进展的报告。node_id 是选定为仲裁者的管理节点或 SQL 节点的节点 ID。state_code 是一个仲裁状态代码,如include/kernel/signaldata/ArbitSignalData.hpp 中所述。当发生错误时,还会提供一个error_message ,也在ArbitSignalData.hpp 中定义。ticket_id 是在选定为仲裁者时由仲裁者分发给所有参与其选择的节点的唯一标识符;这用于确保请求仲裁的每个节点都是参与选择过程的节点之一。 |
仲裁状态 |
节点重启 |
6 | 信息 |
仲裁检查失败 - 不到 1/2 节点剩余 或 仲裁检查成功 - 所有节点组和超过 1/2 节点剩余 或 仲裁检查成功 - 节点组多数 或 仲裁检查失败 - 缺少节点组 或 网络分区 - 需要仲裁 或 仲裁成功 - 节点 * node_id* 或 仲裁失败 - 节点 * node_id* 或 网络分区 - 没有仲裁者可用 或 网络分区 - 没有配置仲裁者 或 仲裁失败 - * error_message* [状态=* state_code*] |
此消息报告了仲裁的结果。在仲裁失败的情况下,会提供一个error_message 和一个仲裁state_code ;这两者的定义可以在include/kernel/signaldata/ArbitSignalData.hpp 中找到。 |
仲裁结果 |
节点重启 |
2 | 警报 |
节点 * node_id*: GCP 接管开始 |
此节点正在尝试承担下一个全局检查点的责任(即,它正在成为主节点) | GCP_ 接管开始 |
节点重启 |
7 | 信息 |
节点 * node_id*: GCP 接管完成 |
此节点已成为主节点,并已承担下一个全局检查点的责任 | GCP_ 接管完成 |
节点重启 |
7 | 信息 |
Node * node_id*: LCP 接管已启动 |
该节点正在尝试承担下一组本地检查点的责任(即成为主节点) | LCP_TakeoverStarted |
NodeRestart |
7 | INFO |
Node * node_id*: LCP 接管已完成 |
该节点已成为主节点,并已承担下一组本地检查点的责任 | LCP_TakeoverCompleted |
NodeRestart |
7 | INFO |
Node * node_id*: 事务计数 = * transactions*,提交计数 = * commits*,读取计数 = * reads*,简单读取计数 = * simple_reads*,写入计数 = * writes*,AttrInfo 计数 = * AttrInfo_objects*,并发操作 = * concurrent_operations*,中止计数 = * aborts*,扫描 = * scans*,范围扫描 = * range_scans* |
大约每 10 秒提供一次的事务活动报告 | TransReportCounters |
Statistic |
8 | INFO |
Node * node_id*: Operations=* operations* |
该节点执行的操作数量,大约每 10 秒提供一次 | OperationReportCounters |
Statistic |
8 | INFO |
Node * node_id*: ID 为 * table_id* 的表已创建 |
已创建具有显示的表 ID 的表 | TableCreated |
Statistic |
7 | INFO |
Node * node_id*: 在 doJob 中最后 8192 次的平均循环计数 = * count* |
JobStatistic |
Statistic |
9 | INFO |
|
平均发送大小到节点 = * node_id* 最后 4096 次发送 = * bytes* 字节 |
该节点每次发送到节点 node_id 的平均发送 bytes 字节 |
SendBytesStatistic |
Statistic |
9 | INFO |
平均接收大小到节点 = * node_id* 最后 4096 次发送 = * bytes* 字节 |
每次从节点 node_id 接收数据时,该节点平均接收 bytes 字节的数据 |
ReceiveBytesStatistic |
Statistic |
9 | INFO |
Node * node_id*: 数据使用率为 * data_memory_percentage*%(* data_pages_used* 32K 页,总共 * data_pages_total*) / Node * node_id*: 索引使用率为 * index_memory_percentage*%(* index_pages_used* 8K 页,总共 * index_pages_total*) |
当在集群管理客户端中发出 DUMP 1000 命令时生成此报告 |
MemoryUsage |
Statistic |
5 | INFO |
Node * node1_id*: 到节点 * node2_id* 的传输器报告错误 * error_code*: * error_message* |
与节点 node2_id 通信时发生传输器错误;有关传输器错误代码和消息的列表,请参阅 NDB 传输器错误,在 MySQL NDB 集群内部手册中 |
TransporterError |
Error |
2 | ERROR |
Node * node1_id*: 传输到节点 * node2_id* 报告错误 * error_code*: * error_message* |
在与节点 node2_id 通信时出现潜在传输器问题的警告;有关传输器错误代码和消息的列表,请参见 NDB 传输器错误,有关更多信息 |
||||
Node * node1_id*: 节点 * node2_id* 丢失心跳 * heartbeat_id* |
这个节点丢失了来自节点 node2_id 的心跳 |
||||
Node * node1_id*: 节点 * node2_id* 因丢失心跳而被宣告死亡 |
这个节点已经至少丢失了来自节点 node2_id 的 3 个心跳,因此宣告该节点“死亡” |
||||
Node * node1_id*: 向节点发送心跳 = * node2_id* |
这个节点已向节点 node2_id 发送了心跳 |
||||
Node * node_id*: 事件缓冲区状态 (* object_id*): 已使用=* bytes_used* (* percent_used*% of alloc) 分配=* bytes_allocated* 最大=* bytes_available* 最新消耗的时代=* latest_consumed_epoch* 最新缓冲的时代=* latest_buffered_epoch* 报告原因=* report_reason* |
在事件缓冲区使用量较大时出现此报告,例如,在相对较短的时间内应用了许多更新时;报告显示了已使用的事件缓冲区内存的字节数和百分比,仍然可用的字节数和百分比,以及最新的缓冲和消耗时代;有关更多信息,请参见第 25.6.2.3 节,“集群日志中的事件缓冲区报告” | ||||
Node * node_id*: 进入单用户模式 , Node * node_id*: 进入单用户模式 节点 * API_node_id* 具有独占访问权限 , Node * node_id*: 进入单用户模式 |
当进入和退出单用户模式时,这些报告将被写入集群日志;API_node_id 是具有对集群的独占访问权限的 API 或 SQL 的节点 ID(有关更多信息,请参见第 25.6.6 节,“NDB 集群单用户模式”);消息 未知单用户报告 * API_node_id* 表示发生了错误,正常情况下不应看到 |
||||
Node * node_id*: 从节点 * mgm_node_id* 开始的备份已启动 |
使用具有 mgm_node_id 的管理节点启动了备份;当发出START BACKUP 命令时,此消息也会显示在集群管理客户端中;有关更多信息,请参阅第 25.6.8.2 节,“使用 NDB 集群管理客户端创建备份” |
备份已启动 |
备份 |
7 | 信息 |
Node * node_id*: 从节点 * mgm_node_id* 开始的备份 * backup_id* 已完成。StartGCP: * start_gcp* StopGCP: * stop_gcp* #记录数:* records* #日志记录数:* log_records* 数据:* data_bytes* 字节 日志:* log_bytes* 字节 |
具有 ID backup_id 的备份已完成;有关更多信息,请参阅第 25.6.8.2 节,“使用 NDB 集群管理客户端创建备份” |
备份已完成 |
备份 |
7 | 信息 |
Node * node_id*: 来自 * mgm_node_id* 的备份请求启动失败。错误:* error_code* |
备份启动失败;有关错误代码,请参阅 MGM API 错误 | 备份启动失败 |
备份 |
7 | 警报 |
Node * node_id*: 从 * mgm_node_id* 开始的备份 * backup_id* 已中止。错误:* error_code* |
备份在启动后被终止,可能是由于用户干预 | 备份已中止 |
备份 |
7 | 警报 |
日志消息 | 描述 | 事件名称 | 事件类型 | 优先级 | 严重程度 |
原文:
dev.mysql.com/doc/refman/8.0/en/mysql-cluster-log-startup-messages.html
25.6.2.2 NDB 集群日志启动消息
可能的启动消息及其描述如下列表所示:
-
初始启动,等待 %s 连接,节点 [ 所有: %s 已连接: %s 无等待: %s ]
-
等待直到节点 %s 连接,节点 [ 所有: %s 已连接: %s 无等待: %s ]
-
等待 %u 秒以连接节点 %s,节点 [ 所有: %s 已连接: %s 无等待: %s ]
-
等待非分区启动,节点 [ 所有: %s 已连接: %s 缺失: %s 无等待: %s ]
-
等待 %u 秒进行非分区启动,节点 [ 所有: %s 已连接: %s 缺失: %s 无等待: %s ]
-
初始启动节点为 %s [ 缺失: %s 无等待: %s ]
-
启动所有节点 %s
-
启动节点为 %s [ 缺失: %s 无等待: %s ]
-
启动可能已分区,节点为 %s [ 缺失: %s 无等待: %s ]
-
未知的启动报告: 0x%x [ %s %s %s %s ]
原文:
dev.mysql.com/doc/refman/8.0/en/mysql-cluster-logs-event-buffer.html
25.6.2.3 集群日志中的事件缓冲区报告
NDB
使用一个或多个内存缓冲区来存储从数据节点接收的事件。每个订阅表事件的Ndb
对象都有一个这样的缓冲区,这意味着每个执行二进制日志记录的mysqld通常有两个缓冲区(一个用于模式事件,一个用于数据事件)。每个缓冲区包含由事件组成的时代。这些事件包括操作类型(插入、更新、删除)和行数据(前后图像加元数据)。
NDB
在集群日志中生成消息来描述这些缓冲区的状态。尽管这些报告出现在集群日志中,但它们是指 API 节点上的缓冲区(与大多数其他集群日志消息不同,这些消息是由数据节点生成的)。
集群日志中的事件缓冲区记录使用以下格式:
Node *node_id*: Event buffer status (*object_id*):
used=*bytes_used* (*percent_used*% of alloc)
alloc=*bytes_allocated* (*percent_alloc*% of max) max=*bytes_available*
latest_consumed_epoch=*latest_consumed_epoch*
latest_buffered_epoch=*latest_buffered_epoch*
report_reason=*report_reason*
组成此报告的字段在此处列出,并附有描述:
-
node_id
: 报告来源节点的 ID。 -
object_id
: 报告来源的Ndb
对象的 ID。 -
bytes_used
: 缓冲区使用的字节数。 -
percent_used
: 使用的分配字节的百分比。 -
bytes_allocated
: 分配给此缓冲区的字节数。 -
percent_alloc
: 使用的可用字节的百分比;如果ndb_eventbuffer_max_alloc
等于 0(无限制),则不打印。 -
bytes_available
: 可用字节数;如果ndb_eventbuffer_max_alloc
为 0(无限制),则为 0。 -
latest_consumed_epoch
: 最近完全消耗的时代。(在 NDB API 应用程序中,通过调用nextEvent()
来完成。) -
latest_buffered_epoch
: 最近在事件缓冲区中缓冲的时代。 -
report_reason
: 报告原因。可能的原因稍后在本节中显示。
报告原因的可能原因在以下列表中描述:
-
ENOUGH_FREE_EVENTBUFFER
:事件缓冲��有足够的空间。LOW_FREE_EVENTBUFFER
:事件缓冲区的剩余空间不足。触发这些报告的阈值空闲百分比水平可以通过设置
ndb_report_thresh_binlog_mem_usage
服务器变量来调整。 -
BUFFERED_EPOCHS_OVER_THRESHOLD
: 缓存的时代数量是否超过了配置的阈值。这个数字是已完整接收的最新时代与最近被消耗的时代之间的差异(在 NDB API 应用程序中,通过调用nextEvent()
或nextEvent2()
来完成)。报告每秒生成一次,直到缓存的时代数量低于阈值,可以通过设置ndb_report_thresh_binlog_epoch_slip
服务器变量来调整阈值。您还可以通过调用setEventBufferQueueEmptyEpoch()
在 NDB API 应用程序中调整阈值。 -
PARTIALLY_DISCARDING
: 事件缓冲内存已经耗尽,即已使用了 100%的ndb_eventbuffer_max_alloc
。任何部分缓存的时代都会被完全缓存,即使使用率超过 100%,但任何接收到的新时代都会被丢弃。这意味着事件流中出现了间隙。 -
COMPLETELY_DISCARDING
: 不会缓存任何时代。 -
PARTIALLY_BUFFERING
: 在间隙之后,缓冲区的空闲百分比已经上升到阈值,在mysql客户端中可以使用ndb_eventbuffer_free_percent
服务器系统变量或在 NDB API 应用程序中通过调用set_eventbuffer_free_percent()
来设置阈值。新的时代被缓存。由于间隙而无法完成的时代被丢弃。 -
COMPLETELY_BUFFERING
: 所有接收到的时代都正在被缓存,这意味着有足够的事件缓冲内存。事件流中的间隙已经被关闭。
原文:
dev.mysql.com/doc/refman/8.0/en/mysql-cluster-ndb-transporter-errors.html
25.6.2.4 NDB Cluster: NDB Transporter Errors
此部分列出了在传输器错误发生时写入集群日志的错误代码、名称和消息。
0x00
TE_NO_ERROR
无错误
0x01
TE_ERROR_CLOSING_SOCKET
关闭套接字时发现错误
0x02
TE_ERROR_IN_SELECT_BEFORE_ACCEPT
在接受之前发现错误。传输器将重试
0x03
TE_INVALID_MESSAGE_LENGTH
在消息中发现错误(无效的消息长度)
0x04
TE_INVALID_CHECKSUM
在消息中发现错误(校验和)
0x05
TE_COULD_NOT_CREATE_SOCKET
创建套接字时发现错误(无法创建套接字)
0x06
TE_COULD_NOT_BIND_SOCKET
绑定服务器套接字时发现错误
0x07
TE_LISTEN_FAILED
监听服务器套接字时发现错误
0x08
TE_ACCEPT_RETURN_ERROR
在 accept 期间发现错误(接受返回错误)
0x0b
TE_SHM_DISCONNECT
远程节点已断开连接
0x0c
TE_SHM_IPC_STAT
无法检查 shm 段
0x0d
TE_SHM_UNABLE_TO_CREATE_SEGMENT
无法创建 shm 段
0x0e
TE_SHM_UNABLE_TO_ATTACH_SEGMENT
无法附加 shm 段
0x0f
TE_SHM_UNABLE_TO_REMOVE_SEGMENT
无法移除 shm 段
0x10
TE_TOO_SMALL_SIGID
Sig ID 太小
0x11
TE_TOO_LARGE_SIGID
Sig ID 太大
0x12
TE_WAIT_STACK_FULL
等待堆栈已满
0x13
TE_RECEIVE_BUFFER_FULL
接收缓冲区已满
0x14
TE_SIGNAL_LOST_SEND_BUFFER_FULL
发送缓冲区已满,并且尝试强制发送失败
0x15
TE_SIGNAL_LOST
发送失败原因未知(信号丢失)
0x16
TE_SEND_BUFFER_FULL
发送缓冲区已满,但睡一会解决了问题
0x21
TE_SHM_IPC_PERMANENT
Shm ipc Permanent 错误
注意
传输器错误代码 0x17 到 0x20 和 0x22 保留用于 SCI 连接,在此版本的 NDB Cluster 中不支持,因此未包含在此处。
25.6.3 在 NDB Cluster 中生成的事件报告
原文:
dev.mysql.com/doc/refman/8.0/en/mysql-cluster-event-reports.html
25.6.3.1 NDB Cluster Logging Management Commands
25.6.3.2 NDB Cluster Log Events
25.6.3.3 在 NDB Cluster 管理客户端中使用 CLUSTERLOG STATISTICS
在本节中,我们讨论 NDB Cluster 提供的事件日志类型,以及记录的事件类型。
NDB Cluster 提供两种类型的事件日志:
-
集群日志,其中包括所有集群节点生成的事件。集群日志是推荐用于大多数情况的日志,因为它提供了整个集群的日志信息。
默认情况下,集群日志保存在名为
ndb_*
node_id*_cluster.log
的文件中(其中node_id
是管理服务器的节点 ID),位于管理服务器的DataDir
中。集群日志信息也可以发送到
stdout
或syslog
设施,而不是或除了保存到文件中,这取决于为DataDir
和LogDestination
配置参数设置的值。有关这些参数的更多信息,请参见 Section 25.4.3.5, “Defining an NDB Cluster Management Server”。 -
节点日志对每个节点是本地的。
节点事件日志生成的输出被写入文件
ndb_*
node_id*_out.log
(其中node_id
是节点的节点 ID),位于节点的DataDir
中。节点事件日志为管理节点和数据节点生成。节点日志仅用于应用程序开发或调试应用程序代码。
每个可报告事件可以根据三个不同的标准进行区分:
-
类别:可以是以下任一值之一:
STARTUP
、SHUTDOWN
、STATISTICS
、CHECKPOINT
、NODERESTART
、CONNECTION
、ERROR
或INFO
。 -
优先级:表示为从 0 到 15 的数字之一,其中 0 表示“最重要”,15 表示“最不重要”。
-
严重级别:可以是以下任一值之一:
ON
、DEBUG
、INFO
、WARNING
、ERROR
、CRITICAL
、ALERT
或ALL
。(有时也称为日志级别。)
可使用 NDB 管理客户端CLUSTERLOG
命令在这些属性上过滤集群日志。此命令仅影响集群日志,并不影响节点日志;可以使用ndb_mgm NODELOG DEBUG
命令打开和关闭一个或多个节点日志中的调试日志记录。
NDB Cluster 生成的日志消息的格式(截至 NDB 8.0.26)如下所示:
*timestamp* [*node_type*] *level* -- Node *node_id*: *message*
日志中的每行,或日志消息,包含以下信息:
-
以
*
YYYY*-*
MM*-*
DD* *
HH*:*
MM*:*
SS*
格式的timestamp
。时间戳值目前仅解析到整秒;不支持小数秒。 -
node_type
,即执行日志记录的节点或应用程序的类型。在集群日志中,这始终是[MgmSrvr]
;在数据节点日志中,始终是[ndbd]
。在由 NDB API 应用程序和工具生成的日志中可能出现[NdbApi]
和其他值。 -
事件的
level
,有时也称为其严重级别或日志级别。有关严重级别的更多信息,请参见本节前面以及第 25.6.3.1 节,“NDB Cluster 日志管理命令”。 -
报告事件的节点的 ID(
node_id
)。 -
包含事件描述的
message
。日志中出现的最常见事件类型是集群中不同节点之间的连接和断开连接,以及发生检查点时。在某些情况下,描述可能包含状态或其他信息。
这里显示了实际集群日志中的示例:
2021-06-10 10:01:07 [MgmtSrvr] INFO -- Node 5: Start phase 5 completed (system restart)
2021-06-10 10:01:07 [MgmtSrvr] INFO -- Node 6: Start phase 5 completed (system restart)
2021-06-10 10:01:07 [MgmtSrvr] INFO -- Node 5: Start phase 6 completed (system restart)
2021-06-10 10:01:07 [MgmtSrvr] INFO -- Node 6: Start phase 6 completed (system restart)
2021-06-10 10:01:07 [MgmtSrvr] INFO -- Node 5: President restarts arbitration thread [state=1]
2021-06-10 10:01:07 [MgmtSrvr] INFO -- Node 5: Start phase 7 completed (system restart)
2021-06-10 10:01:07 [MgmtSrvr] INFO -- Node 6: Start phase 7 completed (system restart)
2021-06-10 10:01:07 [MgmtSrvr] INFO -- Node 5: Start phase 8 completed (system restart)
2021-06-10 10:01:07 [MgmtSrvr] INFO -- Node 6: Start phase 8 completed (system restart)
2021-06-10 10:01:07 [MgmtSrvr] INFO -- Node 5: Start phase 9 completed (system restart)
2021-06-10 10:01:07 [MgmtSrvr] INFO -- Node 6: Start phase 9 completed (system restart)
2021-06-10 10:01:07 [MgmtSrvr] INFO -- Node 5: Start phase 50 completed (system restart)
2021-06-10 10:01:07 [MgmtSrvr] INFO -- Node 6: Start phase 50 completed (system restart)
2021-06-10 10:01:07 [MgmtSrvr] INFO -- Node 5: Start phase 101 completed (system restart)
2021-06-10 10:01:07 [MgmtSrvr] INFO -- Node 6: Start phase 101 completed (system restart)
2021-06-10 10:01:07 [MgmtSrvr] INFO -- Node 5: Started (mysql-8.0.35 ndb-8.0.35)
2021-06-10 10:01:07 [MgmtSrvr] INFO -- Node 6: Started (mysql-8.0.35 ndb-8.0.35)
2021-06-10 10:01:07 [MgmtSrvr] INFO -- Node 5: Node 50: API mysql-8.0.35 ndb-8.0.35
2021-06-10 10:01:07 [MgmtSrvr] INFO -- Node 6: Node 50: API mysql-8.0.35 ndb-8.0.35
2021-06-10 10:01:08 [MgmtSrvr] INFO -- Node 6: Prepare arbitrator node 50 [ticket=75fd00010fa8b608]
2021-06-10 10:01:08 [MgmtSrvr] INFO -- Node 5: Started arbitrator node 50 [ticket=75fd00010fa8b608]
2021-06-10 10:01:08 [MgmtSrvr] INFO -- Node 6: Communication to Node 100 opened
2021-06-10 10:01:08 [MgmtSrvr] INFO -- Node 6: Communication to Node 101 opened
2021-06-10 10:01:08 [MgmtSrvr] INFO -- Node 5: Communication to Node 100 opened
2021-06-10 10:01:08 [MgmtSrvr] INFO -- Node 5: Communication to Node 101 opened
2021-06-10 10:01:36 [MgmtSrvr] INFO -- Alloc node id 100 succeeded
2021-06-10 10:01:36 [MgmtSrvr] INFO -- Nodeid 100 allocated for API at 127.0.0.1
2021-06-10 10:01:36 [MgmtSrvr] INFO -- Node 100: mysqld --server-id=1
2021-06-10 10:01:36 [MgmtSrvr] INFO -- Node 5: Node 100 Connected
2021-06-10 10:01:36 [MgmtSrvr] INFO -- Node 6: Node 100 Connected
2021-06-10 10:01:36 [MgmtSrvr] INFO -- Node 5: Node 100: API mysql-8.0.35 ndb-8.0.35
2021-06-10 10:01:36 [MgmtSrvr] INFO -- Node 6: Node 100: API mysql-8.0.35 ndb-8.0.35
有关更多信息,请参见第 25.6.3.2 节,“NDB Cluster 日志事件”。
原文:
dev.mysql.com/doc/refman/8.0/en/mysql-cluster-logging-management-commands.html
25.6.3.1 NDB Cluster Logging Management Commands
ndb_mgm支持与集群日志和节点日志相关的许多管理命令。在接下来的列表中,node_id
表示存储节点 ID 或关键字ALL
,表示该命令应用于所有集群的数据节点。
-
CLUSTERLOG ON
打开集群日志。
-
CLUSTERLOG OFF
关闭集群日志。
-
CLUSTERLOG INFO
提供有关集群日志设置的信息。
-
*
node_id* CLUSTERLOG *
category*=*
threshold*
在集群日志中记录
category
事件,其优先级小于或等于threshold
。 -
CLUSTERLOG FILTER *
severity_level*
切换指定
severity_level
事件的集群日志记录。
以下表描述了集群日志类别阈值的默认设置(所有数据节点)。如果事件的优先级值低于或等于优先级阈值,则会在集群日志中报告。
注意
事件按数据节点报告,并且阈值可以在不同节点上设置为不同值。
表 25.54 集群日志类别,默认阈值设置
Category | 默认阈值(所有数据节点) |
---|---|
STARTUP |
7 |
SHUTDOWN |
7 |
STATISTICS |
7 |
CHECKPOINT |
7 |
NODERESTART |
7 |
CONNECTION |
8 |
ERROR |
15 |
INFO |
7 |
BACKUP |
15 |
CONGESTION |
7 |
SCHEMA |
7 |
Category | 默认阈值(所有数据节点) |
STATISTICS
类别可以提供大量有用的数据。有关更多信息,请参见第 25.6.3.3 节,“在 NDB Cluster 管理客户端中使用 CLUSTERLOG STATISTICS”。
阈值用于过滤每个类别中的事件。例如,具有优先级 3 的STARTUP
事件除非STARTUP
的阈值设置为 3 或更高,否则不会记录。如果阈值为 3,则只发送优先级为 3 或更低的事件。
以下表显示了事件严重级别。
注意
这些对应于 Unix 的syslog
级别,除了未使用或映射的LOG_EMERG
和LOG_NOTICE
。
表 25.55 事件严重级别
严重级别值 | 严重级别 | 描述 |
---|---|---|
1 | ALERT |
应立即纠正的条件,比如损坏的系统数据库 |
2 | CRITICAL |
临界条件,比如设备错误或资源不足 |
3 | ERROR |
需要纠正的条件,比如配置错误 |
4 | WARNING |
不是错误的条件,但可能需要特殊处理 |
5 | INFO |
信息消息 |
6 | DEBUG |
用于NDBCLUSTER 开发的调试消息 |
事件严重级别可以通过CLUSTERLOG FILTER
(见上文)打开或关闭。如果打开了一个严重级别,那么所有优先级小于或等于类别阈值的事件都会被记录下来。如果关闭了严重级别,则不会记录属于该严重级别的任何事件。
重要提示
集群日志级别是根据每个ndb_mgmd、每个订阅者的基础进行设置。这意味着,在具有多个管理服务器的 NDB 集群中,使用连接到一个管理服务器的ndb_mgm实例中的CLUSTERLOG
命令仅影响由该管理服务器生成的日志,而不影响其他任何管理服务器生成的日志。这也意味着,如果其中一个管理服务器重新启动,那么只有由该管理服务器生成的日志会受到由重新启动引起的日志级别重置的影响。
原文:
dev.mysql.com/doc/refman/8.0/en/mysql-cluster-log-events.html
25.6.3.2 NDB 集群日志事件
事件日志中报告的事件报告具有以下格式:
*datetime* [*string*] *severity* -- *message*
例如:
09:19:30 2005-07-24 [NDB] INFO -- Node 4 Start phase 4 completed
本节讨论按类别和每个类别内的严重级别排序的所有可报告事件。
在事件描���中,GCP 和 LCP 分别表示“全局检查点”和“本地检查点”。
连接事件
这些事件与集群节点之间的连接相关联。
表 25.56 与集群节点之间连接相关的事件
事件 | 优先级 | 严重级别 | 描述 |
---|---|---|---|
Connected |
8 | INFO |
数据节点已连接 |
Disconnected |
8 | ALERT |
数据节点断开连接 |
CommunicationClosed |
8 | INFO |
SQL 节点或数据节点连接已关闭 |
CommunicationOpened |
8 | INFO |
SQL 节点或数据节点连接已打开 |
ConnectedApiVersion |
8 | INFO |
使用 API 版本连接 |
检查点事件
此处显示的日志消息与检查点相关。
表 25.57 与检查点相关的事件
事件 | 优先级 | 严重级别 | 描述 |
---|---|---|---|
GlobalCheckpointStarted |
9 | INFO |
GCP 开始:REDO 日志写入磁盘 |
GlobalCheckpointCompleted |
10 | INFO |
GCP 完成 |
LocalCheckpointStarted |
7 | INFO |
LCP 开始:数据写入磁盘 |
LocalCheckpointCompleted |
7 | INFO |
LCP 正常完成 |
LCPStoppedInCalcKeepGci |
0 | ALERT |
LCP 停止 |
LCPFragmentCompleted |
11 | INFO |
片段上的 LCP 已完成 |
UndoLogBlocked |
7 | INFO |
UNDO 日志记录被阻止;缓冲区接近溢出 |
RedoStatus |
7 | INFO |
重做状态 |
启动事件
以下事件是响应节点或集群启动及其成功或失败而生成的。它们还提供与启动过程的进展相关的信息,包括有关日志活动的信息。
表 25.58 与节点或集群启动相关的事件
事件 | 优先级 | 严重级别 | 描述 |
---|---|---|---|
NDBStartStarted |
1 | INFO |
数据节点启动阶段已启动(所有节点启动) |
NDBStartCompleted |
1 | INFO |
启动阶段完成,所有数据节点 |
STTORRYRecieved |
15 | INFO |
重新启动完成后接收的块 |
StartPhaseCompleted |
4 | INFO |
数据节点启动阶段 X 完成 |
CM_REGCONF |
3 | INFO |
节点已成功包含在集群中;显示节点、管理节点和动态 ID |
CM_REGREF |
8 | INFO |
节点被拒绝加入集群;由于配置错误、无法建立通信或其他问题,无法加入集群 |
FIND_NEIGHBOURS |
8 | INFO |
显示相邻数据节点 |
NDBStopStarted |
1 | INFO |
数据节点关闭已启动 |
NDBStopCompleted |
1 | INFO |
数据节点关闭完成 |
NDBStopForced |
1 | ALERT |
强制关闭数据节点 |
NDBStopAborted |
1 | INFO |
无法正常关闭数据节点 |
StartREDOLog |
4 | INFO |
新重做日志已开始;GCI 保持 X ,最新可恢复的 GCI Y |
StartLog |
10 | INFO |
新日志已开始;日志部分 X ,起始 MB Y ,结束 MB Z |
UNDORecordsExecuted |
15 | INFO |
撤销记录已执行 |
StartReport |
4 | INFO |
报告已开始 |
LogFileInitStatus |
7 | INFO |
日志文件初始化状态 |
LogFileInitCompStatus |
7 | INFO |
日志文件完成状态 |
StartReadLCP |
10 | INFO |
开始读取本地检查点 |
ReadLCPComplete |
10 | INFO |
读取本地检查点已完成 |
RunRedo |
8 | INFO |
运行重做日志 |
RebuildIndex |
10 | INFO |
重建索引 |
事件 | 优先级 | 严重级别 | 描述 |
NODERESTART 事件
当重新启动节点并与节点重新启动过程的成功或失败相关时,将生成以下事件。
表 25.59 与重新启动节点相关的事件
事件 | 优先级 | 严重级别 | 描述 |
---|---|---|---|
NR_CopyDict |
7 | INFO |
完成复制字典信息 |
NR_CopyDistr |
7 | INFO |
完成复制分布信息 |
NR_CopyFragsStarted |
7 | INFO |
开始复制片段 |
NR_CopyFragDone |
10 | INFO |
完成复制片段 |
NR_CopyFragsCompleted |
7 | INFO |
完成复制所有片段 |
NodeFailCompleted |
8 | ALERT |
节点故障阶段已完成 |
NODE_FAILREP |
8 | ALERT |
报告节点故障 |
| ArbitState
| 6 | INFO
| 报告是否找到仲裁者;在寻找仲裁者时有七种不同的可能结果,列在此处:
-
管理服务器重新启动仲裁线程 [状态=
X
] -
准备仲裁节点
X
[票=Y
] -
接收仲裁节点
X
[票=Y
] -
启动仲裁节点
X
[票=Y
] -
丢失仲裁节点
X
- 进程失败 [状态=Y
] -
丢失仲裁节点
X
- 进程退出 [状态=Y
] -
丢失仲裁���点
X
<错误消息> [状态=Y
]
|
| ArbitResult
| 2 | ALERT
| 报告仲裁结果;仲裁尝试有八种不同的可能结果,列在此处:
-
仲裁检查失败:少于 1/2 的节点剩余
-
仲裁检查成功:节点组多数
-
仲裁检查失败:缺少节点组
-
网络分区:需要仲裁
-
仲裁成功:来自节点
X
的肯定回应 -
仲裁失败:来自节点
X
的负面回应 -
网络分区:没有可用的仲裁节点
-
网络分区:未配置仲裁节点
|
GCP_TakeoverStarted |
7 | INFO |
GCP 接管已启动 |
---|---|---|---|
GCP_TakeoverCompleted |
7 | INFO |
GCP 接管已完成 |
LCP_TakeoverStarted |
7 | INFO |
LCP 接管已启动 |
LCP_TakeoverCompleted |
7 | INFO |
LCP 接管完成(状态 = X ) |
ConnectCheckStarted |
6 | INFO |
连接检查已启动 |
ConnectCheckCompleted |
6 | INFO |
连接检查已完成 |
NodeFailRejected |
6 | ALERT |
节点故障阶段失败 |
事件 | 优先级 | 严重级别 | 描述 |
统计事件
以下事件具有统计性质。它们提供诸如事务数和其他操作数、单个节点发送或接收的数据量以及内存使用情况等信息。
表 25.60 统计性质事件
事件 | 优先级 | 严重级别 | 描述 |
---|---|---|---|
TransReportCounters |
8 | INFO |
报告事务统计信息,包括事务数、提交数、读取数、简单读取数、写入数、并发操作、属性信息和中止数 |
OperationReportCounters |
8 | INFO |
操作数 |
TableCreated |
7 | INFO |
报告创建的表数 |
JobStatistic |
9 | INFO |
平均内部作业调度统计 |
ThreadConfigLoop |
9 | INFO |
线程配置循环数 |
SendBytesStatistic |
9 | INFO |
发送到节点 X 的平均字节数 |
ReceiveBytesStatistic |
9 | INFO |
从节点 X 接收的平均字节数 |
MemoryUsage |
5 | INFO |
数据和索引内存使用情况(80%、90%和 100%) |
MTSignalStatistics |
9 | INFO |
多线程信号 |
模式事件
这些事件涉及 NDB 集群模式操作。
表 25.61 与 NDB 集群模式操作相关的事件
事件 | 优先级 | 严重级别 | 描述 |
---|---|---|---|
CreateSchemaObject |
8 | INFO |
创建模式对象 |
AlterSchemaObject |
8 | INFO |
模式对象已更新 |
DropSchemaObject |
8 | INFO |
模式对象已删除 |
错误事件
这些事件涉及集群错误和警告。其中一个或多个的存在通常表示发生了重大故障或失败。
表 25.62 与集群错误和警告相关的事件
事件 | 优先级 | 严重级别 | 描述 |
---|---|---|---|
TransporterError |
2 | ERROR |
传输器错误 |
TransporterWarning |
8 | WARNING |
传输器警告 |
MissedHeartbeat |
8 | WARNING |
节点 X 错过心跳次数 Y |
DeadDueToHeartbeat |
8 | ALERT |
节点 X 因错过心跳被宣布“死亡” |
WarningEvent |
2 | WARNING |
一般警告事件 |
SubscriptionStatus |
4 | WARNING |
订阅状态变更 |
信息事件
这些事件提供有关集群状态和与集群维护相关活动的一般信息,例如日志记录和心跳传输。
表 25.63 信息事件
事件 | 优先级 | 严重级别 | 描述 |
---|---|---|---|
SentHeartbeat |
12 | INFO |
发送心跳 |
CreateLogBytes |
11 | INFO |
创建日志:日志部分、日志文件、大小(MB) |
InfoEvent |
2 | INFO |
一般信息事件 |
EventBufferStatus |
7 | INFO |
事件缓冲区状态 |
EventBufferStatus2 |
7 | INFO |
改进的事件缓冲区状态信息 |
注意
SentHeartbeat
事件仅在使用 VM_TRACE
编译的 NDB Cluster 中可用。
单用户事件
这些事件与进入和退出单用户模式相关联。
表 25.64 与单用户模式相关的事件
事件 | 优先级 | 严重级别 | 描述 |
---|---|---|---|
SingleUser |
7 | INFO |
进入或退出单用户模式 |
备份事件
这些事件提供有关创建或恢复备份的信息。
表 25.65 备份事件
事件 | 优先级 | 严重级别 | 描述 |
---|---|---|---|
BackupStarted |
7 | INFO |
备份开始 |
BackupStatus |
7 | INFO |
备份状态 |
BackupCompleted |
7 | INFO |
备份完成 |
BackupFailedToStart |
7 | ALERT |
备份启动失败 |
BackupAborted |
7 | ALERT |
用户中止备份 |
RestoreStarted |
7 | INFO |
开始从备份恢复 |
RestoreMetaData |
7 | INFO |
恢复元数据 |
RestoreData |
7 | INFO |
恢复数据 |
RestoreLog |
7 | INFO |
恢复日志文件 |
RestoreCompleted |
7 | INFO |
备份恢复完成 |
SavedEvent |
7 | INFO |
事件已保存 |
事件 | 优先级 | 严重级别 | 描述 |
原文:
dev.mysql.com/doc/refman/8.0/en/mysql-cluster-log-statistics.html
25.6.3.3 在 NDB Cluster 管理客户端中使用 CLUSTERLOG STATISTICS
NDB
管理客户端的CLUSTERLOG STATISTICS
命令可以在其输出中提供许多有用的统计信息。提供有关集群状态的计数器每 5 秒由事务协调器 (TC) 和本地查询处理程序 (LQH) 更新一次,并写入集群日志。
事务协调器统计信息。 每个事务都有一个事务协调器,可以通过以下方法之一选择:
-
以轮询方式
-
通过通信接近度
-
在事务启动时提供数据放置提示
注意
你可以通过ndb_optimized_node_selection
系统变量确定从给定 SQL 节点开始的事务使用哪种 TC 选择方法。
同一事务内的所有操作使用相同的事务协调器,报告以下统计信息:
-
事务计数。 这是在上一个间隔内使用此 TC 作为事务协调器启动的事务数量。这些事务中的任何一个可能已提交、已中止或在报告间隔结束时仍未提交。
注意
事务不会在 TC 之间迁移。
-
提交计数。 这是在上一个报告间隔内使用此 TC 作为事务协调器提交的事务数量。因为一些在此报告间隔内提交的事务可能在之前的报告间隔内启动,所以
提交计数
可能大于事务计数
。 -
读取计数。 这是在上一个报告间隔内使用此 TC 作为事务协调器启动的主键读取操作次数,包括简单读取。此计数还包括作为唯一索引操作的读取。唯一索引读取操作生成 2 个主键读取操作——一个用于隐藏的唯一索引表,一个用于读取发生的表。
-
简单读取计数。 这是在上一个报告间隔内使用此 TC 作为事务协调器启动的简单读取操作次数。
-
写入计数。 这是在上一个报告间隔内以此 TC 作为事务协调器启动的主键写入操作次数。这包括所有插入、更新、写入和删除操作,以及作为唯一索引操作的写入。
注意
唯一索引更新操作可能在索引表和基表上生成多个主键读取和写入操作。
-
**AttrInfoCount. ** 这是在上一个报告间隔中接收的 32 位数据字的数量,用于使用此 TC 作为事务协调器的主键操作。对于读取操作,这与请求的列数成比例。对于插入和更新操作,这与写入的列数以及它们的数据大小成比例。对于删除操作,这通常为零。
唯一索引操作会生成多个 PK 操作,因此会增加此计数。但是,用于描述 PK 操作本身的数据字以及发送的关键信息在此处不计入。用于描述扫描读取的列或描述 ScanFilters 的属性信息也不计入
AttrInfoCount
。 -
**Concurrent Operations. ** 这是在上一个报告间隔中启动但未完成的使用此 TC 作为事务协调器的主键或扫描操作的数量。当操作启动时,此计数器会递增,并在操作完成后递减;这发生在事务提交后。脏读和写操作以及失败的操作会递减此计数器。
Concurrent Operations
可以达到的最大值是 TC 块可以支持的操作数的最大值;目前,这是(2 * MaxNoOfConcurrentOperations) + 16 + MaxNoOfConcurrentTransactions
。(有关这些配置参数的更多信息,请参见 25.4.3.6 节,“定义 NDB 集群数据节点”的事务参数部分。) -
**Abort count. ** 这是在上一个报告间隔中被中止的使用此 TC 作为事务协调器的事务的数量。因为在上一个报告间隔中被中止的一些事务可能在先前的报告间隔中开始,
Abort count
有时可能大于Trans count
。 -
**Scans. ** 这是在上一个报告间隔中启动的使用此 TC 作为事务协调器的表扫描的数量。这不包括范围扫描(即,有序索引扫描)。
-
**Range scans. ** 这是在上一个报告间隔中启动的使用此 TC 作为事务协调器的有序索引扫描的数量。
-
**Local reads. ** 这是在一个节点上使用事务协调器执行的主键读取操作的数量,该节点还保存记录的主键片段副本。此计数也可以从
ndbinfo.counters
表中的LOCAL_READS
计数器中获取。 -
本地写入。 这包含使用事务协调器在同时还持有记录主要片段副本的节点上执行的主键读取操作的数量。此计数也可以从
ndbinfo.counters
表中的LOCAL_WRITES
计数器中获取。
本地查询处理程序统计信息(操作)。 每个本地查询处理程序块(即每个数据节点进程)有 1 个集群事件。操作记录在数据所在的 LQH 中。
注意
单个事务可能操作存储在多个 LQH 块中的数据。
Operations
统计数据提供了此 LQH 块在上一个报告间隔中执行的本地操作数量,并包括所有类型的读取和写入操作(插入、更新、写入和删除操作)。这还包括用于复制写入的操作。例如,在具有两个片段副本的集群中,对主要片段副本的写入记录在主 LQH 中,对备份的写入记录在备份 LQH 中。唯一键操作可能导致多个本地操作;但是,这不包括由于表扫描或有序索引扫描而生成的本地操作,这些操作不计入统计。
进程调度器统计信息。 除了事务协调器和本地查询处理程序报告的统计信息外,每个ndbd进程都有一个调度程序,还提供与 NDB Cluster 性能相关的有用指标。此调度程序在无限循环中运行;在每个循环期间,调度程序执行以下任务:
-
从套接字中读取任何传入的消息到作业缓冲区中。
-
检查是否有任何定时消息需要执行;如果有,也将这些放入作业缓冲区中。
-
执行(循环执行)作业缓冲区中的任何消息。
-
发送通过执行作业缓冲区中的消息生成的任何分布式消息。
-
等待任何新到来的消息。
进程调度器统计信息包括以下内容:
-
平均循环计数器。 这是从前述列表的第三步中执行的循环次数。随着 TCP/IP 缓冲区的利用率提高,此统计数据会增加。您可以使用此功能来监视随着添加新数据节点进程而发生的性能变化。
-
平均发送大小和平均接收大小。 这些统计数据使您能够衡量节点之间的写入和读取的效率。这些值以字节为单位给出。较高的值意味着每个字节发送或接收的成本较低;最大值为 64K。
要导致记录所有集群日志统计信息,您可以在NDB
管理客户端中使用以下命令:
ndb_mgm> ALL CLUSTERLOG STATISTICS=15
注意
将STATISTICS
的阈值设置为 15 会导致集群日志变得非常冗长,并且随着集群节点数量和 NDB 集群中活动量的增加而迅速增长。
有关与日志记录和报告相关的 NDB 集群管理客户端命令的更多信息,请参见第 25.6.3.1 节,“NDB 集群日志管理命令”。
25.6.4 NDB 集群启动阶段摘要
原文:
dev.mysql.com/doc/refman/8.0/en/mysql-cluster-start-phases.html
本节提供了 NDB 集群数据节点启动时涉及的步骤的简化概述。更完整的信息可以在 NDB 集群启动阶段中找到,NDB
内部指南中。
这些阶段与管理客户端中*
node_id* STATUS
命令输出中报告的相同(请参见第 25.6.1 节,“NDB 集群管理客户端中的命令”)。这些启动阶段也在ndbinfo.nodes
表的start_phase
列中报告。
启动类型。 有几种不同的启动类型和模式,如下列表所示:
-
初始启动。 集群在所有数据节点上都有一个干净的文件系统启动。这要么是当集群第一次启动时发生,要么是当所有数据节点使用
--initial
选项重新启动时发生。注意
使用
--initial
重新启动节点时,磁盘数据文件不会被删除。 -
系统重新启动。 集群启动并读取存储在数据节点中的数据。当集群在使用后关闭后,希望集群从离开的地方恢复操作时发生。
-
节点重新启动。 这是在集群本身正在运行时对集群节点进行在线重新启动。
-
初始节点重新启动。 这与节点重新启动相同,只是节点被重新初始化并以干净的文件系统启动。
设置和初始化(阶段-1)。 在启动之前,每个数据节点(ndbd进程)必须被初始化。初始化包括以下步骤:
-
获取节点 ID
-
获取配置数据
-
为节点间通信分配端口
-
根据配置文件中的设置分配内存
当数据节点或 SQL 节点首次连接到管理节点时,它会保留一个集群节点 ID。为了确保没有其他节点分配相同的节点 ID,此 ID 将保留,直到节点成功连接到集群并至少一个ndbd报告此节点已连接。此节点 ID 的保留由问题节点与ndb_mgmd之间的连接保护。
在每个数据节点初始化后,集群启动过程可以继续进行。集群在此过程中经历的阶段如下:
-
第 0 阶段。
NDBFS
和NDBCNTR
块启动。对于使用--initial
选项启动的数据节点,这些数据节点的文件系统会被清除。 -
第 1 阶段。 在此阶段,所有剩余的
NDB
内核块启动。建立 NDB 集群连接,建立块间通信,并启动心跳。在节点重新启动的情况下,还会检查 API 节点连接。注意
当一个或多个节点在第 1 阶段挂起,而其余节点在第 2 阶段挂起时,通常表示存在网络问题。造成此类问题的一个可能原因是一个或多个集群主机具有多个网络接口。导致此条件的问题的另一个常见来源是阻止集群节点之间通信所需的 TCP/IP 端口。在后一种情况下,这通常是由于防火墙配置错误造成的。
-
第 2 阶段。
NDBCNTR
内核块检查所有现有节点的状态。选择主节点,并初始化集群模式文件。 -
第 3 阶段。
DBLQH
和DBTC
内核块之间建立通信。确定启动类型;如果这是一个重新启动,DBDIH
块获得执行重新启动的权限。 -
第 4 阶段。 对于初始启动或初始节点重新启动,会创建重做日志文件。这些文件的数量等于
NoOfFragmentLogFiles
。对于系统重新启动:
-
读取模式或模式。
-
从本地检查点读取数据。
-
应用所有重做信息,直到达到最新可恢复的全局检查点。
对于节点重新启动,找到重做日志的尾部。
-
-
第 5 阶段。 数据节点启动的大部分与数据库相关的工作在此阶段完成。对于初始启动或系统重新启动,会执行本地检查点,然后是全局检查点。在此阶段开始定期检查内存使用情况,并执行任何必要的节点接管。
-
第 6 阶段。 在此阶段,定义并设置节点组。
-
第 7 阶段。 选择仲裁节点并开始运行。设置下一个备份 ID,以及备份磁盘写入速度。达到此启动阶段���节点被标记为
已启动
。现在 API 节点(包括 SQL 节点)可以连接到集群。 -
第 8 阶段。 如果这是系统重新启动,所有索引都将被重建(由
DBDIH
)。 -
第 9 阶段。 节点内部启动变量被重置。
-
第 100 阶段(已过时)。 以前,在节点重新启动或初始节点重新启动期间,API 节点可以连接到节点并开始接收事件。目前,此阶段为空。
-
第 101 阶段。 在节点重新启动或初始节点重新启动期间,事件传递被移交给加入集群的节点。新加入的节点负责将其主要数据传递给订阅者。这个阶段也被称为
SUMA
移交阶段。
初始启动或系统重新启动完成后,事务处理被启用。对于节点重新启动或初始节点重新启动,启动过程的完成意味着节点现在可以充当事务协调器。
25.6.5 执行 NDB Cluster 的滚动重启
原文:
dev.mysql.com/doc/refman/8.0/en/mysql-cluster-rolling-restart.html
本节讨论如何执行 NDB Cluster 安装的滚动重启,因为它涉及逐个停止和启动(或重启)每个节点,以确保集群本身保持运行。这通常作为滚动升级或滚动降级的一部分进行,其中集群的高可用性是必需的,整个集群不允许停机。在我们提到升级时,这里提供的信息通常也适用于降级。
有许多原因可能希望进行滚动重启。这些原因在接下来的几段中描述。
配置更改。 对集群的配置进行更改,例如向集群添加 SQL 节点,或将配置参数设置为新值。
NDB Cluster 软件升级或降级。 将集群升级到 NDB Cluster 软件的新版本(或将其降级到旧版本)。这通常被称为“滚动升级”(或“滚动降级”,当恢复到 NDB Cluster 的旧版本时)。
节点主机更改。 对运行一个或多个 NDB Cluster 节点进程的硬件或操作系统进行更改。
系统重置(集群重置)。 重置集群,因为它已经达到一个不良状态。在这种情况下,通常希望重新加载一个或多个数据节点的数据和元数据。这可以通过以下三种方式之一完成:
-
使用
--initial
选项启动每个数据节点进程(ndbd或可能是ndbmtd),该选项强制数据节点清除其文件系统,并从其他数据节点重新加载所有 NDB Cluster 数据和元数据。从 NDB 8.0.21 开始,这还会强制删除与这些对象相关的所有磁盘数据对象和文件。
-
使用ndb_mgm客户端的
START BACKUP
命令创建备份,然后执行重启操作。升级后,使用ndb_restore来恢复节点或节点。查看 Section 25.6.8, “Online Backup of NDB Cluster”和 Section 25.5.23, “ndb_restore — Restore an NDB Cluster Backup”获取更多信息。
-
使用mysqldump在升级之前创建备份;之后,使用
LOAD DATA
来恢复备份。
资源回收。 通过连续的INSERT
和DELETE
操作释放先前分配给表的内存,以便其他 NDB Cluster 表重复使用。
执行滚动重启的过程可以概括如下:
-
停止所有集群管理节点(ndb_mgmd进程),重新配置它们,然后重新启动它们。 (参见使用多个管理服务器进行滚动重启.)
-
依次停止、重新配置,然后重新启动每个集群数据节点(ndbd进程)。
通过在前一步骤之后在ndb_mgm客户端为每个数据节点发出
RESTART
来更新一些节点配置参数。其他参数要求使用管理客户端STOP
命令完全停止数据节点,然后通过在系统 shell 中调用适当的ndbd或ndbmtd")可执行文件来重新启动。 (在大多数 Unix 系统上,也可以使用类似kill的 shell 命令来停止数据节点进程,但通常更倾向于使用STOP
命令,通常更简单。)注意
在 Windows 上,您还可以使用SC STOP和SC START命令,
NET STOP
和NET START
命令,或 Windows 服务管理器来停止和启动已安装为 Windows 服务的节点(参见 Section 25.3.2.4, “Installing NDB Cluster Processes as Windows Services”)。所需的重启类型在��个节点配置参数的文档中指示。请参阅 Section 25.4.3, “NDB Cluster Configuration Files”。
-
依次停止、重新配置,然后重新启动每个集群 SQL 节点(mysqld进程)。
NDB Cluster 支持一种相对灵活的节点升级顺序。在升级 NDB Cluster 时,您可以在升级管理节点、数据节点或两者之前先升级 API 节点(包括 SQL 节点)。换句话说,您可以按任意顺序升级 API 和 SQL 节点。但需遵守以下规定:
-
此功能仅用于在线升级。不打算也不支持在生产环境中连续长期使用来自不同 NDB Cluster 版本的节点二进制文件的混合。
-
必须在升级任何不同类型节点(管理、数据或 API 节点)之前先升级所有相同类型的节点。无论节点升级顺序如何,这一点始终成立。
-
必须在升级任何数据节点之前升级所有管理节点。无论您以何种顺序升级集群的 API 和 SQL 节点,这一点始终成立。
-
在升级所有管理节点和数据节点之前,不能使用“新”版本特有的功能。
这也适用于可能适用的任何 MySQL Server 版本更改,除了 NDB 引擎版本更改,因此在规划升级时不要忘记考虑这一点。(这对于一般 NDB Cluster 的在线升级也是适用的。)
任何 API 节点在节点重新启动期间都无法执行模式操作(如数据定义语句)。部分由于此限制,模式操作在在线升级或降级期间也不受支持。此外,在升级或降级进行时也无法执行本地备份。
使用多个管理服务器进行滚动重启。 在对具有多个管理节点的 NDB Cluster 执行滚动重启时,应注意ndb_mgmd会检查是否有其他管理节点正在运行,并尝试使用该节点的配置数据。为防止这种情况发生,并强制ndb_mgmd重新读取其配置文件,请执行以下步骤:
-
停止所有 NDB Cluster 的ndb_mgmd进程。
-
更新所有
config.ini
文件。 -
启动一个单独的ndb_mgmd,使用所需的
--reload
、--initial
或两个选项。 -
如果您使用
--initial
选项启动了第一个ndb_mgmd,您还必须使用--initial
启动任何剩余的ndb_mgmd进程。无论在启动第一个ndb_mgmd时使用了哪些其他选项,您都不应该在第一个使用
--reload
之后启动任何剩余的ndb_mgmd进程。 -
按照正常流程完成数据节点和 API 节点的滚动重启。
在执行滚动重启以更新集群配置时,您可以使用ndbinfo.nodes
表的config_generation
列来跟踪哪些数据节点已成功使用新配置重新启动。请参阅 Section 25.6.16.47, “The ndbinfo nodes Table”。
25.6.6 NDB 集群单用户模式
原文:
dev.mysql.com/doc/refman/8.0/en/mysql-cluster-single-user-mode.html
单用户模式使数据库管理员能够将对数据库系统的访问限制为单个 API 节点,例如 MySQL 服务器(SQL 节点)或一个 ndb_restore 实例。进入单用户模式时,所有其他 API 节点的连接将被优雅地关闭,所有正在运行的事务都将被中止。不允许启动新事务。
一旦集群进入单用户模式,只有指定的 API 节点被授予对数据库的访问权限。
您可以使用 ndb_mgm 客户端中的 ALL STATUS
命令来查看集群何时进入单用户模式。您还可以检查 ndbinfo.nodes
表的 status
列(有关更多信息,请参见 第 25.6.16.47 节,“ndbinfo nodes 表”)。
示例:
ndb_mgm> ENTER SINGLE USER MODE 5
执行此命令后,集群进入单用户模式,其节点 ID 为 5
的 API 节点成为集群唯一允许的用户。
在上述命令中指定的节点必须是 API 节点;尝试指定任何其他类型的节点都将被拒绝。
注意
当调用上述命令时,运行在指定节点上的所有事务都将被中止,连接将被关闭,服务器必须重新启动。
命令 EXIT SINGLE USER MODE
将集群的数据节点从单用户模式更改为正常模式。等待连接的 API 节点(例如 MySQL 服务器)再次被允许连接(即等待集群准备就绪并可用)。在状态更改期间和之后,被指定为单用户节点的 API 节点继续运行(如果仍然连接)。
示例:
ndb_mgm> EXIT SINGLE USER MODE
在单用户模式下运行时,有两种推荐的处理节点故障的方法:
-
方法 1:
-
完成所有单用户模式事务
-
发出
EXIT SINGLE USER MODE
命令 -
重新启动集群的数据节点
-
-
方法 2:
在进入单用户模式之前重新启动存储节点。
25.6.7 添加 NDB 集群数据节点在线
原文:
dev.mysql.com/doc/refman/8.0/en/mysql-cluster-online-add-node.html
25.6.7.1 添加 NDB 集群数据节点在线:一般问题
25.6.7.2 添加 NDB 集群数据节点在线:基本过程
25.6.7.3 添加 NDB 集群数据节点在线:详细示例
本节描述了如何“在线”添加 NDB 集群数据节点,即在不需要完全关闭集群并重新启动的情况下进行该过程。
重要提示
目前,您必须将新数据节点添加到 NDB 集群作为新节点组的一部分。此外,无法在线更改片段副本数(或节点组中的节点数)。
原文:
dev.mysql.com/doc/refman/8.0/en/mysql-cluster-online-add-node-remarks.html
25.6.7.1 添加 NDB 集群数据节点在线:一般问题
本节提供关于在线添加 NDB 集群节点的行为和当前限制的一般信息。
数据重新分布。 添加新节点的在线功能包括通过ALTER TABLE ... REORGANIZE PARTITION
语句重新组织NDBCLUSTER
表数据和索引,使其分布在所有数据节点上,包括新节点。支持内存和磁盘数据表的表重组。此重新分布目前不包括唯一索引(只重新分布有序索引)。
在添加新数据节点之前已存在的NDBCLUSTER
表的重新分布不是自动的,但可以通过mysql或其他 MySQL 客户端应用程序中的简单 SQL 语句来完成。但是,在添加新节点组后创建的表中添加的所有数据和索引会自动分布在所有集群数据节点中,包括作为新节点组的一部分添加的节点。
部分启动。 可以添加一个新节点组,而不是所有新数据节点都已启动。也可以将新节点组添加到降级集群中,即只部分启动的集群,或其中一个或多个数据节点未运行。在后一种情况下,必须有足够的节点运行以使集群可行,然后才能添加新节点组。
对正在进行的操作的影响。 使用 NDB 集群数据的正常 DML 操作不会受到新节点组的创建或添加,或表重组的影响。但是,在表重组期间无法同时执行 DDL,也就是说,在执行ALTER TABLE ... REORGANIZE PARTITION
语句时无法发出其他 DDL 语句。此外,在执行ALTER TABLE ... REORGANIZE PARTITION
(或执行任何其他 DDL 语句)期间,无法重新启动集群数据节点。
故障处理。 在节点组创建和表重组期间数据节点的故障处理如下表所示:
表 25.66 节点组创建和表重组期间数据节点故障处理
在期间发生故障 | 在“旧”数据节点中发生故障 | 在“新”数据节点中发生故障 | 系统故障 |
---|---|---|---|
节点组创建 |
-
如果非主节点失败: 节点组的创建总是向前滚动。
-
如果主节点失败:
-
如果内部提交点已经达到: 节点组的创建将被前滚。
-
如果内部提交点尚未达到。 节点组的创建将被回滚。
-
|
-
如果除主节点之外的节点失败: 节点组的创建总是被前滚。
-
如果主节点失败:
-
如果内部提交点已经达到: 节点组的创建将被前滚。
-
如果内部提交点尚未达到。 节点组的创建将被回滚。
-
|
-
如果执行 CREATE NODEGROUP 已经达到内部提交点: 当重新启动时,集群将包括新的节点组。否则不包括。
-
如果执行 CREATE NODEGROUP 尚未达到内部提交点: 当重新启动时,集群不包括新的节点组。
|
表重新组织 |
---|
-
如果除主节点之外的节点失败: 表重新组织总是被前滚。
-
如果主节点失败:
-
如果内部提交点已经达到: 表重新组织将被前滚。
-
如果内部提交点尚未达到。 表重新组织将被回滚。
-
|
-
如果除主节点之外的节点失败: 表重新组织总是被前滚。
-
如果主节点失败:
-
如果内部提交点已经达到: 表重新组织将被前滚。
-
如果内部提交点尚未达到。 表重新组织将被回滚。
-
|
-
如果执行 ALTER TABLE ... REORGANIZE PARTITION 语句已经达到内部提交点: 当集群重新启动时,属于
table
的数据和索引将使用“新”数据节点进行分发。 -
如果执行 ALTER TABLE ... REORGANIZE PARTITION 语句尚未达到内部提交点: 当集群重新启动时,属于
table
的数据和索引将仅使用“旧”数据节点进行分发。
|
删除节点组。 ndb_mgm客户端支持DROP NODEGROUP
命令,但只有当节点组中的数据节点不包含任何数据时才能删除节点组。由于目前没有办法“清空”特定数据节点或节点组,此命令仅适用于以下两种情况:
-
在ndb_mgm客户端中发出
CREATE NODEGROUP
命令之后,在mysql客户端中发出任何ALTER TABLE ... REORGANIZE PARTITION
语句之前。 -
在使用
DROP TABLE
删除所有NDBCLUSTER
表之后。TRUNCATE TABLE
不适用于此目的,因为数据节点继续存储表定义。
原文:
dev.mysql.com/doc/refman/8.0/en/mysql-cluster-online-add-node-basics.html
25.6.7.2 在线添加 NDB Cluster 数据节点:基本过程
在本节中,我们列出了向 NDB Cluster 添加新数据节点所需的基本步骤。此过程适用于数据节点进程使用 ndbd 或 ndbmtd") 二进制文件。有关更详细的示例,请参见 第 25.6.7.3 节,“在线添加 NDB Cluster 数据节点:详细示例”。
假设您已经有一个运行中的 NDB Cluster,添加在线数据节点需要以下步骤:
-
编辑集群配置
config.ini
文件,添加新的与要添加的节点对应的[ndbd]
部分。如果集群使用多个管理服务器,则需要对所有管理服务器使用的config.ini
文件进行更改。您必须小心,确保在
config.ini
文件中添加的任何新数据节点的节点 ID 不重叠使用现有节点的节点 ID。如果您有使用动态分配的节点 ID 的 API 节点,并且这些 ID 与您要用于新数据节点的节点 ID 匹配,那么可以强制任何此类 API 节点“迁移”,如本过程后面所述。 -
对所有 NDB Cluster 管理服务器执行滚动重启。
重要提示
所有管理服务器必须使用
--reload
或--initial
选项重新启动,以强制读取新配置。 -
对所有现有的 NDB Cluster 数据节点执行滚动重启。在重新启动现有数据节点时,通常不需要(甚至不建议)使用
--initial
。如果您正在使用具有动态分配的 ID 的 API 节点,这些 ID 与您希望分配给新数据节点的任何节点 ID 匹配,那么在重新启动此步骤中的任何数据节点进程之前,必须重新启动所有 API 节点(包括 SQL 节点)。这将导致任何具有先前未明确分配的节点 ID 的 API 节点放弃这些节点 ID 并获取新的节点 ID。
-
对连接到 NDB Cluster 的任何 SQL 或 API 节点执行滚动重启。
-
启动新数据节点。
新数据节点可以以任何顺序启动。只要在所有现有数据节点的滚动重启完成后启动它们,并在进行下一步之前启动它们即可。
-
在 NDB Cluster 管理客户端中执行一个或多个
CREATE NODEGROUP
命令,以创建新数据节点所属的新节点组或节点组。 -
重新分配集群的数据到所有数据节点,包括新节点。通常通过在mysql客户端中为每个
NDBCLUSTER
表发出一个ALTER TABLE ... ALGORITHM=INPLACE, REORGANIZE PARTITION
语句来完成此操作。异常:对于使用
MAX_ROWS
选项创建的表,此语句不起作用;而是使用ALTER TABLE ... ALGORITHM=INPLACE MAX_ROWS=...
来重新组织这些表。您还应该记住,以这种方式使用MAX_ROWS
设置分区数量已被弃用,应该使用PARTITION_BALANCE
代替;有关更多信息,请参见第 15.1.20.12 节,“设置 NDB 注释选项”。注意
这仅适用于在添加新节点组时已经存在的表。在添加新节点组后创建的表中的数据会自动分布;但是,在添加新节点之前存在的表
tbl
中添加的数据直到重新组织该表后才会使用新节点进行分布。 -
ALTER TABLE ... REORGANIZE PARTITION ALGORITHM=INPLACE
重新组织分区但不会回收“旧”节点上释放的空间。您可以通过为每个NDBCLUSTER
表在mysql客户端中发出一个OPTIMIZE TABLE
语句来执行此操作。这适用于内存中
NDB
表的可变宽度列使用的空间。OPTIMIZE TABLE
不支持内存表的固定宽度列;也不支持磁盘数据表。
您可以添加所有所需的节点,然后连续发出几个CREATE NODEGROUP
命令来将新节点组添加到集群中。
原文:
dev.mysql.com/doc/refman/8.0/en/mysql-cluster-online-add-node-example.html
25.6.7.3 在线添加 NDB 集群数据节点:详细示例
在本节中,我们提供了一个详细的示例,说明如何在线添加新的 NDB 集群数据节点,从一个单节点组中有 2 个数据节点的 NDB 集群开始,最终形成一个有 2 个节点组中有 4 个数据节点的集群。
开始配置。 为了说明,我们假设一个最小配置,并且集群使用一个只包含以下信息的config.ini
文件:
[ndbd default]
DataMemory = 100M
IndexMemory = 100M
NoOfReplicas = 2
DataDir = /usr/local/mysql/var/mysql-cluster
[ndbd]
Id = 1
HostName = 198.51.100.1
[ndbd]
Id = 2
HostName = 198.51.100.2
[mgm]
HostName = 198.51.100.10
Id = 10
[api]
Id=20
HostName = 198.51.100.20
[api]
Id=21
HostName = 198.51.100.21
注意
我们在数据节点 ID 和其他节点之间的序列中留下了一个间隔。这样可以更容易地在以后为新添加的数据节点分配尚未使用的��点 ID。
我们还假设您已经使用适当的命令行或my.cnf
选项启动了集群,并且在管理客户端中运行SHOW
会产生类似于这里显示的输出:
-- NDB Cluster -- Management Client --
ndb_mgm> SHOW
Connected to Management Server at: 198.51.100.10:1186
Cluster Configuration
---------------------
[ndbd(NDB)] 2 node(s)
id=1 @198.51.100.1 (8.0.35-ndb-8.0.35, Nodegroup: 0, *)
id=2 @198.51.100.2 (8.0.35-ndb-8.0.35, Nodegroup: 0)
[ndb_mgmd(MGM)] 1 node(s)
id=10 @198.51.100.10 (8.0.35-ndb-8.0.35)
[mysqld(API)] 2 node(s)
id=20 @198.51.100.20 (8.0.35-ndb-8.0.35)
id=21 @198.51.100.21 (8.0.35-ndb-8.0.35)
最后,我们假设集群包含一个单NDBCLUSTER
表,如下所示创建:
USE n;
CREATE TABLE ips (
id BIGINT NOT NULL AUTO_INCREMENT PRIMARY KEY,
country_code CHAR(2) NOT NULL,
type CHAR(4) NOT NULL,
ip_address VARCHAR(15) NOT NULL,
addresses BIGINT UNSIGNED DEFAULT NULL,
date BIGINT UNSIGNED DEFAULT NULL
) ENGINE NDBCLUSTER;
后面显示的内存使用情况和相关信息是在将大约 50000 行插入到这个表后生成的。
注意
在这个示例中,我们展示了单线程的ndbd用于数据节点进程。如果您使用多线程的ndbmtd"),则可以通过在后续步骤中出现的地方用ndbmtd")替换ndbd来应用此示例。
步骤 1:更新配置文件。 在文本编辑器中打开集群全局配置文件,并添加与 2 个新数据节点对应的[ndbd]
部分。(我们给这些数据节点分配 ID 3 和 4,并假设它们分别在地址 198.51.100.3 和 198.51.100.4 的主机上运行。)添加新部分后,config.ini
文件的内容应该如下所示,文件的添加部分以粗体显示:
[ndbd default]
DataMemory = 100M
IndexMemory = 100M
NoOfReplicas = 2
DataDir = /usr/local/mysql/var/mysql-cluster
[ndbd]
Id = 1
HostName = 198.51.100.1
[ndbd]
Id = 2
HostName = 198.51.100.2
[ndbd]
Id = 3
HostName = 198.51.100.3
[ndbd]
Id = 4
HostName = 198.51.100.4
[mgm]
HostName = 198.51.100.10
Id = 10
[api]
Id=20
HostName = 198.51.100.20
[api]
Id=21
HostName = 198.51.100.21
一旦您做出必要的更改,请保存文件。
步骤 2:重新启动管理服务器。 重新启动集群管理服务器需要您发出停止管理服务器和然后再次启动的单独命令,如下所示:
-
使用管理客户端
STOP
命令停止管理服务器,如下所示:ndb_mgm> 10 STOP Node 10 has shut down. Disconnecting to allow Management Server to shutdown $>
-
由于关闭管理服务器会导致管理客户端终止,您必须从系统 shell 中启动管理服务器。为简单起见,我们假设
config.ini
与管理服务器二进制文件位于同一目录中,但实际上,您必须提供正确的配置文件路径。您还必须提供--reload
或--initial
选项,以便管理服务器从文件而不是其配置缓存中读取新配置。如果您的 shell 当前目录也与管理服务器二进制文件所在的目录相同,则可以按照以下方式调用管理服务器:$> ndb_mgmd -f config.ini --reload 2008-12-08 17:29:23 [MgmSrvr] INFO -- NDB Cluster Management Server. 8.0.35-ndb-8.0.35 2008-12-08 17:29:23 [MgmSrvr] INFO -- Reading cluster configuration from 'config.ini'
在重新启动ndb_mgm进程后,在管理客户端中检查SHOW
的输出,您现在应该看到类似于以下内容:
-- NDB Cluster -- Management Client --
ndb_mgm> SHOW
Connected to Management Server at: 198.51.100.10:1186
Cluster Configuration
---------------------
[ndbd(NDB)] 2 node(s)
id=1 @198.51.100.1 (8.0.35-ndb-8.0.35, Nodegroup: 0, *)
id=2 @198.51.100.2 (8.0.35-ndb-8.0.35, Nodegroup: 0)
id=3 (not connected, accepting connect from 198.51.100.3)
id=4 (not connected, accepting connect from 198.51.100.4)
[ndb_mgmd(MGM)] 1 node(s)
id=10 @198.51.100.10 (8.0.35-ndb-8.0.35)
[mysqld(API)] 2 node(s)
id=20 @198.51.100.20 (8.0.35-ndb-8.0.35)
id=21 @198.51.100.21 (8.0.35-ndb-8.0.35)
步骤 3:对现有数据节点执行滚动重启。 可以在集群管理客户端中完全通过使用RESTART
命令来完成此步骤,如下所示:
ndb_mgm> 1 RESTART
Node 1: Node shutdown initiated
Node 1: Node shutdown completed, restarting, no start.
Node 1 is being restarted
ndb_mgm> Node 1: Start initiated (version 8.0.35)
Node 1: Started (version 8.0.35)
ndb_mgm> 2 RESTART
Node 2: Node shutdown initiated
Node 2: Node shutdown completed, restarting, no start.
Node 2 is being restarted
ndb_mgm> Node 2: Start initiated (version 8.0.35)
ndb_mgm> Node 2: Started (version 8.0.35)
重要
在发出每个*
X* RESTART
命令后,请等待管理客户端报告Node *
X*: Started (version ...)
之后 再继续进行任何操作。
通过检查mysql客户端中的ndbinfo.nodes
表,您可以验证所有现有数据节点是否使用更新的配置重新启动。
步骤 4:对所有集群 API 节点执行滚动重启。 关闭并重新启动充当集群中 SQL 节点的每个 MySQL 服务器,使用mysqladmin shutdown后跟mysqld_safe(或另一个启动脚本)。这应该类似于下面显示的内容,其中password
是给定 MySQL 服务器实例的 MySQL root
密码:
$> mysqladmin -uroot -p*password* shutdown
081208 20:19:56 mysqld_safe mysqld from pid file
/usr/local/mysql/var/tonfisk.pid ended
$> mysqld_safe --ndbcluster --ndb-connectstring=198.51.100.10 &
081208 20:20:06 mysqld_safe Logging to '/usr/local/mysql/var/tonfisk.err'.
081208 20:20:06 mysqld_safe Starting mysqld daemon with databases
from /usr/local/mysql/var
当然,确切的输入和输出取决于 MySQL 在系统上的安装方式和位置,以及您选择以何种选项启动它(以及是否在my.cnf
文件中指定了一些或所有这些选项)。
步骤 5:执行新数据节点的初始启动。 在每个新数据节点的主机上的系统 shell 中,按照这里显示的方式启动数据节点,使用--initial
选项:
$> ndbd -c 198.51.100.10 --initial
注意
与重新启动现有数据节点的情况不同,您可以同时启动新数据节点;您无需等待一个启动完成后再启动另一个。
在继续下一步之前,请等待新的数据节点都已启动。一旦新的数据节点启动,您可以在管理客户端SHOW
命令的输出中看到它们尚未属于任何节点组(如此处以粗体显示):
ndb_mgm> SHOW
Connected to Management Server at: 198.51.100.10:1186
Cluster Configuration
---------------------
[ndbd(NDB)] 2 node(s)
id=1 @198.51.100.1 (8.0.35-ndb-8.0.35, Nodegroup: 0, *)
id=2 @198.51.100.2 (8.0.35-ndb-8.0.35, Nodegroup: 0)
id=3 @198.51.100.3 (8.0.35-ndb-8.0.35, no nodegroup)
id=4 @198.51.100.4 (8.0.35-ndb-8.0.35, no nodegroup)
[ndb_mgmd(MGM)] 1 node(s)
id=10 @198.51.100.10 (8.0.35-ndb-8.0.35)
[mysqld(API)] 2 node(s)
id=20 @198.51.100.20 (8.0.35-ndb-8.0.35)
id=21 @198.51.100.21 (8.0.35-ndb-8.0.35)
步骤 6:创建新的节点组。 您可以通过在集群管理客户端中发出CREATE NODEGROUP
命令来执行此操作。此命令以逗号分隔的数据节点的节点 ID 列表作为参数,如下所示:
ndb_mgm> CREATE NODEGROUP 3,4
Nodegroup 1 created
再次执行SHOW
,您可以验证数据节点 3 和 4 已加入新的节点组(再次以粗体显示):
ndb_mgm> SHOW
Connected to Management Server at: 198.51.100.10:1186
Cluster Configuration
---------------------
[ndbd(NDB)] 2 node(s)
id=1 @198.51.100.1 (8.0.35-ndb-8.0.35, Nodegroup: 0, *)
id=2 @198.51.100.2 (8.0.35-ndb-8.0.35, Nodegroup: 0)
id=3 @198.51.100.3 (8.0.35-ndb-8.0.35, Nodegroup: 1)
id=4 @198.51.100.4 (8.0.35-ndb-8.0.35, Nodegroup: 1)
[ndb_mgmd(MGM)] 1 node(s)
id=10 @198.51.100.10 (8.0.35-ndb-8.0.35)
[mysqld(API)] 2 node(s)
id=20 @198.51.100.20 (8.0.35-ndb-8.0.35)
id=21 @198.51.100.21 (8.0.35-ndb-8.0.35)
步骤 7:重新分配集群数据。 创建节点组时,现有数据和索引不会自动分配给新节点组的数据节点,您可以通过在管理客户端中发出适当的REPORT
命令来查看:
ndb_mgm> ALL REPORT MEMORY
Node 1: Data usage is 5%(177 32K pages of total 3200)
Node 1: Index usage is 0%(108 8K pages of total 12832)
Node 2: Data usage is 5%(177 32K pages of total 3200)
Node 2: Index usage is 0%(108 8K pages of total 12832)
Node 3: Data usage is 0%(0 32K pages of total 3200)
Node 3: Index usage is 0%(0 8K pages of total 12832)
Node 4: Data usage is 0%(0 32K pages of total 3200)
Node 4: Index usage is 0%(0 8K pages of total 12832)
通过使用ndb_desc的-p
选项,使输出包含分区信息,您可以看到该表仍然仅使用 2 个分区(在输出的Per partition info
部分中以粗体显示):
$> ndb_desc -c 198.51.100.10 -d n ips -p
-- ips --
Version: 1
Fragment type: 9
K Value: 6
Min load factor: 78
Max load factor: 80
Temporary table: no
Number of attributes: 6
Number of primary keys: 1
Length of frm data: 340
Row Checksum: 1
Row GCI: 1
SingleUserMode: 0
ForceVarPart: 1
FragmentCount: 2
TableStatus: Retrieved
-- Attributes --
id Bigint PRIMARY KEY DISTRIBUTION KEY AT=FIXED ST=MEMORY AUTO_INCR
country_code Char(2;latin1_swedish_ci) NOT NULL AT=FIXED ST=MEMORY
type Char(4;latin1_swedish_ci) NOT NULL AT=FIXED ST=MEMORY
ip_address Varchar(15;latin1_swedish_ci) NOT NULL AT=SHORT_VAR ST=MEMORY
addresses Bigunsigned NULL AT=FIXED ST=MEMORY
date Bigunsigned NULL AT=FIXED ST=MEMORY
-- Indexes --
PRIMARY KEY(id) - UniqueHashIndex
PRIMARY(id) - OrderedIndex
-- Per partition info --
Partition Row count Commit count Frag fixed memory Frag varsized memory
0 26086 26086 1572864 557056
1 26329 26329 1605632 557056
您可以通过为每个NDB
表执行ALTER TABLE ... ALGORITHM=INPLACE, REORGANIZE PARTITION
语句在mysql客户端中使数据重新分布到所有数据节点。
重要提示
ALTER TABLE ... ALGORITHM=INPLACE, REORGANIZE PARTITION
不适用于使用MAX_ROWS
选项创建的表。相反,使用ALTER TABLE ... ALGORITHM=INPLACE, MAX_ROWS=...
来重新组织这些表。
请注意,使用MAX_ROWS
设置每个表的分区数已被弃用,您应该使用PARTITION_BALANCE
代替;有关更多信息,请参阅 Section 15.1.20.12, “Setting NDB Comment Options”。
执行语句ALTER TABLE ips ALGORITHM=INPLACE, REORGANIZE PARTITION
后,您可以使用ndb_desc查看该表的数据现在使用 4 个分区存储,如下所示(相关部分以粗体显示):
$> ndb_desc -c 198.51.100.10 -d n ips -p
-- ips --
Version: 16777217
Fragment type: 9
K Value: 6
Min load factor: 78
Max load factor: 80
Temporary table: no
Number of attributes: 6
Number of primary keys: 1
Length of frm data: 341
Row Checksum: 1
Row GCI: 1
SingleUserMode: 0
ForceVarPart: 1
FragmentCount: 4
TableStatus: Retrieved
-- Attributes --
id Bigint PRIMARY KEY DISTRIBUTION KEY AT=FIXED ST=MEMORY AUTO_INCR
country_code Char(2;latin1_swedish_ci) NOT NULL AT=FIXED ST=MEMORY
type Char(4;latin1_swedish_ci) NOT NULL AT=FIXED ST=MEMORY
ip_address Varchar(15;latin1_swedish_ci) NOT NULL AT=SHORT_VAR ST=MEMORY
addresses Bigunsigned NULL AT=FIXED ST=MEMORY
date Bigunsigned NULL AT=FIXED ST=MEMORY
-- Indexes --
PRIMARY KEY(id) - UniqueHashIndex
PRIMARY(id) - OrderedIndex
-- Per partition info --
Partition Row count Commit count Frag fixed memory Frag varsized memory
0 12981 52296 1572864 557056
1 13236 52515 1605632 557056
2 13105 13105 819200 294912
3 13093 13093 819200 294912
注意
通常,ALTER TABLE *
table_name* [ALGORITHM=INPLACE,] REORGANIZE PARTITION
用于具有显式分区的表创建新的分区方案时会使用分区标识符列表和一组分区定义。在这种情况下,将数据重新分布到新的 NDB Cluster 节点组是一个例外;在这种情况下使用时,REORGANIZE PARTITION
后不跟随其他关键字或标识符。
更多信息,请参见第 15.1.9 节,“ALTER TABLE Statement”。
另外,对于每个表,ALTER TABLE
语句后应该跟着一个OPTIMIZE TABLE
来回收浪费的空间。您可以通过以下查询在信息模式TABLES
表中获取所有NDBCLUSTER
表的列表:
SELECT TABLE_SCHEMA, TABLE_NAME
FROM INFORMATION_SCHEMA.TABLES
WHERE ENGINE = 'NDBCLUSTER';
注意
对于 NDB Cluster 表,INFORMATION_SCHEMA.TABLES.ENGINE
值始终为NDBCLUSTER
,无论用于创建表的CREATE TABLE
语句(或用于将现有表从不同存储引擎转换为 NDB Cluster 的ALTER TABLE
语句)中是否在ENGINE
选项中使用了NDB
或NDBCLUSTER
。
在执行这些语句后,您可以在ALL REPORT MEMORY
的输出中看到数据和索引现在在所有集群数据节点之间重新分布,如下所示:
ndb_mgm> ALL REPORT MEMORY
Node 1: Data usage is 5%(176 32K pages of total 3200)
Node 1: Index usage is 0%(76 8K pages of total 12832)
Node 2: Data usage is 5%(176 32K pages of total 3200)
Node 2: Index usage is 0%(76 8K pages of total 12832)
Node 3: Data usage is 2%(80 32K pages of total 3200)
Node 3: Index usage is 0%(51 8K pages of total 12832)
Node 4: Data usage is 2%(80 32K pages of total 3200)
Node 4: Index usage is 0%(50 8K pages of total 12832)
注意
由于在NDBCLUSTER
表上只能执行一个 DDL 操作,您必须等待每个ALTER TABLE ... REORGANIZE PARTITION
语句完成后再发出下一个。
对于在添加新数据节点之后创建的NDBCLUSTER
表,不需要发出ALTER TABLE ... REORGANIZE PARTITION
语句;添加到这些表中的数据会自动分布在所有数据节点之间。然而,在添加新节点之前存在的NDBCLUSTER
表中,无论是现有数据还是新数据都不会使用新节点进行分布,直到使用ALTER TABLE ... REORGANIZE PARTITION
重新组织这些表。
另一种过程,无需滚动重启。 可以通过在首次启动集群时配置额外的数据节点(但不启动它们)来避免需要滚动重启的需要。我们假设,与之前一样,您希望从两个数据节点(节点 1 和 2)开始,然后通过添加由节点 3 和 4 组成的第二个节点组来将集群扩展到四个数据节点:
[ndbd default]
DataMemory = 100M
IndexMemory = 100M
NoOfReplicas = 2
DataDir = /usr/local/mysql/var/mysql-cluster
[ndbd]
Id = 1
HostName = 198.51.100.1
[ndbd]
Id = 2
HostName = 198.51.100.2
[ndbd]
Id = 3
HostName = 198.51.100.3
Nodegroup = 65536
[ndbd]
Id = 4
HostName = 198.51.100.4
Nodegroup = 65536
[mgm]
HostName = 198.51.100.10
Id = 10
[api]
Id=20
HostName = 198.51.100.20
[api]
Id=21
HostName = 198.51.100.21
要稍后上线的数据节点(节点 3 和 4)可以配置为NodeGroup = 65536
,在这种情况下,节点 1 和 2 可以按照这里所示启动:
$> ndbd -c 198.51.100.10 --initial
配置为NodeGroup = 65536
的数据节点被管理服务器视为在等待由StartNoNodeGroupTimeout
数据节点配置参数设置确定的一段时间后,使用--nowait-nodes=3,4
启动节点 1 和 2。默认情况下,这是 15 秒(15000 毫秒)。
注意
StartNoNodegroupTimeout
必须对集群中的所有数据节点保持一致;因此,您应该始终在config.ini
文件的[ndbd default]
部分中设置它,而不是为单独的数据节点设置。
当您准备添加第二个节点组时,只需执行以下额外步骤:
-
启动数据节点 3 和 4,为每个新节点调用一次数据节点进程:
$> ndbd -c 198.51.100.10 --initial
-
在管理客户端中发出适当的
CREATE NODEGROUP
命令:ndb_mgm> CREATE NODEGROUP 3,4
-
在mysql客户端中,为每个现有的
NDBCLUSTER
表发出ALTER TABLE ... REORGANIZE PARTITION
和OPTIMIZE TABLE
语句。(正如本节其他地方所述,现有的 NDB Cluster 表在执行此操作之前无法使用新节点进行数据分发。)
25.6.8 NDB 集群在线备份
原文:
dev.mysql.com/doc/refman/8.0/en/mysql-cluster-backup.html
25.6.8.1 NDB 集群备份概念
25.6.8.2 使用 NDB 集群管理客户端创建备份
25.6.8.3 NDB 集群备份配置
25.6.8.4 NDB 集群备份故障排除
25.6.8.5 使用并行数据节点进行 NDB 备份
接下来的几节描述了如何准备并创建 NDB 集群备份,使用专门用于此目的的 ndb_mgm 管理客户端的功能。为了区分这种类型的备份与使用 mysqldump 创建的备份,我们有时将其称为“本地” NDB 集群备份。(有关使用 mysqldump 创建备份的信息,请参见 第 6.5.4 节,“mysqldump — 数据库备份程序”。)NDB 集群备份的恢复使用 NDB 集群分发提供的 ndb_restore 实用程序完成;有关 ndb_restore 及其在恢复 NDB 集群备份中的使用的信息,请参见 第 25.5.23 节,“ndb_restore — 恢复 NDB 集群备份”。
NDB 8.0 可以使用多个 LDM 来创建备份,以实现数据节点的并行性。参见 第 25.6.8.5 节,“使用并行数据节点进行 NDB 备份”。
原文:
dev.mysql.com/doc/refman/8.0/en/mysql-cluster-backup-concepts.html
25.6.8.1 NDB Cluster 备份概念
备份是数据库在特定时间的快照。备份由三个主要部分组成:
-
元数据。 所有数据库表的名称和定义
-
表记录。 实际存储在数据库表中的数据,在备份时
-
事务日志。 顺序记录了数据是如何以及何时存储在数据库中的
每个部分都保存在参与备份的所有节点上。在备份过程中,每个节点将这三个部分保存到磁盘上的三个文件中:
-
BACKUP-*
backup_id*.*
node_id*.ctl
包含控制信息和元数据的控制文件。每个节点将相同的表定义(对于集群中的所有表)保存到自己版本的此文件中。
-
BACKUP-*
backup_id*-0.*
node_id*.data
包含表记录的数据文件,按片段保存。也就是说,在备份过程中,不同的节点保存不同的片段。每个节点保存的文件以表明记录所属表的标题开头。在记录列表之后,有一个包含所有记录校验和的页脚。
-
BACKUP-*
backup_id*.*
node_id*.log
包含已提交事务记录的日志文件。只有备份中存储的表上的事务才会存储在日志中。参与备份的节点保存不同的记录,因为不同的节点托管不同的数据库片段。
在刚才显示的列表中,backup_id
代表备份标识符,node_id
是创建文件的节点的唯一标识符。
备份文件的位置由BackupDataDir
参数确定。
原文:
dev.mysql.com/doc/refman/8.0/en/mysql-cluster-backup-using-management-client.html
25.6.8.2 使用 NDB 集群管理客户端创建备份
在开始备份之前,请确保集群已正确配置以执行备份。(参见第 25.6.8.3 节,“NDB 集群备份配置”.)
START BACKUP
命令用于创建备份,其语法如下所示:
START BACKUP [*backup_id*]
[*encryption_option*]
[*wait_option*]
[*snapshot_option*]
*encryption_option*:
ENCRYPT [PASSWORD=*password*]
*password*:
{'*password_string*' | "*password_string*"}
*wait_option*:
WAIT {STARTED | COMPLETED} | NOWAIT
*snapshot_option*:
SNAPSHOTSTART | SNAPSHOTEND
连续备份会自动按顺序识别,因此backup_id
,一个大于或等于 1 的整数,是可选的;如果省略,则使用下一个可用值。如果使用现有的backup_id
值,则备份将失败,并显示错误消息备份失败:文件已存在。如果使用backup_id
,则必须紧跟在START BACKUP
关键字之后,在使用任何其他选项之前。
在 NDB 8.0.22 及更高版本中,START BACKUP
支持使用 ENCRYPT PASSWORD=*
password*
创建加密备份。password
必须满足以下所有要求:
-
使用除
!
、'
、"
、$
、%
、\
和^
之外的任何可打印 ASCII 字符。 -
长度不超过 256 个字符
-
用单引号或双引号括起来
当使用 ENCRYPT PASSWORD='*
password*'
时,由每个数据节点写入的备份数据记录和日志文件会使用从用户提供的password
和随机生成的盐派生的密钥进行加密,使用 PBKDF2-SHA256 算法的密钥派生函数(KDF)生成用于该文件的对称加密密钥。此函数的形式如下所示:
key = KDF(*random_salt*, *password*)
然后使用生成的密钥使用 AES 256 CBC 内联加密备份数据,并对备份文件集(使用生成的密钥)使用对称加密。
注意
NDB 集群永远不会保存用户提供的密码或生成的加密密钥。
从 NDB 8.0.24 开始,可以从encryption_option
中省略 PASSWORD
选项。在这种情况下,管理客户端会提示用户输入密码。
可以使用 PASSWORD
设置空密码(''
或 ""
),但不建议这样做。
可以使用以下任一命令解密加密备份:
-
ndb_restore
--decrypt
--backup-password=*
password*
-
ndbxfrm
--decrypt-password=*
password*
input_file
output_file
-
ndb_print_backup_file
-P
password
file_name
NDB 8.0.24 及更高版本支持以下附加命令:
-
ndb_restore
--decrypt
--backup-password-from-stdin
-
ndbxfrm
--decrypt-password-from-stdin
input_file
output_file
-
ndb_print_backup_file
--backup-password=*
password*
file_name
-
ndb_print_backup_file
--backup-password-from-stdin
file_name
-
ndb_mgm
--backup-password-from-stdin
--execute "START BACKUP ..."
查看这些程序的描述以获取更多信息,例如可能需要的其他选项。
wait_option
可用于确定在发出 START BACKUP
命令后何时将控制权返回给管理客户端,如下列表所示:
-
如果指定了
NOWAIT
,管理客户端会立即显示提示,如下所示:ndb_mgm> START BACKUP NOWAIT ndb_mgm>
在这种情况下,管理客户端可以在打印备份过程的进度信息的同时使用。
-
使用
WAIT STARTED
,管理客户端会等到备份开始后再将控制权返回给用户,如下所示:ndb_mgm> START BACKUP WAIT STARTED Waiting for started, this may take several minutes Node 2: Backup 3 started from node 1 ndb_mgm>
-
WAIT COMPLETED
导致管理客户端在备份过程完成之前等待,然后将控制权返回给用户。
WAIT COMPLETED
是默认选项。
snapshot_option
可用于确定备份是否与发出START BACKUP
命令时的集群状态匹配,或者与备份完成时的状态匹配。SNAPSHOTSTART
导致备份与备份开始时的集群状态匹配;SNAPSHOTEND
导致备份反映备份完成时的集群状态。SNAPSHOTEND
是默认值,并与以前的 NDB Cluster 版本中找到的行为相匹配。
注意
如果在START BACKUP
中使用SNAPSHOTSTART
选项,并且启用了CompressedBackup
参数,则只有数据和控制文件会被压缩,日志文件不会被压缩。
如果同时使用wait_option
和snapshot_option
,它们可以以任何顺序指定。例如,假设不存在 ID 为 4 的现有备份,则以下所有命令都是有效的:
START BACKUP WAIT STARTED SNAPSHOTSTART
START BACKUP SNAPSHOTSTART WAIT STARTED
START BACKUP 4 WAIT COMPLETED SNAPSHOTSTART
START BACKUP SNAPSHOTEND WAIT COMPLETED
START BACKUP 4 NOWAIT SNAPSHOTSTART
创建备份的过程包括以下步骤:
-
启动管理客户端(ndb_mgm),如果尚未运行。
-
执行
START BACKUP
命令。这将产生几行输出,指示备份的进度,如下所示:ndb_mgm> START BACKUP Waiting for completed, this may take several minutes Node 2: Backup 1 started from node 1 Node 2: Backup 1 started from node 1 completed StartGCP: 177 StopGCP: 180 #Records: 7362 #LogRecords: 0 Data: 453648 bytes Log: 0 bytes ndb_mgm>
-
当备份开始时,管理客户端显示此消息:
Backup *backup_id* started from node *node_id*
backup_id
是此特定备份的唯一标识符。如果未配置其他方式保存此标识符,则将其保存在集群日志中。node_id
是协调备份与数据节点的管理服务器的标识符。在备份过程的这一点上,集群已经接收并处理了备份请求。这并不意味着备份已经完成。这种情况的示例如下:Node 2: Backup 1 started from node 1
-
管理客户端通过类似于这样的消息指示备份已经开始:
Backup *backup_id* started from node *node_id* completed
与指示备份已经开始的通知一样,
backup_id
是此特定备份的唯一标识符,而node_id
是协调备份与数据节点的管理服务器的节点 ID。此输出还附带其他信息,包括相关的全局检查点、备份的记录数以及数据的大小,如下所示:Node 2: Backup 1 started from node 1 completed StartGCP: 177 StopGCP: 180 #Records: 7362 #LogRecords: 0 Data: 453648 bytes Log: 0 bytes
也可以通过在系统 shell 中调用ndb_mgm并使用-e
或--execute
选项来执行备份,如下例所示:
$> ndb_mgm -e "START BACKUP 6 WAIT COMPLETED SNAPSHOTSTART"
在这种方式下使用START BACKUP
时,必须指定备份 ID。
集群备份默认创建在每个数据节点的BACKUP
子目录中。这可以通过DataDir
中的一个或多个数据节点,或者在config.ini
文件中使用BackupDataDir
配置参数来覆盖。为具有给定backup_id
的备份创建的备份文件存储在备份目录中名为BACKUP-*backup_id*
的子目录中。
取消备份。 要取消或中止已经进行中的备份,请执行以下步骤:
-
启动管理客户端。
-
执行此命令:
ndb_mgm> ABORT BACKUP *backup_id*
数字
backup_id
是在备份启动时管理客户端的响应中包含的备份标识符(在消息Backup *backup_id* started from node *management_node_id*
中)。 -
管理客户端使用
Abort of backup *backup_id* ordered
确认中止请求。注意
此时,管理客户端尚未收到集群数据节点对此请求的响应,备份实际上尚未被中止。
-
备份被中止后,管理客户端以类似于以下所示的方式报告此事实:
Node 1: Backup 3 started from 5 has been aborted. Error: 1321 - Backup aborted by user request: Permanent error: User defined error Node 3: Backup 3 started from 5 has been aborted. Error: 1323 - 1323: Permanent error: Internal error Node 2: Backup 3 started from 5 has been aborted. Error: 1323 - 1323: Permanent error: Internal error Node 4: Backup 3 started from 5 has been aborted. Error: 1323 - 1323: Permanent error: Internal error
在此示例中,我们展示了一个具有 4 个数据节点的集群的示例输出,要中止的备份的序列号为
3
,并且集群管理客户端连接的管理节点具有节点 ID5
。完成中止备份的第一个节点报告中止的原因是由于用户的请求。(其余节点报告备份由于未指定的内部错误而中止。)注意
不能保证集群节点以任何特定顺序响应
ABORT BACKUP
命令。备份 *backup_id* 从节点 *management_node_id* 开始已中止
消息意味着备份已终止,并且与此备份相关的所有文件已从集群文件系统中删除。
也可以使用以下命令从系统 shell 中中止正在进行的备份:
$> ndb_mgm -e "ABORT BACKUP *backup_id*"
注意
如果在发出ABORT BACKUP
时没有正在运行 ID 为backup_id
的备份,管理客户端不会做出响应,也不会在集群日志中指示发送了无效的中止命令。
原文:
dev.mysql.com/doc/refman/8.0/en/mysql-cluster-backup-configuration.html
25.6.8.3 NDB 集群备份配置
备份需要五个配置参数:
-
备份数据缓冲区大小
在数据写入磁盘之前用于缓冲数据的内存量。
-
备份日志缓冲区大小
在将日志记录写入磁盘之前用于缓冲日志记录的内存量。
-
备份内存
为备份在数据节点中分配的总内存。这应该是为备份数据缓冲区和备份日志缓冲区分配的内存总和。
-
备份写入大小
写入磁盘的块的默认大小。这适用于备份数据缓冲区和备份日志缓冲区。
-
备份最大写入大小
写入磁盘的块的最大大小。这适用于备份数据缓冲区和备份日志缓冲区。
此外,压缩备份
使NDB
在创建和写入备份文件时使用压缩。
关于这些参数的更详细信息可以在备份参数中找到。
您还可以使用备份数据目录
配置参数为备份文件设置位置。默认值为文件系统路径``/BACKUP/BACKUP-*
backup_id*
。
在 NDB 8.0.22 及更高版本中,您可以通过启用要求加密备份
来强制备份文件加密。当此参数设置为 1 时,备份不能在未指定ENCRYPT PASSWORD=*
password*
作为START BACKUP
命令的一部分时创建。
原文:
dev.mysql.com/doc/refman/8.0/en/mysql-cluster-backup-troubleshooting.html
25.6.8.4 NDB 集群备份故障排除
如果在发出备份请求时返回错误代码,最有可能的原因是内存或磁盘空间不足。你应该检查备份所需的内存是否足够。
重要提示
如果你已经设置了BackupDataBufferSize
和BackupLogBufferSize
,它们的总和大于 4MB,那么你还必须设置BackupMemory
。
你还应确保备份目标的硬盘分区有足够的空间。
NDB
不支持可重复读,这可能会导致恢复过程中出现问题。尽管备份过程是“热”进行的,但从备份中恢复 NDB 集群并非完全“热”过程。这是因为在恢复过程中,正在运行的事务从恢复的数据中获得不可重复读。这意味着在恢复过程中数据的状态是不一致的。
原文:
dev.mysql.com/doc/refman/8.0/en/mysql-cluster-backup-parallel-data-nodes.html
25.6.8.5 使用并行数据节点进行 NDB 备份
在 NDB 8.0 中,可以使用多个本地数据管理器(LDM)并行在数据节点上进行备份。为了使其工作,集群中的所有数据节点必须使用多个 LDM,并且每个数据节点必须使用相同数量的 LDM。这意味着所有数据节点必须运行ndbmtd(ndbd是单线程的,因此始终只有一个 LDM)并且在进行备份之前必须配置为使用多个 LDM;ndbmtd默认以单线程模式运行。您可以通过选择多线程数据节点配置参数MaxNoOfExecutionThreads
或ThreadConfig
的适当设置来使它们使用多个 LDM。请记住,更改这些参数需要重新启动集群;这可以是滚动重启。此外,每个数据节点的EnableMultithreadedBackup
参数必须设置为 1(这是默认值)。
根据 LDM 的数量和其他因素,您可能还需要增加NoOfFragmentLogParts
。如果您正在使用大型磁盘数据表,您可能还需要增加DiskPageBufferMemory
。与单线程备份一样,您可能还希望或需要调整BackupDataBufferSize
、BackupMemory
和其他与备份相关的配置参数(参见备份参数)。
一旦所有数据节点都使用多个 LDM,您可以使用 NDB 管理客户端中的START BACKUP
命令进行并行备份,就像数据节点正在运行ndbd(或单线程模式下的ndbmtd"))一样;不需要额外或特殊的语法,您可以根据需要或愿望指定备份 ID、等待选项或快照选项的任意组合。
使用多个 LDM 进行备份会在每个数据节点的目录BACKUP/BACKUP-*
backup_id*/
(该目录位于BackupDataDir
下)下创建子目录,这些子目录分别命名为BACKUP-*
backup_id*-PART-1-OF-*
N*/
、BACKUP-*
backup_id*-PART-2-OF-*
N*/
,依此类推,直到BACKUP-*
backup_id*-PART-*
N*-OF-*
N*/
,其中backup_id
是此备份使用的备份 ID,N
是每个数据节点的 LDM 数。每个子目录包含常规备份文件BACKUP-*
backup_id*-0.*
node_id*.Data
、BACKUP-*
backup_id*.*
node_id*.ctl
和BACKUP-backup_id.node_id.log
,其中node_id
是此数据节点的节点 ID。
ndb_restore会自动检查刚才描述的子目录是否存在;如果找到它们,它将尝试并行恢复备份。有关使用多个 LDM 进行备份的恢复信息,请参阅第 25.5.23.3 节,“从并行备份中恢复”。
要强制创建一个单线程备份,以便可以轻松地由 NDB 8.0 之前的版本的ndb_restore导入,您可以为所有数据节点设置EnableMultithreadedBackup = 0
(您可以通过在config.ini
全局配置文件的[ndbd default]
部分中设置该参数来执行此操作)。还可以将并行备份恢复到运行较旧版本NDB
的集群中。有关更多信息,请参阅第 25.5.23.1.1 节,“将 NDB 备份恢复到较旧版本的 NDB 集群”。
25.6.9 将数据导入到 MySQL 集群
原文:
dev.mysql.com/doc/refman/8.0/en/mysql-cluster-importing-data.html
在设置新的 NDB 集群实例时,通常需要从现有 NDB 集群、MySQL 实例或其他来源导入数据。这些数据通常以以下一种或多种格式提供:
-
由mysqldump或mysqlpump生成的 SQL 转储文件。可以使用mysql客户端导入此文件,如本节后面所示。
-
由mysqldump或其他导出程序生成的 CSV 文件。这些文件可以使用mysql客户端中的
LOAD DATA INFILE
导入到NDB
中,或者使用 NDB 集群分发的ndb_import实用程序。有关后者的更多信息,请参见第 25.5.13 节,“ndb_import — 将 CSV 数据导入 NDB”。 -
使用
START BACKUP
在NDB
管理客户端中生成的本机NDB
备份。要导入本机备份,必须使用作为 NDB 集群一部分提供的ndb_restore程序。有关使用此程序的更多信息,请参见第 25.5.23 节,“ndb_restore — 恢复 NDB 集群备份”。
从 SQL 文件导入数据时,通常不需要强制执行事务或外键,并临时禁用这些功能可以极大加快导入过程。可以使用mysql客户端来执行此操作,可以从客户端会话中执行,也可以在命令行上调用。在mysql客户端会话中,可以使用以下 SQL 语句执行导入:
SET ndb_use_transactions=0;
SET foreign_key_checks=0;
source *path/to/dumpfile*;
SET ndb_use_transactions=1;
SET foreign_key_checks=1;
以这种方式执行导入时,必须在执行mysql客户端的source
命令后再次启用ndb_use_transaction
和foreign_key_checks
。否则,同一会话中后续语句可能也会在不执行事务或外键约束的情况下执行,这可能导致数据不一致。
从系统 shell 中,您可以使用 mysql 客户端的 --init-command
选项,在禁用事务和外键强制执行的情况下导入 SQL 文件,就像这样:
$> mysql --init-command='SET ndb_use_transactions=0; SET foreign_key_checks=0' < *path/to/dumpfile*
还可以将数据加载到一个 InnoDB
表中,然后使用 ALTER TABLE ... ENGINE NDB) 将其转换为使用 NDB 存储引擎。特别是对于许多表,您应该考虑到这可能需要多次操作;此外,如果使用外键,您必须仔细注意 ALTER TABLE
语句的顺序,因为外键在使用不同 MySQL 存储引擎的表之间不起作用。
您应该意识到,在本节中之前描述的方法并不针对非常大的数据集或大型事务进行优化。如果一个应用程序确实需要大型事务或许多并发事务作为正常操作的一部分,您可能希望增加 MaxNoOfConcurrentOperations
数据节点配置参数的值,这将保留更多内存以允许数据节点在其事务协调器意外停止时接管事务。
在执行 NDB Cluster 表的批量 DELETE
或 UPDATE
操作时,您可能也希望这样做。如果可能的话,尝试让应用程序以块的方式执行这些操作,例如,通过在这些语句中添加 LIMIT
。
如果数据导入操作由于任何原因未能成功完成,您应该准备好执行任何必要的清理工作,包括可能一个或多个 DROP TABLE
语句,DROP DATABASE
语句,或两者都有。如果不这样做,可能会导致数据库处于不一致状态。
25.6.10 NDB Cluster 的 MySQL 服务器用法
原文:
dev.mysql.com/doc/refman/8.0/en/mysql-cluster-mysqld.html
mysqld是传统的 MySQL 服务器进程。要与 NDB Cluster 一起使用,mysqld需要构建支持NDB
存储引擎,就像在dev.mysql.com/downloads/
提供的预编译二进制文件中一样。如果您从源代码构建 MySQL,您必须使用-DWITH_NDB=1
或(已弃用)-DWITH_NDBCLUSTER=1
选项调用CMake以包含对NDB
的支持。
有关从源代码编译 NDB Cluster 的更多信息,请参阅 Section 25.3.1.4, “Building NDB Cluster from Source on Linux”,以及 Section 25.3.2.2, “Compiling and Installing NDB Cluster from Source on Windows”。
(有关mysqld选项和变量的信息,除了本节讨论的内容外,与 NDB Cluster 相关的内容,请参阅 Section 25.4.3.9, “MySQL Server Options and Variables for NDB Cluster”。)
如果mysqld二进制文件已经构建支持集群,NDBCLUSTER
存储引擎仍然默认禁用。您可以使用以下两种选项之一来启用此引擎:
-
在启动mysqld时,在命令行上使用
--ndbcluster
作为启动选项。 -
在您的
my.cnf
文件的[mysqld]
部分中插入一行包含ndbcluster
。
通过在 MySQL Monitor(mysql)中发出 SHOW ENGINES
语句,您可以轻松验证服务器是否启用了 NDBCLUSTER
存储引擎。您应该在 NDBCLUSTER
的行中看到 Support
值为 YES
。如果在此行中看到 NO
或者输出中没有显示这样的行,则表示您没有运行启用了 NDB
的 MySQL 版本。如果在此行中看到 DISABLED
,则需要按照刚才描述的两种方式之一启用它。
要读取集群配置数据,MySQL 服务器至少需要三个信息:
-
MySQL 服务器自身的集群节点 ID
-
管理服务器的主机名或 IP 地址
-
它可以连接到管理服务器的 TCP/IP 端口号
节点 ID 可以动态分配,因此不一定需要显式指定。
mysqld 参数 ndb-connectstring
用于在启动 mysqld 时的命令行或在 my.cnf
中指定连接字符串。连接字符串包含管理服务器的主机名或 IP 地址,以及其使用的 TCP/IP 端口。
在下面的示例中,ndb_mgmd.mysql.com
是管理服务器所在的主机,管理服务器在端口 1186 上监听集群消息:
$> mysqld --ndbcluster --ndb-connectstring=ndb_mgmd.mysql.com:1186
更多关于连接字符串的信息,请参阅 Section 25.4.3.3, “NDB Cluster Connection Strings”。
有了这些信息,MySQL 服务器可以作为集群中的完整参与者。在这种方式下运行的 mysqld 进程通常被称为 SQL 节点。它完全了解所有集群数据节点及其状态,并与所有数据节点建立连接。在这种情况下,它能够使用任何数据节点作为事务协调器,并读取和更新节点数据。
您可以在 mysql 客户端中使用 SHOW PROCESSLIST
查看 MySQL 服务器是否连接到集群。如果 MySQL 服务器连接到集群,并且您具有 PROCESS
权限,则输出的第一行如下所示:
mysql> SHOW PROCESSLIST \G
*************************** 1\. row ***************************
Id: 1
User: system user
Host:
db:
Command: Daemon
Time: 1
State: Waiting for event from ndbcluster
Info: NULL
重要提示
要参与 NDB Cluster,必须使用both选项--ndbcluster
和--ndb-connectstring
(或它们在my.cnf
中的等效选项)启动mysqld进程。如果只使用--ndbcluster
选项启动mysqld,或者无法联系到集群,就无法使用NDB
表,也无法创建任何新表,无论存储引擎如何。后一限制是一项安全措施,旨在防止在 SQL 节点未连接到集群时创建与NDB
表同名的表。如果希望在mysqld进程未参与 NDB Cluster 时使用不同的存储引擎创建表,必须在不使用--ndbcluster
选项的情况下重新启动服务器。
25.6.11 NDB Cluster 磁盘数据表
原文:
dev.mysql.com/doc/refman/8.0/en/mysql-cluster-disk-data.html
25.6.11.1 NDB Cluster 磁盘数据对象
25.6.11.2 NDB Cluster 磁盘数据存储要求
NDB Cluster 支持将NDB
表的非索引列存储在磁盘上,而不是在 RAM 中。列数据和日志元数据保存在数据文件和撤销日志文件中,概念化为表空间和日志文件组,如下一节所述—参见第 25.6.11.1 节,“NDB Cluster 磁盘数据对象”。
NDB Cluster 磁盘数据性能可能受多个配置参数的影响。有关这些参数及其影响的信息,请参见磁盘数据配置参数,以及磁盘数据和 GCP 停止错误。
当使用单独的磁盘存储磁盘数据文件时,您还应将DiskDataUsingSameDisk
数据节点配置参数设置为false
。
参见磁盘数据文件系统参数。
NDB 8.0 在使用固态硬盘的磁盘数据表时提供了改进的支持,特别是使用 NVMe 的硬盘。有关更多信息,请参阅以下文档:
-
磁盘数据延迟参数
-
第 25.6.16.31 节,“ndbinfo diskstat 表”
-
第 25.6.16.32 节,“ndbinfo diskstats_1sec 表”
-
第 25.6.16.49 节,“ndbinfo pgman_time_track_stats 表”
译文:
dev.mysql.com/doc/refman/8.0/en/mysql-cluster-disk-data-objects.html
25.6.11.1 NDB Cluster 磁盘数据对象
NDB Cluster 磁盘数据存储是使用以下对象实现的:
-
表空间:作为其他磁盘数据对象的容器。一个表空间包含一个或多个数据文件和一个或多个撤销日志文件组。
-
数据文件:存储列数据。数据文件直接分配给表空间。
-
撤销日志文件:包含用于回滚事务所需的撤销信息。分配给一个撤销日志文件组。
-
日志文件组:包含一个或多个撤销日志文件。分配给一个表空间。
撤销日志文件和数据文件是每个数据节点文件系统中的实际文件;默认情况下,它们放置在ndb_*
node_id*_fs
中,在 NDB Cluster config.ini
文件中指定的DataDir
中,其中node_id
是数据节点的节点 ID。可以通过在创建撤销日志或数据文件时指定绝对或相对路径的方式将其放置在其他位置。创建这些文件的语句稍后在本节中显示。
撤销日志文件仅用于磁盘数据表,并且不需要或不用于仅存储在内存中的NDB
表。
NDB Cluster 表空间和日志文件组并非实现为文件。
尽管并非所有磁盘数据对象都实现为文件,但它们都共享相同的命名空间。这意味着每个磁盘数据对象必须具有唯一的名称(而不仅仅是给定类型的每个磁盘数据对象)。例如,您不能同时命名一个表空间和一个日志文件组为dd1
。
假设您已经设置好了包括管理节点和 SQL 节点在内的 NDB Cluster,创建 NDB Cluster 磁盘上的表的基本步骤如下:
-
创建一个日志文件组,并将一个或多个撤销日志文件分配给它(有时也称为撤销日志文件)。
-
创建一个表空间;将日志文件组以及一个或多个数据文件分配给表空间。
-
创建一个使用此表空间进行数据存储的磁盘数据表。
可以使用 SQL 语句在mysql客户端或其他 MySQL 客户端应用程序中完成这些任务,如下面的示例所示。
-
我们使用
CREATE LOGFILE GROUP
创建一个名为lg_1
的日志文件组。该日志文件组由两个撤销日志文件组成,我们将它们命名为undo_1.log
和undo_2.log
,它们的初始大小分别为 16 MB 和 12 MB。(撤销日志文件的默认初始大小为 128 MB。)可选地,您还可以为日志文件组的撤销缓冲区指定大小,或允许其采用默认值 8 MB。在本例中,我们将 UNDO 缓冲区的大小设置为 2 MB。必须使用撤销日志文件创建日志文件组;因此,在此CREATE LOGFILE GROUP
语句中,我们将undo_1.log
添加到lg_1
中:CREATE LOGFILE GROUP lg_1 ADD UNDOFILE 'undo_1.log' INITIAL_SIZE 16M UNDO_BUFFER_SIZE 2M ENGINE NDBCLUSTER;
要将
undo_2.log
添加到日志文件组中,请使用以下ALTER LOGFILE GROUP
语句:ALTER LOGFILE GROUP lg_1 ADD UNDOFILE 'undo_2.log' INITIAL_SIZE 12M ENGINE NDBCLUSTER;
一些需要注意的事项:
-
此处使用的
.log
文件扩展名并非必需。我们仅使用它使日志文件易于识别。 -
每个
CREATE LOGFILE GROUP
和ALTER LOGFILE GROUP
语句必须包含一个ENGINE
选项。此选项的唯一允许值为NDBCLUSTER
和NDB
。重要
在同一个 NDB 集群中最多只能存在一个日志文件组。
-
当您使用
ADD UNDOFILE '*
filename*'
将撤销日志文件添加到日志文件组时,将在集群中每个数据节点的ndb_*
node_id*_fs
目录中创建一个名为filename
的文件,其中node_id
是数据节点的节点 ID。每个撤销日志文件的大小与 SQL 语句中指定的大小相同。例如,如果一个 NDB 集群有 4 个数据节点,则刚刚显示的ALTER LOGFILE GROUP
语句将创建 4 个撤销日志文件,每个数据节点的数据目录中各有一个;每个文件的名称为undo_2.log
,大小为 12 MB。 -
UNDO_BUFFER_SIZE
受系统可用内存量的限制。 -
有关这些语句的更多信息,请参见 Section 15.1.16, “CREATE LOGFILE GROUP Statement”和 Section 15.1.6, “ALTER LOGFILE GROUP Statement”。
-
-
现在我们可以创建一个表空间——用于存储数据的磁盘数据表使用的文件的抽象容器。表空间与特定的日志文件组相关联;在创建新表空间时,必须指定其用于撤销日志记录的日志文件组。还必须指定至少一个数据文件;在创建表空间后,可以向表空间添加更多数据文件。还可以从表空间中删除数据文件(请参见本节后面的示例)。
假设我们希望创建一个名为
ts_1
的表空间,该表空间使用lg_1
作为其日志文件组。我们希望表空间包含两个数据文件,分别命名为data_1.dat
和data_2.dat
,其初始大小分别为 32 MB 和 48 MB。(INITIAL_SIZE
的默认值为 128 MB。)我们可以使用两个 SQL 语句来实现这一点,如下所示:CREATE TABLESPACE ts_1 ADD DATAFILE 'data_1.dat' USE LOGFILE GROUP lg_1 INITIAL_SIZE 32M ENGINE NDBCLUSTER; ALTER TABLESPACE ts_1 ADD DATAFILE 'data_2.dat' INITIAL_SIZE 48M;
CREATE TABLESPACE
语句创建一个名为ts_1
的表空间,其中包含数据文件data_1.dat
,并将ts_1
与日志文件组lg_1
关联。ALTER TABLESPACE
添加了第二个数据文件(data_2.dat
)。一些需要注意的事项:
-
就像在此示例中用于撤销日志文件的
.log
文件扩展名一样,在.dat
文件扩展名中没有特殊意义;它仅用于便于识别。 -
当您使用
ADD DATAFILE '*
filename*'
向表空间添加数据文件时,将在集群中每个数据节点的ndb_*
node_id*_fs
目录中创建一个名为filename
的文件,其中node_id
是数据节点的节点 ID。每个数据文件的大小与 SQL 语句中指定的大小相同。例如,如果一个 NDB 集群有 4 个数据节点,则刚刚显示的ALTER TABLESPACE
语句将创建 4 个数据文件,每个数据节点的数据目录中各有一个;每个文件的名称为data_2.dat
,每个文件的大小为 48 MB。 -
NDB
为每个表空间保留 4%的空间,用于在数据节点重新启动期间使用。此空间不可用于存储数据。 -
CREATE TABLESPACE
语句必须包含一个ENGINE
子句;只有使用与表空间相同存储引擎的表才能在表空间中创建。对于ALTER TABLESPACE
,ENGINE
子句被接受但已被弃用,并可能在将来的版本中被移除。对于NDB
表空间,此选项的唯一允许值为NDBCLUSTER
和NDB
。 -
在 NDB 8.0.20 及更高版本中,对于给定表空间使用的所有数据文件,范围的分配是以循环方式进行的。
-
有关
CREATE TABLESPACE
和ALTER TABLESPACE
语句的更多信息,请参见第 15.1.21 节,“CREATE TABLESPACE Statement”和第 15.1.10 节,“ALTER TABLESPACE Statement”。
-
-
现在可以创建一个表,其未索引的列存储在使用表空间
ts_1
中的文件中:CREATE TABLE dt_1 ( member_id INT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY, last_name VARCHAR(50) NOT NULL, first_name VARCHAR(50) NOT NULL, dob DATE NOT NULL, joined DATE NOT NULL, INDEX(last_name, first_name) ) TABLESPACE ts_1 STORAGE DISK ENGINE NDBCLUSTER;
TABLESPACE ts_1 STORAGE DISK
告诉NDB
存储引擎在磁盘上使用表空间ts_1
进行数据存储。一旦像所示创建了表
ts_1
,您可以执行INSERT
、SELECT
、UPDATE
和DELETE
语句,就像对任何其他 MySQL 表一样。通过在
CREATE TABLE
或ALTER TABLE
语句中作为列定义的一部分使用STORAGE
子句,还可以指定单个列是存储在磁盘上还是存储在内存中。STORAGE DISK
导致列存储在磁盘上,而STORAGE MEMORY
导致使用内存存储。有关更多信息,请参见第 15.1.20 节,“CREATE TABLE Statement”。
您可以通过查询INFORMATION_SCHEMA
数据库中的FILES
表来获取刚刚创建的NDB
磁盘数据文件和撤销日志文件的信息,如下所示:
mysql> SELECT
FILE_NAME AS File, FILE_TYPE AS Type,
TABLESPACE_NAME AS Tablespace, TABLE_NAME AS Name,
LOGFILE_GROUP_NAME AS 'File group',
FREE_EXTENTS AS Free, TOTAL_EXTENTS AS Total
FROM INFORMATION_SCHEMA.FILES
WHERE ENGINE='ndbcluster';
+--------------+----------+------------+------+------------+------+---------+
| File | Type | Tablespace | Name | File group | Free | Total |
+--------------+----------+------------+------+------------+------+---------+
| ./undo_1.log | UNDO LOG | lg_1 | NULL | lg_1 | 0 | 4194304 |
| ./undo_2.log | UNDO LOG | lg_1 | NULL | lg_1 | 0 | 3145728 |
| ./data_1.dat | DATAFILE | ts_1 | NULL | lg_1 | 32 | 32 |
| ./data_2.dat | DATAFILE | ts_1 | NULL | lg_1 | 48 | 48 |
+--------------+----------+------------+------+------------+------+---------+
4 rows in set (0.00 sec)
有关更多信息和示例,请参见第 28.3.15 节,“The INFORMATION_SCHEMA FILES Table”。
隐式存储在磁盘上的列的索引。 对于刚刚显示的示例中定义的表dt_1
,只有dob
和joined
列存储在磁盘上。这是因为id
、last_name
和first_name
列上有索引,因此属于这些列的数据存储在 RAM 中。只有非索引列可以存储在磁盘上;索引和索引列数据继续存储在内存中。在设计磁盘数据表时,您必须牢记索引使用和 RAM 保留之间的权衡。
不能向明确声明为STORAGE DISK
的列添加索引,必须先将其存储类型更改为MEMORY
;任何尝试这样做的操作都会失败并显示错误。可以对隐式使用磁盘存储的列进行索引;在这种情况下,列的存储类型会自动更改为MEMORY
。所谓“隐式”,指的是存储类型未声明但是从父表继承的列。在以下 CREATE TABLE 语句中(使用先前定义的表空间ts_1
),列c2
和c3
隐式使用磁盘存储:
mysql> CREATE TABLE ti (
-> c1 INT PRIMARY KEY,
-> c2 INT,
-> c3 INT,
-> c4 INT
-> )
-> STORAGE DISK
-> TABLESPACE ts_1
-> ENGINE NDBCLUSTER;
Query OK, 0 rows affected (1.31 sec)
因为c2
、c3
和c4
本身没有声明为STORAGE DISK
,所以可以对它们进行索引。在这里,我们分别对c2
和c3
添加索引,使用CREATE INDEX
和ALTER TABLE
:
mysql> CREATE INDEX i1 ON ti(c2);
Query OK, 0 rows affected (2.72 sec)
Records: 0 Duplicates: 0 Warnings: 0
mysql> ALTER TABLE ti ADD INDEX i2(c3);
Query OK, 0 rows affected (0.92 sec)
Records: 0 Duplicates: 0 Warnings: 0
SHOW CREATE TABLE
确认已添加索引。
mysql> SHOW CREATE TABLE ti\G
*************************** 1\. row ***************************
Table: ti
Create Table: CREATE TABLE `ti` (
`c1` int(11) NOT NULL,
`c2` int(11) DEFAULT NULL,
`c3` int(11) DEFAULT NULL,
`c4` int(11) DEFAULT NULL,
PRIMARY KEY (`c1`),
KEY `i1` (`c2`),
KEY `i2` (`c3`)
) /*!50100 TABLESPACE `ts_1` STORAGE DISK */ ENGINE=ndbcluster DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci 1 row in set (0.00 sec)
可以使用ndb_desc查看,已强调的索引列现在使用内存而不是磁盘存储:
$> ./ndb_desc -d test t1
-- t1 --
Version: 33554433
Fragment type: HashMapPartition
K Value: 6
Min load factor: 78
Max load factor: 80
Temporary table: no
Number of attributes: 4
Number of primary keys: 1
Length of frm data: 317
Max Rows: 0
Row Checksum: 1
Row GCI: 1
SingleUserMode: 0
ForceVarPart: 1
PartitionCount: 4
FragmentCount: 4
PartitionBalance: FOR_RP_BY_LDM
ExtraRowGciBits: 0
ExtraRowAuthorBits: 0
TableStatus: Retrieved
Table options:
HashMap: DEFAULT-HASHMAP-3840-4
-- Attributes --
c1 Int PRIMARY KEY DISTRIBUTION KEY AT=FIXED ST=MEMORY
*c2 Int NULL AT=FIXED ST=MEMORY
c3 Int NULL AT=FIXED ST=MEMORY* c4 Int NULL AT=FIXED ST=DISK
-- Indexes --
PRIMARY KEY(c1) - UniqueHashIndex
i2(c3) - OrderedIndex
PRIMARY(c1) - OrderedIndex
i1(c2) - OrderedIndex
性能注意。 使用磁盘数据存储的集群的性能会大大提高,如果将磁盘数据文件与数据节点文件系统分开存放。必须为集群中的每个数据节点执行此操作才能获得任何明显的好处。
可以在ADD UNDOFILE
和ADD DATAFILE
中使用绝对和相对文件系统路径;相对路径是相对于数据节点的数据目录计算的。
日志文件组、表空间以及使用这些对象的任何磁盘数据表必须按特定顺序创建。对于删除这些对象也是如此,受以下约束条件限制:
-
只要任何表空间使用日志文件组,就无法删除日志文件组。
-
只要表空间包含任何数据文件,就无法删除表空间。
-
只要仍然有任何使用该表空间的表,就无法从表空间中删除任何数据文件。
-
无法删除与创建文件时使用不同表空间相关联的文件。
例如,要删除本节中到目前为止创建的所有对象,可以使用以下语句:
mysql> DROP TABLE dt_1;
mysql> ALTER TABLESPACE ts_1
-> DROP DATAFILE 'data_2.dat'
-> ENGINE NDBCLUSTER;
mysql> ALTER TABLESPACE ts_1
-> DROP DATAFILE 'data_1.dat'
-> ENGINE NDBCLUSTER;
mysql> DROP TABLESPACE ts_1
-> ENGINE NDBCLUSTER;
mysql> DROP LOGFILE GROUP lg_1
-> ENGINE NDBCLUSTER;
这些语句必须按照显示的顺序执行,除了两个ALTER TABLESPACE ... DROP DATAFILE
语句可以以任意顺序执行。
原文:
dev.mysql.com/doc/refman/8.0/en/mysql-cluster-disk-data-storage-requirements.html
25.6.11.2 NDB 集群磁盘数据存储要求
以下项目适用于磁盘数据存储要求:
-
变长列的磁盘数据表占据固定的空间。对于每一行,这等于存储该列可能的最大值所需的空间。
有关计算这些值的一般信息,请参阅第 13.7 节,“数据类型存储要求”。
您可以通过查询信息模式
FILES
表来估算数据文件和撤销日志文件中可用空间的数量。有关更多信息和示例,请参阅第 28.3.15 节,“INFORMATION_SCHEMA FILES 表”。注意
OPTIMIZE TABLE
语句对磁盘数据表没有任何影响。 -
在磁盘数据表中,
TEXT
或BLOB
列的前 256 个字节存储在内存中;只有剩余部分存储在磁盘上。 -
磁盘数据表中的每一行在内存中使用 8 个字节指向存储在磁盘上的数据。这意味着,在某些情况下,将内存列转换为基于磁盘的格式实际上可能导致更大的内存使用量。例如,将
CHAR(4)
列从基于内存的格式转换为基于磁盘的格式会将每行使用的DataMemory
从 4 字节增加到 8 字节。
重要提示
使用--initial
选项启动集群不会删除磁盘数据文件。在执行集群的初始重新启动之前,您必须手动删除这些文件。
通过确保DiskPageBufferMemory
的大小足够,可以通过最小化磁盘寻址次数来提高磁盘数据表的性能。您可以查询diskpagebuffer
表来帮助确定是否需要增加此参数的值。
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· DeepSeek “源神”启动!「GitHub 热点速览」
· 微软正式发布.NET 10 Preview 1:开启下一代开发框架新篇章
· 我与微信审核的“相爱相杀”看个人小程序副业
· C# 集成 DeepSeek 模型实现 AI 私有化(本地部署与 API 调用教程)
· spring官宣接入deepseek,真的太香了~