MySQL Cluster如何创建磁盘表方法解读
程序员文章站
2024-02-16 16:05:10
一、概念 mysql cluster采用一系列的disk data objects来实现磁盘表。 tablespaces:作用是作为其他disk data objects的...
一、概念
mysql cluster采用一系列的disk data objects来实现磁盘表。
tablespaces:作用是作为其他disk data objects的容器。
undo log files:存储事务进行回滚需要的信息,一个或者多个undo log files组成一个log files group,最后,该log file group关联到一个tablespaces。
data files:作用是存储表中的数据,data file直接关联到tablespaces。
在每一个数据节点上undo log files和data files都是实际的文件,默认的,存放在ndb_node_id_fs文件夹下,该路径是在mysql cluster的config.ini中用datadir指定的,node_id是data node的node id。可以用绝对路径或者相对路径指定undo log或者data file的路径。tablespaces和log file group则不是实际的文件。
注意:尽管不是所有的disk data object都作为文件存储,但是他们共享同一的命名空间,这意味着每个disk data object必须唯一命名。
二、创建步骤
mysql cluster创建一个磁盘表需要包含以下几步:
2.1、创建一个log file group,将一个或者多个undo log files关联到它上面(undo log file也叫做 undofile)。注意,undo log file只是在创建磁盘表的时候才需要,创建ndb的内存表的时候不需要。
2.2、创建一个tablespaces,关联一个log file group和一个或者多个data files到上面。
2.3、使用该tablespaces创建一个磁盘表存储数据。
下面做一个例子:
2.4、创建log file group:
我们创建一个名为lg_cloudstor的log file group,包含cloudstor_undo_1.log和cloudstor_undo_2.log两个undo log file。初始大小分别为200m和100m(默认的undo log file的初始大小为128m),你还可以指定log file group的重写缓冲大小(默认为8m),这里我们设置为20m。创建log file group的时候必须和一个undo log file一起创建。如下:
create logfile group lg_cloudstor
add undofile 'cloudstor_undo_1.log'
initial_size 200m
undo_buffer_size 20m
engine ndbcluster;
该语句可能会出错,出现error 1064 (42000)语法错误的信息,原因是字符集的问题,先执行:set character_set_client=latin1; 在执行:
添加新的undo log file:
alter logfile group lg_cloudstor
add undofile 'cloudstor_undo_2.log'
initial_size 100m
engine ndbcluster;
2.5、创建tablespace
下来我们创建一个tablespace,创建tablespace必须指明一个log file group用于存储undo log。还必须指定一个data file,tablespace创建完成后,你可以稍后添加更多的data file到tablespace。下来我们创建一个使用log file group为lg_cloudstor名为 ts_cloudstore的表空间,这个表空间包含cloudstore_data_1.dbf和cloudstore_data_2.dbf两个data file,初始大小为100m(默认为128m),自动扩展为10m。
create tablespace ts_cloudstore
add datafile 'cloudstore_data_1.dbf'
use logfile group lg_cloudstor
initial_size 100m
autoextend_size 10m
engine ndbcluster;
添加新的datafile
alter tablespace ts_cloudstore
add datafile 'cloudstore_data_2.dbf'
initial_size 100m
autoextend_size 10m
engine ndbcluster;
下来我们可以看下新建的这些文件在物理磁盘上的数据文件:
2.6、创建磁盘表
下来创建一个将没有索引的列存储在表空间ts_cloudstore的磁盘表。
create table disktable
(
id int auto_increment primary key,
c1 varchar(50) not null,
c2 varchar(30) default null,
c3 date default null,
index(c1)
)
tablespace ts_cloudstore storage disk
engine ndbcluster;
这样,列c2,c3的数据将会存储在磁盘上,id和c1的数据仍会存储在内存中,因为只有没有索引的列才能存储在磁盘上。创建完成后,就可以进行正常的数据操作了。
log file group,tablespaces,disk data tables需要按照一定的顺序执行,删除这些的时候也是这样,删除规则为:有任何表空间使用log file group时,log file group不能删除;表空间含有任何data files的时候,不能删除表空间;data files含有任何表残余的时候,不能从表空间删除数据文件。
2.7、删除数据表
drop table disktable;
2.8、删除数据文件
当没有表在关联到表空间的时候,我们一个一个删除data files。
alter tablespace ts_cloudstore
drop datafile 'cloudstore_data_1.dbf'
engine ndbcluster;
alter tablespace ts_cloudstore
drop datafile 'cloudstore_data_2.dbf'
engine ndbcluster;
2.9、删除表空间
drop tablespace ts_cloudstore
engine ndbcluster;
2.10、删除日志组
drop logfile group lg_cloudstor
engine ndbcluster;
下来查看物理文件是否已经删除:
可以在information_schema数据库中的files表中查看磁盘表的信息。
2.11、几点注意的
在磁盘数据表中,text和blob列的前256bytes存储在内存中,剩余内容存储在磁盘上;磁盘表中的每一行需要在内存中存储8bytes的数据用于指向磁盘上的数据,使用--initial选项启动集群时,不会删除磁盘上的数据文件,必须手动删除。
mysql cluster采用一系列的disk data objects来实现磁盘表。
tablespaces:作用是作为其他disk data objects的容器。
undo log files:存储事务进行回滚需要的信息,一个或者多个undo log files组成一个log files group,最后,该log file group关联到一个tablespaces。
data files:作用是存储表中的数据,data file直接关联到tablespaces。
在每一个数据节点上undo log files和data files都是实际的文件,默认的,存放在ndb_node_id_fs文件夹下,该路径是在mysql cluster的config.ini中用datadir指定的,node_id是data node的node id。可以用绝对路径或者相对路径指定undo log或者data file的路径。tablespaces和log file group则不是实际的文件。
注意:尽管不是所有的disk data object都作为文件存储,但是他们共享同一的命名空间,这意味着每个disk data object必须唯一命名。
二、创建步骤
mysql cluster创建一个磁盘表需要包含以下几步:
2.1、创建一个log file group,将一个或者多个undo log files关联到它上面(undo log file也叫做 undofile)。注意,undo log file只是在创建磁盘表的时候才需要,创建ndb的内存表的时候不需要。
2.2、创建一个tablespaces,关联一个log file group和一个或者多个data files到上面。
2.3、使用该tablespaces创建一个磁盘表存储数据。
下面做一个例子:
2.4、创建log file group:
我们创建一个名为lg_cloudstor的log file group,包含cloudstor_undo_1.log和cloudstor_undo_2.log两个undo log file。初始大小分别为200m和100m(默认的undo log file的初始大小为128m),你还可以指定log file group的重写缓冲大小(默认为8m),这里我们设置为20m。创建log file group的时候必须和一个undo log file一起创建。如下:
复制代码 代码如下:
create logfile group lg_cloudstor
add undofile 'cloudstor_undo_1.log'
initial_size 200m
undo_buffer_size 20m
engine ndbcluster;
该语句可能会出错,出现error 1064 (42000)语法错误的信息,原因是字符集的问题,先执行:set character_set_client=latin1; 在执行:
添加新的undo log file:
复制代码 代码如下:
alter logfile group lg_cloudstor
add undofile 'cloudstor_undo_2.log'
initial_size 100m
engine ndbcluster;
2.5、创建tablespace
下来我们创建一个tablespace,创建tablespace必须指明一个log file group用于存储undo log。还必须指定一个data file,tablespace创建完成后,你可以稍后添加更多的data file到tablespace。下来我们创建一个使用log file group为lg_cloudstor名为 ts_cloudstore的表空间,这个表空间包含cloudstore_data_1.dbf和cloudstore_data_2.dbf两个data file,初始大小为100m(默认为128m),自动扩展为10m。
复制代码 代码如下:
create tablespace ts_cloudstore
add datafile 'cloudstore_data_1.dbf'
use logfile group lg_cloudstor
initial_size 100m
autoextend_size 10m
engine ndbcluster;
添加新的datafile
复制代码 代码如下:
alter tablespace ts_cloudstore
add datafile 'cloudstore_data_2.dbf'
initial_size 100m
autoextend_size 10m
engine ndbcluster;
下来我们可以看下新建的这些文件在物理磁盘上的数据文件:
2.6、创建磁盘表
下来创建一个将没有索引的列存储在表空间ts_cloudstore的磁盘表。
复制代码 代码如下:
create table disktable
(
id int auto_increment primary key,
c1 varchar(50) not null,
c2 varchar(30) default null,
c3 date default null,
index(c1)
)
tablespace ts_cloudstore storage disk
engine ndbcluster;
这样,列c2,c3的数据将会存储在磁盘上,id和c1的数据仍会存储在内存中,因为只有没有索引的列才能存储在磁盘上。创建完成后,就可以进行正常的数据操作了。
log file group,tablespaces,disk data tables需要按照一定的顺序执行,删除这些的时候也是这样,删除规则为:有任何表空间使用log file group时,log file group不能删除;表空间含有任何data files的时候,不能删除表空间;data files含有任何表残余的时候,不能从表空间删除数据文件。
2.7、删除数据表
复制代码 代码如下:
drop table disktable;
2.8、删除数据文件
当没有表在关联到表空间的时候,我们一个一个删除data files。
复制代码 代码如下:
alter tablespace ts_cloudstore
drop datafile 'cloudstore_data_1.dbf'
engine ndbcluster;
alter tablespace ts_cloudstore
drop datafile 'cloudstore_data_2.dbf'
engine ndbcluster;
2.9、删除表空间
复制代码 代码如下:
drop tablespace ts_cloudstore
engine ndbcluster;
2.10、删除日志组
复制代码 代码如下:
drop logfile group lg_cloudstor
engine ndbcluster;
下来查看物理文件是否已经删除:
可以在information_schema数据库中的files表中查看磁盘表的信息。
2.11、几点注意的
在磁盘数据表中,text和blob列的前256bytes存储在内存中,剩余内容存储在磁盘上;磁盘表中的每一行需要在内存中存储8bytes的数据用于指向磁盘上的数据,使用--initial选项启动集群时,不会删除磁盘上的数据文件,必须手动删除。
上一篇: 碰到一个有关问题,小弟我觉得肯定有简便写法,但是一时找不到
下一篇: mongo数据库,该如何处理