Documentation Home
MySQL 8.0 参考手册  / 第 13 章 SQL 语句  / 13.1 数据定义语句  /  13.1.14 CREATE LOGFILE GROUP 语句

13.1.14 CREATE LOGFILE GROUP 语句

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名为“ undo_file”的文件。一个 CREATE LOGFILE GROUP语句只有一个ADD UNDOFILE子句。有关日志文件组命名的规则,请参阅 第 9.2 节,“模式对象名称”

笔记

所有 NDB Cluster 磁盘数据对象共享相同的命名空间。这意味着每个磁盘数据对象必须唯一命名(而不仅仅是给定类型的每个磁盘数据对象)。例如,表空间和日志文件组不能同名,表空间和数据文件不能同名。

在 MySQL NDB Cluster 7.3 及更高版本中,在任何给定时间,每个 Cluster 只能有一个日志文件组。(参见错误 #16386)

可选INITIAL_SIZE参数设置 UNDO文件的初始大小;如果未指定,则默认为128M(128 兆字节)。可选 UNDO_BUFFER_SIZE参数设置UNDO日志文件组缓冲区使用的大小;默认值为UNDO_BUFFER_SIZE8M八兆字节);该值不能超过可用的系统内存量。这两个参数都以字节为单位指定。在 MySQL NDB Cluster 7.3.2 及更高版本中,您可以选择在其中一个或两个后面加上一个字母缩写来表示一个数量级,类似于 my.cnf. 通常,这是字母之一M(表示兆字节)或 G(千兆字节)。在 MySQL NDB Cluster 7.3.2 之前,这些选项的值只能使用数字指定。(错误#13116514、错误#16104705、错误#62858)

用于的内存UNDO_BUFFER_SIZE来自全局池,其大小由 SharedGlobalMemory数据节点配置参数的值决定。InitialLogFileGroup这包括数据节点配置参数 的设置为此选项隐含的任何默认值 。

允许的最大值为UNDO_BUFFER_SIZE629145600 (600 MB)。

在 32 位系统上,支持的最大值为 INITIAL_SIZE4294967296 (4 GB)。(漏洞 #29186)

允许的最小值为INITIAL_SIZE1048576 (1 MB)。

ENGINE选项决定了该日志文件组使用的存储引擎,with engine_name是存储引擎的名称。在 MySQL 5.6 中,这必须是 NDB(or NDBCLUSTER)。如果 ENGINE未设置,MySQL 会尝试使用 default_storage_engine服务器系统变量指定的引擎(以前称为 storage_engine)。在任何情况下,如果未将引擎指定为NDBNDBCLUSTER,则该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 Cluster 版本中解决这个问题。

REDO_BUFFER_SIZENODEGROUPWAITCOMMENT被解析但被忽略,因此在 MySQL 5.6 中没有影响。这些选项旨在用于未来的扩展。

与 一起使用时,会在每个 Cluster 数据节点上创建ENGINE [=] NDB一个日志文件组和关联的日志文件。您可以通过查询表UNDO来验证 UNDO文件是否已创建并获取有关它们的信息 。INFORMATION_SCHEMA.FILES例如:

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 Cluster 的磁盘数据存储有用。请参阅 第 18.6.11 节,“NDB Cluster 磁盘数据表”