MySQL8 中文参考(八十五)(3)https://developer.aliyun.com/article/1566066
- IPv6 支持。 从 NDB 8.0.22 开始,IPv6 寻址支持与管理和数据节点的连接;这包括管理和数据节点与 SQL 节点之间的连接。在配置集群时,可以使用数字 IPv6 地址、解析为 IPv6 地址的主机名或两者兼用。要使 IPv6 寻址正常工作,部署集群的操作平台和网络必须支持 IPv6。与使用 IPv4 寻址时一样,主机名解析为 IPv6 地址必须由操作平台提供。在 Linux 平台上运行 NDB 8.0.22 及更高版本时已知的问题是,即使没有使用 IPv6 地址,操作系统内核也需要提供 IPv6 支持。这个问题在 NDB 8.0.34 及更高版本中已修复,如果不打算使用 IPv6 寻址,则可以安全地在 Linux 内核中禁用 IPv6 支持(Bug #33324817,Bug #33870642)。IPv4 addressing continues to be supported by
NDB
. Using IPv4 and IPv6 addresses concurrently is not recommended, but can be made to work in the following cases:
- 当管理节点配置为 IPv6,数据节点配置为 IPv4 地址在
config.ini
文件中时:如果未使用--bind-address
与mgmd一起使用,并且数据节点启动时使用--ndb-connectstring
设置为管理节点的 IPv4 地址,则可以正常工作。 - 当管理节点配置为 IPv4,数据节点配置为 IPv6 地址在
config.ini
文件中时:类似于另一种情况,如果未传递--bind-address
给mgmd,并且数据节点启动时使用--ndb-connectstring
设置为管理节点的 IPv6 地址,则可以正常工作。
- 这些情况之所以有效,是因为ndb_mgmd默认不绑定到任何 IP 地址。
要从不支持 IPv6 寻址的NDB
版本升级到支持 IPv6 寻址的版本,前提是网络支持 IPv4 和 IPv6,首先执行软件升级;完成后,可以使用 IPv6 地址更新config.ini
文件中使用的 IPv4 地址。之后,为使配置更改生效并使集群开始使用 IPv6 地址,需要对集群进行系统重启。 - 自动安装程序弃用和移除。 MySQL NDB Cluster 自动安装程序基于 Web 的安装工具(ndb_setup.py)在 NDB 8.0.22 中已被弃用,并在 NDB 8.0.23 及更高版本中被移除。不再受支持。
- ndbmemcache 弃用和移除。
ndbmemcache
不再受支持。ndbmemcache
在 NDB 8.0.22 中已被弃用,并在 NDB 8.0.23 中被移除。 - ndbinfo 备份 ID 表。 NDB 8.0.24 向
ndbinfo
信息数据库添加了一个backup_id
表。这旨在作为通过使用ndb_select_all来转储内部SYSTAB_0
表的内容获取此信息的替代方法,后者容易出错且执行时间过长。
这个表有一列和一行,包含使用START BACKUP
管理客户端命令对集群进行的最新备份的 ID。如果找不到此集群的备份,则表中包含一个列值为0
的单行。 - 表分区增强。 NDB 8.0.23 引入了一种新的处理表分区和片段的方法,可以独立于重做日志部分的数量确定给定数据节点的本地数据管理器(LDMs)的数量。这意味着现在 LDMs 的数量可以高度变化。当
ClassicFragmentation
数据节点配置参数设置为false
时,NDB
可以使用这种方法;在这种情况下,不再使用 LDMs 的数量来确定每个数据节点为表创建多少个分区,而是由PartitionsPerNode
参数的值(也在 NDB 8.0.23 中引入)来确定这个数量,这个数量也用于计算表使用的片段数量。
当ClassicFragmentation
具有其默认值true
时,将使用传统方法来确定表应具有的片段数,即使用 LDM 数。
更多信息,请参阅之前引用的新参数的描述,在多线程配置参数(ndbmtd)中。 - 术语更新。 为了与 MySQL 8.0.21 和 NDB 8.0.21 中开始的工作保持一致,NDB 8.0.23 实施了一些术语上的更改,列在此处:
- 系统变量
ndb_slave_conflict_role
现已弃用。它被ndb_conflict_role
替代。 - 许多
NDB
状态变量已被弃用。这些变量及其替代项在下表中列出:
表 25.1 已弃用的 NDB 状态变量及其替代项
已弃用变量 | 替代项 |
Ndb_api_adaptive_send_deferred_count_slave |
Ndb_api_adaptive_send_deferred_count_replica |
Ndb_api_adaptive_send_forced_count_slave |
Ndb_api_adaptive_send_forced_count_replica |
Ndb_api_adaptive_send_unforced_count_slave |
Ndb_api_adaptive_send_unforced_count_replica |
Ndb_api_bytes_received_count_slave |
Ndb_api_bytes_received_count_replica |
Ndb_api_bytes_sent_count_slave |
Ndb_api_bytes_sent_count_replica |
Ndb_api_pk_op_count_slave |
Ndb_api_pk_op_count_replica |
Ndb_api_pruned_scan_count_slave |
Ndb_api_pruned_scan_count_replica |
Ndb_api_range_scan_count_slave |
Ndb_api_range_scan_count_replica |
Ndb_api_read_row_count_slave |
Ndb_api_read_row_count_replica |
Ndb_api_scan_batch_count_slave |
Ndb_api_scan_batch_count_replica |
Ndb_api_table_scan_count_slave |
Ndb_api_table_scan_count_replica |
Ndb_api_trans_abort_count_slave |
Ndb_api_trans_abort_count_replica |
Ndb_api_trans_close_count_slave |
Ndb_api_trans_close_count_replica |
Ndb_api_trans_commit_count_slave |
Ndb_api_trans_commit_count_replica |
Ndb_api_trans_local_read_row_count_slave |
Ndb_api_trans_local_read_row_count_replica |
Ndb_api_trans_start_count_slave |
Ndb_api_trans_start_count_replica |
Ndb_api_uk_op_count_slave |
Ndb_api_uk_op_count_replica |
Ndb_api_wait_exec_complete_count_slave |
Ndb_api_wait_exec_complete_count_replica |
Ndb_api_wait_meta_request_count_slave |
Ndb_api_wait_meta_request_count_replica |
Ndb_api_wait_nanos_count_slave |
Ndb_api_wait_nanos_count_replica |
Ndb_api_wait_scan_result_count_slave |
Ndb_api_wait_scan_result_count_replica |
Ndb_slave_max_replicated_epoch |
Ndb_replica_max_replicated_epoch |
弃用变量 | 替换 |
- 弃用的状态变量仍然显示在
SHOW STATUS
的输出中,但应用程序应尽快更新,不再依赖于它们,因为它们在未来的发布系列中的可用性不能保证。 - 先前在
ndbinfo
ndbinfo.table_distribution_status
表的tab_copy_status
列中显示的ADD_TABLE_MASTER
和ADD_TABLE_SLAVE
已被弃用。分别由ADD_TABLE_COORDINATOR
和ADD_TABLE_PARTICIPANT
替代。 - 一些
NDB
客户端和实用程序的--help
输出,如ndb_restore已经修改。
- ThreadConfig 增强。 从 NDB 8.0.23 开始,
ThreadConfig
参数的可配置性已经扩展,增加了两种新的线程类型,列在这里:
query
: 查询线程仅处理READ COMMITTED
查询。查询线程还充当恢复线程。查询线程的数量必须是 LDM 线程数量的 0、1、2 或 3 倍。 0(默认值,除非启用ThreadConfig
或AutomaticThreadConfig
)会导致 LDM 表现为 NDB 8.0.23 之前的行为。recover
: 恢复线程从本地检查点检索数据。指定为恢复线程的恢复线程永远不会充当查询线程。
- 还可以以两种方式组合现有的
main
和rep
线程:
- 通过将这两个参数中的一个设置为 0 来将其合并为一个线程。这样做时,生成的合并线程在
ndbinfo.threads
表中显示为main_rep
。 - 通过将
ldm
和tc
都设置为 0,并将recv
设置为 1,与recv
线程一起。在这种情况下,组合线程被命名为main_rep_recv
。
- 此外,许多现有线程类型的最大数量已增加。包括查询线程和恢复线程在内的新最大值在此处列出:
- LDM:332
- 查询:332
- 恢复:332
- TC:128
- 接收:64
- 发送:64
- 主要:2
- 其他线程类型的最大值保持不变。
此外,作业缓冲区在使用超过 32 个块线程时,NDB
现在使用互斥锁来保护。虽然这可能会导致性能略微下降(在大多数情况下为 1 到 2%),但也显着减少了非常大配置所需的内存量。例如,在 NDB 8.0.23 之前,使用 2 GB 作业缓冲区内存的 64 个线程设置,现在在 NDB 8.0.23 及更高版本中只需要约 1 GB。在我们的测试中,这导致非常复杂查询的执行整体改善约 5%。
欲了解更多信息,请参阅ThreadConfig
参数和ndbinfo.threads
表的描述。 - ThreadConfig 线程计数更改。 由于 NDB 8.0.30 中的工作结果,需要在
ThreadConfig
值字符串中明确包含main
、rep
、recv
和ldm
的值,以及在此后的 NDB 集群版本中。此外,必须明确设置count=0
以表示不使用的每个线程类型(main
、rep
或ldm
),并且为复制线程(rep
)设置count=1
还需要为main
设置count=1
。
这些更改可能对使用此参数的 NDB 集群的升级产生重大影响;有关更多信息,请参阅第 25.3.7 节,“NDB 集群升级和降级”。 - ndbmtd 线程自动配置。 从 NDB 8.0.23 开始,可以使用 ndbmtd") 配置参数
AutomaticThreadConfig
来实现多线程数据节点的自动线程配置。当此参数设置为 1 时,NDB
根据应用程序可用的处理器数量自动设置线程分配,适用于所有支持线程类型,包括前一项中描述的新的query
和recover
线程类型。如果系统不限制处理器数量,您可以通过设置NumCPUs
(也在 NDB 8.0.23 中添加)来限制处理器数量。否则,自动线程配置支持最多 1024 个处理器。无论在config.ini
中设置了ThreadConfig
或MaxNoOfExecutionThreads
的值如何,自动线程配置都会发生;这意味着不需要设置这两个参数。此外,NDB 8.0.23 实现了许多新的ndbinfo
信息数据库表,提供有关硬件和 CPU 可用性以及NDB
数据节点的 CPU 使用情况的信息。这些表列在此处:
cpudata
cpudata_1sec
cpudata_20sec
cpudata_50ms
cpuinfo
hwinfo
- 这些表中的一些在 NDB Cluster 支持的每个平台上都不可用;有关更多信息,请参阅它们的各自描述。
- NDB 数据库对象的分层视图。
dict_obj_tree
表是在 NDB 8.0.24 中添加到ndbinfo
信息数据库中的,可以提供许多NDB
数据库对象的分层和树状视图,包括以下内容:
- 表和相关索引
- 表空间和相关数据文件
- 日志文件组和相关的撤销日志文件
- 有关更多信息和示例,请参见 第 25.6.16.25 节,“ndbinfo dict_obj_tree 表”。
- 索引统计增强。 NDB 8.0.24 实现了以下改进,用于计算索引统计信息:
- 以前仅从一个片段收集索引统计信息;现在已更改为将此外推扩展到其他片段。
- 用于非常小的表的算法已经改进,例如那些具有非常少行且结果被丢弃的表,因此对于这些表的估计应该比以前更准确。
- 从 NDB 8.0.27 开始,默认情况下索引统计表会自动创建和更新,
IndexStatAutoCreate
和IndexStatAutoUpdate
都默认为1
(启用),而不是0
(禁用),因此不再需要运行ANALYZE TABLE
来更新统计信息。
有关更多信息,请参见 第 25.6.15 节,“NDB API 统计计数器和变量”。 - 在恢复操作期间 NULL 和 NOT NULL 之间的转换。 从 NDB 8.0.26 开始,ndb_restore 可以支持将
NULL
列恢复为NOT NULL
,反之亦然,使用以下列出的选项:
- 要将
NULL
列恢复为NOT NULL
,请使用--lossy-conversions
选项。
最初声明为NULL
的列不得包含任何NULL
行;如果包含,ndb_restore 将以错误退出。 - 要将
NOT NULL
列恢复为NULL
,请使用--promote-attributes
选项。
- 有关指定的 ndb_restore 选项的描述,请参见更多信息。
- NdbScanFilter 的 SQL 兼容 NULL 比较模式。 传统上,在涉及
NULL
的比较时,NdbScanFilter
将NULL
视为等于NULL
(因此认为NULL == NULL
为TRUE
)。这与 SQL 标准规定不同,SQL 标准要求任何与NULL
的比较都返回NULL
,包括NULL == NULL
。
以前,NDB API 应用程序无法覆盖此行为;从 NDB 8.0.26 开始,您可以在创建扫描过滤器之前调用NdbScanFilter::setSqlCmpSemantics()
来实现。这样做会导致下一个NdbScanFilter
对象在其生命周期内执行的所有比较操作都采用符合 SQL 标准的NULL
比较。您必须为每个应使用符合 SQL 标准比较的NdbScanFilter
对象调用该方法。
欲了解更多信息,请参阅 NdbScanFilter::setSqlCmpSemantics()。 - NDB API .FRM 文件方法的弃用。 MySQL 8.0 和 NDB 8.0 不再使用
.FRM
文件存储表元数据。因此,NDB API 方法getFrmData()
,getFrmLength()
,和setFrm()
在 NDB 8.0.27 中已被弃用,并可能在未来的版本中移除。要读取和写入表元数据,请改用getExtraMetadata()
和setExtraMetadata()
。 - IPv4 或 IPv6 寻址偏好。 NDB 8.0.26 添加了
PreferIPVersion
配置参数,用于控制 DNS 解析的寻址偏好。IPv4(PreferIPVersion=4
)是默认设置。由于 NDB 中的配置检索要求所有 TCP 连接的偏好设置相同,因此您应该仅在集群全局配置文件(config.ini
)的[tcp default]
部分中设置它。
有关更多信息,请参阅 Section 25.4.3.10, “NDB Cluster TCP/IP Connections”。 - 日志增强。 以前,NDB Cluster 数据节点和管理节点日志的分析可能会受到不同日志消息使用不同格式以及不是所有日志消息都包含时间戳的影响。这些问题部分是由于日志记录是通过多种不同机制执行的,如函数
printf
,fprintf
,ndbout
和ndbout_c
,<<
操作符的重载等。
我们通过标准化EventLogger
机制来解决这些问题,该机制已经存在于NDB
中,并且每条日志消息以YYYY-MM-DD HH:MM:SS
格式的时间戳开头。
有关 NDB Cluster 事件日志和EventLogger
日志消息格式的更多信息,请参见 第 25.6.3 节,“NDB Cluster 生成的事件报告”。 - 复制 ALTER TABLE 改进。 从 NDB 8.0.27 开始,在
NDB
表上执行复制的ALTER TABLE
会比较执行复制前后源表的片段提交计数。这使得执行此语句的 SQL 节点可以确定是否有任何并发写入活动对正在更改的表进行了操作;如果有,SQL 节点可以终止操作。
当检测到对正在更改的表进行并发写入时,ALTER TABLE
语句将被拒绝,并显示错误消息 Detected change to data in source table during copying ALTER TABLE. Alter aborted to avoid inconsistency (ER_TABLE_DEF_CHANGED
)。停止更改操作,而不是允许其继续进行并发写入,可以帮助防止数据丢失或损坏。 - ndbinfo index_stats 表。 NDB 8.0.28 添加了
index_stats
表,提供关于 NDB 索引统计信息的基本信息。它主要用于内部测试,但可能作为 ndb_index_stat 的补充。 - ndb_import --table 选项。 在 NDB 8.0.28 之前,ndb_import 总是将从 CSV 文件中读取的数据导入到一个表中,该表的名称是根据正在读取的文件的名称派生而来的。NDB 8.0.28 添加了一个
--table
选项(简写形式:-t
)用于指定目标表的名称,并覆盖先前的行为。
ndb_import 的默认行为��然是使用输入文件的基本名称作为目标表的名称。 - ndb_import --missing-ai-column 选项。 从 NDB 8.0.29 开始,ndb_import 可以使用在该版本中引入的
--missing-ai-column
选项导入包含AUTO_INCREMENT
列的 CSV 文件中的空值数据。该选项可用于包含此类列的一个或多个表。
为使此选项生效,CSV 文件中的AUTO_INCREMENT
列不得包含任何值。否则,导入操作无法继续。 - ndb_import 和空行。 ndb_import 一直会拒绝在传入的 CSV 文件中遇到的任何空行。NDB 8.0.30 添加了支持,可以将空行导入到单个列中,前提是可以将空值转换为列值。
- ndb_restore --with-apply-status 选项。 从 NDB 8.0.29 开始,可以使用 ndb_restore 和该版本中添加的
--with-apply-status
选项从NDB
备份中恢复ndb_apply_status
表。要使用此选项,调用 ndb_restore 时还必须使用--restore-data
。--with-apply-status
会恢复除了具有server_id = 0
的行之外的所有ndb_apply_status
表的行;要恢复此行,请使用--restore-epoch
。有关更多信息,请参阅 ndb_apply_status 表,以及--with-apply-status
选项的描述。 - 具有缺失索引的表的 SQL 访问。 在 NDB 8.0.29 之前,当用户查询尝试打开具有缺失或损坏索引的
NDB
表时,MySQL 服务器会引发NDB
错误4243
(索引未找到)。当约束违规或缺失数据使得无法在NDB
表上恢复索引时,会出现这种情况,并且使用 ndb_restore 的--disable-indexes
用于在没有索引的情况下恢复数据。
从 NDB 8.0.29 开始,针对一个具有缺失索引的NDB
表的 SQL 查询,如果查询不使用任何缺失的索引,则成功。否则,查询将被拒绝,并显示ER_NOT_KEYFILE
。在这种情况下,您可以使用ALTER TABLE ... ALTER INDEX ... INVISIBLE
来阻止 MySQL 优化器尝试使用该索引,或者使用适当的 SQL 语句删除该索引(然后可能重新创建)。 - NDB API List::clear() 方法。 NDB API
Dictionary
方法listEvents()
,listIndexes()
和listObjects()
每个都需要一个空的List
对象的引用。以前,使用任何这些方法重用现有的List
都会因为这个原因出现问题。NDB 8.0.29 通过实现一个clear()
方法来简化这个过程,该方法会从列表中删除所有数据。
作为这项工作的一部分,List
类析构函数现在在从列表中删除任何元素或属性之前调用List::clear()
。 - NDB 字典表在 ndbinfo 中。 NDB 8.0.29 在
ndbinfo
数据库中引入了几个新表,提供了以前需要使用 ndb_desc, ndb_select_all 和其他 NDB 实用程序程序来获取的来自NdbDictionary
的信息。这些表中有两个实际上是视图。hash_maps
表提供了NDB
使用的哈希映射的信息;files
表显示了关于在磁盘上存储数据的文件的信息(参见 第 25.6.11 节,“NDB 集群磁盘数据表”)。NDB 8.0.29 中添加的剩余六个ndbinfo
表都是基本表。这些表不是隐藏的,也不使用ndb$
前缀命名。这些表在此列出,包括每个表中表示的对象的描述:
blobs
: 用于存储BLOB
和TEXT
列的可变大小部分的 Blob 表dictionary_columns
:NDB
表的列dictionary_tables
:NDB
表events
: NDB API 中的事件订阅foreign_keys
:NDB
表上的外键index_columns
:NDB
表上的索引
- NDB 8.0.29 还对
ndbinfo
存储引擎的主键实现进行了更改,以提高与NdbDictionary
的兼容性。 - ndbcluster 插件和性能模式。 从 NDB 8.0.29 开始,
ndbcluster
插件线程显示在性能模式threads
和setup_threads
中,可以获取有关这些线程性能的信息。在performance_schema
表中公开的三个线程列在此处:
ndb_binlog
:二进制日志线程ndb_index_stat
:索引统计线程ndb_metadata
:元数据线程
- 有关更多信息和示例,请参阅 ndbcluster 插件线程。
在 NDB 8.0.30 及更高版本中,事务批处理内存使用情况可在性能模式memory_summary_by_thread_by_event_name
和setup_instruments
中以memory/ndbcluster/Thd_ndb::batch_mem_root
的形式显示。您可以使用这些信息来查看事务使用了多少内存。有关更多信息,请参阅 事务内存使用。 - 可配置的 blob 内联大小。 从 NDB 8.0.30 开始,可以在
CREATE TABLE
或ALTER TABLE
中设置 blob 列的内联大小。NDB Cluster 支持的最大内联大小为 29980 字节。
有关更多信息和示例,请参阅 NDB_COLUMN 选项,以及 字符串类型存储要求。 - replica_allow_batching 默认启用。 复制写批处理极大地提高了 NDB 集群复制性能,特别是在复制 blob 类型列(
TEXT
、BLOB
和JSON
)时,因此通常在使用 NDB 集群进行复制时应启用。因此,从 NDB 8.0.30 开始,默认启用了replica_allow_batching
系统变量,并将其设置为OFF
会引发警告。 - 冲突解析插入操作支持。 在 NDB 8.0.30 之前,仅有两种可用于解决主键冲突的策略,用作更新和删除操作的函数为
NDB$MAX()
和NDB$MAX_DELETE_WIN()
。这两者对写操作没有任何影响,除非具有与先前写入相同主键的写操作总是被拒绝,并且仅在没有具有相同主键的操作存在时才被接受和应用。NDB 8.0.30 引入了两个新的冲突解析函数NDB$MAX_INS()")
和NDB$MAX_DEL_WIN_INS()")
,用于处理插入操作之间的主键冲突。这些函数处理冲突写入如下:
- 如果没有冲突写入,应用此操作(与
NDB$MAX()
相同)。 - 否则,应用“最大时间戳获胜”冲突解析,如下所示:
- 如果传入写入的时间戳大于冲突写入的时间戳,则应用传入操作。
- 如果传入写入的时间戳不大,则拒绝传入写入操作。
- 对于冲突的更新和删除操作,
NDB$MAX_INS()
的行为类似于NDB$MAX()")
,而NDB$MAX_DEL_WIN_INS()
的行为与NDB$MAX_DELETE_WIN()")
相同。
此增强功能提供了在处理冲突的复制写操作时配置冲突检测的支持,因此具有更高时间戳列值的复制INSERT
会被幂等地应用,而具有较低时间戳列值的复制INSERT
会被拒绝。
与其他冲突解决函数一样,拒绝的操作可以选择记录在异常表中;拒绝的操作会增加一个计数器(状态变量Ndb_conflict_fn_max
用于“最大时间戳获胜”,以及Ndb_conflict_fn_old
用于“相同时间戳获胜”)。
欲了解更多信息,请参阅新冲突解决函数的描述,以及第 25.7.12 节,“NDB 集群复制冲突解决”。 - 复制应用程序批处理大小控制。 以前,写入到副本 NDB 集群时使用的批处理大小由
--ndb-batch-size
控制,而写入 blob 数据到副本时使用的批处理大小由ndb-blob-write-batch-bytes
确定。这种安排的一个问题是,副本使用这些变量的全局值,这意味着更改其中一个变量对于副本也会影响所有其他会话使用的值。此外,不可能为这些值设置专门适用于副本的不同默认值,副本的默认值应该比其他会话的默认值更高。
NDB 8.0.30 添加了两个新的系统变量,这些变量专门用于复制应用程序。ndb_replica_batch_size
现在控制用于复制应用程序的批处理大小,而ndb_replica_blob_write_batch_bytes
变量现在确定用于在复制上执行批量 blob 写入的 blob 写入批处理大小。
此更改应该改善使用默认设置的 MySQL NDB 集群复制的行为,并允许用户微调 NDB 复制性能,而不会影响用户线程,例如执行 SQL 查询处理的线程。
欲了解更多信息,请参阅新变量的描述。另请参阅第 25.7.5 节,“准备 NDB 集群进行复制”。 - 二进制日志事务压缩。 NDB 8.0.31 增加了对使用
ZSTD
压缩的压缩事务的二进制日志的支持。要启用此功能,请将此版本中引入的ndb_log_transaction_compression
系统变量设置为ON
。使用的压缩级别可以通过ndb_log_transaction_compression_level_zstd
系统变量进行控制,该系统变量也在该版本中添加;默认压缩级别为 3。
尽管binlog_transaction_compression
和binlog_transaction_compression_level_zstd
服务器系统变量对NDB
表的二进制日志记录没有影响,但使用--binlog-transaction-compression=ON
启动mysqld会自动启用ndb_log_transaction_compression
。在服务器启动完成后,你可以在 MySQL 客户端会话中使用SET @@global.ndb_log_transaction_compression=OFF
来禁用它。
查看ndb_log_transaction_compression
的描述以及第 7.4.4.5 节,“二进制日志事务压缩”,以获取更多信息。 - NDB 复制:多线程应用程序。 从 NDB 8.0.33 开始,NDB Cluster 复制支持副本服务器上的 MySQL 多线程应用程序(MTA)(以及
replica_parallel_workers
的非零值),这使得副本可以并行应用二进制日志事务,从而提高吞吐量。(有关 MySQL 服务器中多线程应用程序的更多信息,请参阅第 19.2.3 节,“复制线程”。)
在副本上启用此功能需要源数据库使用--ndb-log-transaction-dependency
参数设置为ON
(此选项也在 NDB 8.0.33 中实现)。此外,源数据库还需要将binlog_transaction_dependency_tracking
设置为WRITESET
。另外,你必须确保副本上的replica_parallel_workers
的值大于 1,从而确保副本使用多个工作线程。
有关更多信息和要求,请参见第 25.7.11 节,“使用多线程应用程序复制的 NDB 集群复制”。 - 构建选项的更改。 NDB 8.0.31 对用于构建 MySQL 集群的 CMake 选项进行了以下更改。
WITH_NDBCLUSTER
选项已被弃用,WITH_PLUGIN_NDBCLUSTER
已被移除。- 要从源代码构建 MySQL 集群,请使用新添加的
WITH_NDB
选项。 WITH_NDBCLUSTER_STORAGE_ENGINE
仍然受支持,但对于大多数构建而言不再需要。
- 有关更多信息,请参见用于编译 NDB 集群的 CMake 选项。
- 文件系统加密。 透明数据加密(TDE)通过加密在静止状态下的
NDB
数据,即所有持久化到磁盘的NDB
表数据和日志文件。这旨在防止在未经授权访问 NDB 集群数据文件(如表空间文件或日志)后恢复数据。
加密由数据节点上的 NDB 文件系统层(NDBFS
)透明实现;数据在读取和写入文件时进行加密和解密,NDBFS
内部客户端块像正常操作文件一样。NDBFS
可以从用户提供的密码直接透明加密文件,但将单个文件的加密和解密与用户提供的密码分离可能有助于提高效率、可用性、安全性和灵活性。请参见第 25.6.14.2 节,“NDB 文件系统加密实现”。
TDE 使用两种类型的密钥。一个秘密密钥用于加密存储在磁盘上的实际数据和日志文件(包括 LCP、重做、撤销和表空间文件)。然后使用主密钥加密秘密密钥。
数据节点配置参数EncryptedFileSystem
,从 NDB 8.0.29 开始提供,设置为1
时,强制对存储表数据的文件进行加密。这包括 LCP 数据文件、重做日志文件、表空间文件和撤销日志文件。
在启动或重新启动每个数据节点时,还需要为其提供密码,使用--filesystem-password
或--filesystem-password-from-stdin
选项之一。请参见第 25.6.14.1 节,“NDB 文件系统加密设置和使用”。此密码使用相同格式,并受到与用于加密NDB
备份的密码相同的约束(有关加密NDB
备份的详细信息,请参见ndb_restore--backup-password
选项的描述)。
只有使用NDB
存储引擎的表才会受到此功能的加密影响;参见第 25.6.14.3 节,“NDB 文件系统加密限制”。其他表,如用于NDB
模式分发、复制和二进制日志的表,通常使用InnoDB
;参见第 17.13 节,“InnoDB 数据静止时加密”。有关二进制日志文件加密的信息,请参见第 19.3.2 节,“加密二进制日志文件和中继日志文件”。
由NDB
进程生成或使用的文件,如操作系统日志、崩溃日志和核心转储,不会被加密。由NDB
使用但不包含任何用户表数据的文件也不会被加密;这些文件包括 LCP 控制文件、模式文件和系统文件(参见 NDB 集群数据节点文件系统)。管理服务器配置缓存也不会被加密。
此外,NDB 8.0.31 添加了一个新的实用程序ndb_secretsfile_reader,用于从秘密文件(S0.sysfile
)中提取密钥信息。
此增强功能建立在 NDB 8.0.22 中实现加密NDB
备份的工作基础之上。有关加密备份的更多信息,请参见RequireEncryptedBackup
配置参数的描述,以及第 25.6.8.2 节,“使用 NDB 集群管理客户端创建备份”。 - 移除不必要的程序选项。 在 NDB Cluster 8.0.31 版本中,删除了一些“垃圾”命令行选项,这些选项从未被实现过。以下列出了被删除选项和程序:
--ndb-optimized-node-selection
:
ndbd, ndbmtd, ndb_mgm, ndb_delete_all, ndb_desc, ndb_drop_index, ndb_drop_table, ndb_show_table, ndb_blob_tool, ndb_config, ndb_index_stat, ndb_move_data, ndbinfo_select_all, ndb_select_count--character-sets-dir
:
ndb_mgm, ndb_mgmd, ndb_config, ndb_delete_all, ndb_desc, ndb_drop_index, ndb_drop_table, ndb_show_table, ndb_blob_tool, ndb_config, ndb_index_stat, ndb_move_data, ndbinfo_select_all, ndb_select_count, ndb_waiter--core-file
:
ndb_mgm, ndb_mgmd, ndb_config, ndb_delete_all, ndb_desc, ndb_drop_index, ndb_drop_table, ndb_show_table, ndb_blob_tool, ndb_config, ndb_index_stat, ndb_move_data, ndbinfo_select_all, ndb_select_count, ndb_waiter--connect-retries
和--connect-retry-delay
:
ndb_mgmd--ndb-nodeid
:
ndb_config
- 更多信息,请参阅第 25.5 节,“NDB 集群程序”中相关程序和选项的描述。
- 读取配置缓存文件。 从 NDB 8.0.32 开始,可以使用该版本引入的
--config-binary-file
选项,通过ndb_mgmd创建的二进制配置缓存文件。这可以简化确定给定配置文件中的设置是否已应用于集群的过程,或在config.ini
文件在某种方式受损或丢失后,从二进制缓存中恢复设置。
有关更多信息和示例,请参阅第 25.5.7 节,“ndb_config — 提取 NDB 集群配置信息”中对此选项的描述。 - ndbinfo transporter_details 表。 这个
ndbinfo
表提供了关于 NDB 集群中使用的各个传输器的信息。在 NDB 8.0.37 中添加,与ndbinfo
transporters
表类似。
有关更多信息,请参阅第 25.6.16.64 节,“ndbinfo transporter_details 表”。
MySQL Cluster Manager 支持 NDB 集群 8.0。MySQL Cluster Manager 具有先进的命令行界面,可以简化许多复杂的 NDB 集群管理任务。有关更多信息,请参阅 MySQL Cluster Manager 8.0.36 用户手册。
MySQL8 中文参考(八十五)(5)https://developer.aliyun.com/article/1566068