MySQL指定数据文件存储路径DATA DIRECTORY 和 INDEX DIRECTORY

操作环境:centos 6.4 64位

首先要创建/ibddir目录并修改/ibddir目录的所有者及对应的组:chown -R mysql:mysql /ibddir

操作1:

CREATE TABLE `D_TF_DATA_AGGREGATION_MYISAM` (

  `strative_id` VARCHAR(16)  NOT NULL,
  `date_id` VARCHAR(8) NOT NULL,
  `qua_id` VARCHAR(4)  NOT NULL,
  `fh` DECIMAL(16,6) DEFAULT NULL,
  `dl` DECIMAL(16,6) DEFAULT NULL,
  PRIMARY KEY (`strative_id`,`date_id`,`qua_id`)

) ENGINE=MYISAM DATA DIRECTORY = '/ibddir' INDEX DIRECTORY= '/ibddir';

CREATE TABLE `D_TF_DATA_AGGREGATION` (
  `strative_id` VARCHAR(16) NOT NULL,
  `date_id` VARCHAR(8)  NOT NULL,
  `qua_id` VARCHAR(4)  NOT NULL,
  `fh` DECIMAL(16,6) DEFAULT NULL,
  `dl` DECIMAL(16,6) DEFAULT NULL,
  PRIMARY KEY (`strative_id`,`date_id`,`qua_id`)
) ENGINE=INNODB DATA DIRECTORY = '/ibddir' 

操作2:

CREATE TABLE `D_TF_DATA_AGGREGATION_1` (

  `strative_id` VARCHAR(16)  NOT NULL,
  `date_id` VARCHAR(8) NOT NULL,
  `qua_id` VARCHAR(4)  NOT NULL,
  `fh` DECIMAL(16,6) DEFAULT NULL,
  `dl` DECIMAL(16,6) DEFAULT NULL,
  PRIMARY KEY (`strative_id`,`date_id`,`qua_id`)

) ENGINE=MYISAM;


ALTER TABLE D_TF_DATA_AGGREGATION_1 DATA DIRECTORY= '/ibddir';

ALTER TABLE D_TF_DATA_AGGREGATION_1 INDEX DIRECTORY= '/ibddir';

show warnings;

-- alter操作 --  <INDEX DIRECTORY> option ignored
-- alter操作 --   <DATA DIRECTORY> option ignored

-- 可见指定DATA DIRECTORY 和INDEX DIRECTORY操作只可以在创建表的时候指定,不可以alter(ALTER TABLE忽略DATA DIRECTORY和INDEX DIRECTORY表选项)。


注: 这种可以指定INDEX DIRECTORY 和 DATA DIRECTORY 操作,在当磁盘分区不足的时候,可以将数据文件放在其它的分区上。

注: INNODB 表要是独立表空间(innodb_file_per_table=1)。

注: 目前只有5.6才支持单表指定目录,且目录是mysql:mysql。

注: 在Windows中将忽略DATA DIRECTORY和INDEX DIRECTORY选项。

注: 对于Myisam表要启用符号链接:(--symbolic-links,--skip-symbolic-links  分别对应启用和禁用符号链接支持。启用符号链接表示可以使用create table的index directory或data directory选项将MyISAM索引文件或数据文件链接到另一个目录,如果删除或重命名表,符号链接指向的文件也将被删除或重命名。 参见create table语法。在windows中,启用符号链接,可以通过创建包含目标目录路径的directory.sym文件来建立数据库目录的符号链接。将忽略data directory和index directory,因为windows并不支持符号链接,在非功能realpath()调用的系统中,该功能也将被忽略。)

注: NO_DIR_IN_CREATE 创建表时,将忽略所有的data directory和index directory,并且对从服务器有用。

注: 如果在主服务器上的CREATE TABLE 语句中使用了DATA DIRECTORY或INDEX DIRECTORY 子句,子句也可以在从服务器上使用。如果在从服务器主机文件系统中不存在一致的目录或虽然存在但不能被从服务器访问,则会带来问题。MySQL 5.1 支持一个称为NO_DIR_IN_CREATE的sql_mode选项。如果从服务器运行时将SQL 模式设置为包括该选项,复制CREATE TABLE 语句时将忽略这些子句。结果是在表的数据库目录中创建了MyISAM数据和索引文件。

注: CREATE TABLE...LIKE 不会复制对原表或外键定义指定的DATA DIRECTORY或INDEX DIRECTORY 表选项。




-----------------------------------------------------------------------------------------------------------

注:

(1) 当修改表引擎时:

INNODB 表转为 MYISAM时,只会指定DATA DIRECTORY = '/var/lib/mysqldata',没有指定INDEX DIRECTORY= '/var/lib/mysqldata',则索引文件就在默认目录下。

MYISAM 表转为 INNODB时,指定DATA DIRECTORY = '/var/lib/mysqldata'

(2) 在不同的库下,指定MYISAM表的路径到同一位置时,不能有重复的表。

因为 MYISAM表直接在/var/lib/mysqldata 目录下,而INNODB的表在/var/lib/mysqldata  目录下有库目录。


你可能感兴趣的:(mysql,index,Data,Directory,Directory,数据文件存储路径)