建立mysql集群磁盘表

来源:互联网 发布:js获取flash播放时间 编辑:程序博客网 时间:2024/06/05 00:29

应用场景

MySQL Cluster 5.1的一个最受期待的特性是集群已支持基于磁盘的数据存取。NDB存储引擎大大增强了MySQL Cluster的性能,该引擎之前是一个100%的内存数据库引擎。这种引擎对可以运行在内存里的数据库来说是极好的选择,现在基于磁盘的存取数据支持使MySQL 5.1集群拓展了数据库规模,使MySQL集群用户有能力创建更大的数据库而且能对其有效的管理。

对于必须具备很高可用性,但不苛求像基于内存数据存储那样的高性能特性的数据,利用磁盘存取的方式将是最好的选择。另外,那些由于操作系统或硬件条件所致的硬性局限,可以考虑移植基于内存存取的库到磁盘存取的库当中,或者在支持磁盘存取数据的MySQL Cluster上开发新的应用。

操作步骤

1. 涉及概念

MySQL Cluster采用一系列的Disk Data objects来实现磁盘表。
(1)Tablespaces:作用是作为其他Disk Data objects的容器。
(2)Undo logy files:存储事务进行回滚需要的信息,一个或者多个undo log files组成一个log files group,最后,该log file group关联到一个tablespaces。
(3)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必须唯一命名。

2. 创建日志组文件

 在sql节点下执行以下sql语句:CREATE LOGFILE GROUP lg_cloudstor     ADD UNDOFILE 'cloudstor_undo_1.log'     INITIAL_SIZE 1024M     UNDO_BUFFER_SIZE 100M     ENGINE NDBCLUSTER;ALTER LOGFILE GROUP lg_cloudstor     ADD UNDOFILE 'cloudstor_undo_2.log'     INITIAL_SIZE 1024M     ENGINE NDBCLUSTER;

3. 创建表空间

 CREATE TABLESPACE ts_cloudstore     ADD DATAFILE 'cloudstore_data_1.dbf'     USE LOGFILE GROUP lg_cloudstor     INITIAL_SIZE 20480M     AUTOEXTEND_SIZE 1024M     ENGINE NDBCLUSTER;

4. 添加新的datafile(给表空间添加日志文件)

 ALTER TABLESPACE ts_cloudstore     ADD DATAFILE 'cloudstore_data_2.dbf'     INITIAL_SIZE 20480M     AUTOEXTEND_SIZE 1024M     ENGINE NDBCLUSTER;注意:上面增加的日志文件和数据文件的信息保存在information_schema.FILES表里。可以通过以下命令,查看在物理磁盘上新建的数据文件:  # cd /usr/local/src/mysql/data/ndb_2_fs/ # ls -lh

5. 删除数据文件(下步骤需要用时再操作!)

  alter tablespace ts_cloudstore     drop datafile 'cloudstore_data_1.dbf'     engine ndbcluster;  alter tablespace ts_cloudstore     drop datafile 'cloudstore_data_2.dbf'     engine ndbcluster;

6. 删除表空间

 drop tablespace ts_cloudstore engine ndbcluster;

7. 删除日志组

 drop logfile group lg_cloudstor engine ndbcluster;

8. 将原有内存表转为磁盘表

具体操作如下:SELECT  CONCAT('ALTER TABLE `', table_name, '` TABLESPACE ts_cloudstore STORAGE DISK ENGINE=ndbcluster;')AS sql_statementsFROM    information_schema.tables AS tbWHERE   table_schema = 'bidinfo_jiangsu'AND     `TABLE_TYPE` = 'BASE TABLE'ORDER BY table_name;

注:需要修改,需要转为磁盘表的数据库。
执行以上SQL语句,将会生成一系列ALTER语句,将这些ALTER语句再执行一次。