CREATE LOGFILE GROUP logfile_group
ADD UNDOFILE 'undo_file'
[INITIAL_SIZE [=] initial_size]
[UNDO_BUFFER_SIZE [=] undo_buffer_size]
[REDO_BUFFER_SIZE [=] redo_buffer_size]
[NODEGROUP [=] nodegroup_id]
[WAIT]
[COMMENT [=] 'string']
ENGINE [=] engine_name
该语句创建一个名为 logfile_group
的新日志文件组,具有一个名为 'undo_file
' 的单个 UNDO
文件。一个 CREATE LOGFILE GROUP
语句只有一个 ADD UNDOFILE
子句。有关日志文件组命名规则的信息,请参阅 第 11.2 节,“模式对象名称”。
所有 NDB 集群磁盘数据对象共享同一个命名空间。这意味着 每个磁盘数据对象 都必须具有唯一的名称(而不仅仅是每个磁盘数据对象的类型)。例如,您不能拥有同名的表空间和日志文件组,或者同名的表空间和数据文件。
在任何给定的时间点,每个 NDB 集群实例只能有一个日志文件组。
可选的 INITIAL_SIZE
参数设置 UNDO
文件的初始大小;如果未指定,默认值为 128M
(128 兆字节)。可选的 UNDO_BUFFER_SIZE
参数设置日志文件组的 UNDO
缓冲区的大小;默认值为 8M
(八兆字节);该值不能超过可用的系统内存量。两个参数都以字节为单位指定。你可以在后面添加一个字母缩写,以表示数量级,类似于 my.cnf
中使用的缩写。通常,这是一个字母,例如 M
(兆字节)或 G
(吉字节)。
用于 UNDO_BUFFER_SIZE
的内存来自全局池,其大小由 SharedGlobalMemory
数据节点配置参数的值确定。包括该选项的默认值,由 InitialLogFileGroup
数据节点配置参数的设置隐含。
允许的最大 UNDO_BUFFER_SIZE
是 629145600(600 MB)。
在 32 位系统上,支持的最大 INITIAL_SIZE
值是 4294967296(4 GB)。(Bug #29186)
允许的最小 INITIAL_SIZE
值是 1048576(1 MB)。
该 ENGINE
选项确定了日志文件组使用的存储引擎,以 engine_name
作为存储引擎的名称。在 MySQL 8.3 中,这必须是 NDB
(或 NDBCLUSTER
)。如果未设置 ENGINE
,MySQL 将尝试使用由 default_storage_engine
服务器系统变量(以前是 storage_engine
)指定的引擎。在任何情况下,如果引擎未指定为 NDB
或 NDBCLUSTER
,则 CREATE LOGFILE GROUP
语句似乎成功,但实际上未创建日志文件组,如下所示:
mysql> CREATE LOGFILE GROUP lg1
-> ADD UNDOFILE 'undo.dat' INITIAL_SIZE = 10M;
Query OK, 0 rows affected, 1 warning (0.00 sec)
mysql> SHOW WARNINGS;
+-------+------+------------------------------------------------------------------------------------------------+
| Level | Code | Message |
+-------+------+------------------------------------------------------------------------------------------------+
| Error | 1478 | Table storage engine 'InnoDB' does not support the create option 'TABLESPACE or LOGFILE GROUP' |
+-------+------+------------------------------------------------------------------------------------------------+
1 row in set (0.00 sec)
mysql> DROP LOGFILE GROUP lg1 ENGINE = NDB;
ERROR 1529 (HY000): Failed to drop LOGFILE GROUP
mysql> CREATE LOGFILE GROUP lg1
-> ADD UNDOFILE 'undo.dat' INITIAL_SIZE = 10M
-> ENGINE = NDB;
Query OK, 0 rows affected (2.97 sec)
事实上,CREATE LOGFILE GROUP
语句在指定非 NDB
存储引擎时不会返回错误,而是似乎成功,但实际上未创建日志文件组,这是一个已知的问题,我们希望在 NDB 集群的未来版本中解决。
REDO_BUFFER_SIZE
、NODEGROUP
、WAIT
和 COMMENT
被解析但被忽略,因此在 MySQL 8.3 中没有效果。这些选项旨在未来扩展。
使用 ENGINE [=] NDB
时,在每个集群数据节点上创建了日志文件组和关联的 UNDO
日志文件。您可以通过查询信息模式 FILES
表来验证 UNDO
文件的创建并获取关于它们的信息。例如:
mysql> SELECT LOGFILE_GROUP_NAME, LOGFILE_GROUP_NUMBER, EXTRA
-> FROM INFORMATION_SCHEMA.FILES
-> WHERE FILE_NAME = 'undo_10.dat';
+--------------------+----------------------+----------------+
| LOGFILE_GROUP_NAME | LOGFILE_GROUP_NUMBER | EXTRA |
+--------------------+----------------------+----------------+
| lg_3 | 11 | CLUSTER_NODE=3 |
| lg_3 | 11 | CLUSTER_NODE=4 |
+--------------------+----------------------+----------------+
2 rows in set (0.06 sec)
CREATE LOGFILE GROUP
仅在 NDB 集群的磁盘数据存储中有用。请参阅 第 25.6.11 节,“NDB 集群磁盘数据表”。