创建表的时候把表空间定义到其他目录

一、需求场景

可能有这么一种场景,系统中是 SSD 跟 SATA 混用,需要把经常读写的数据放在SSD上面,历史数据放到SATA上面

二、实验场景

在test库创建一个表 t1 ,定义目录到 /tmp 下面

create database test;
use test;
create table t1(id int primary key) data directory = '/tmp';

cd 到 /tmp 目录下

cd /tmp
ls -l
drwxr-x---. 2 mysql mysql  20 Nov  7 21:48 test
cd test
ls -l
-rw-r-----. 1 mysql mysql 98304 Nov  7 21:48 t1.ibd

/tmp 下多了个 test 目录,test下有了t1.ibd 表空间。但是有个疑问,就是表定义文件在哪?难道还在datadir下面?

cd 到 datadir(指的是datadir定义的目录) 下

cd /database/mysql/mysql3306/data/test/
ls -l
-rw-r-----. 1 mysql mysql   67 Nov  7 21:43 db.opt
-rw-r-----. 1 mysql mysql 8556 Nov  7 21:48 t1.frm
-rw-r-----. 1 mysql mysql   16 Nov  7 21:48 t1.isl

果然在 datadir 下面,不过还多了一个 t1.isl文件,这个是什么鬼。先不管,cat 一下

cat t1.isl 
/tmp/test/t1.ibd

好像是指定到 /tmp/test/t1.ibd。看一下官方的解释

包含表空间路径isl文件文件在datadir下创建。该 isl文件被视为符号链接。

三、注意事项

如果目录之外的表空间盘被卸载了,数据库是启动不了的。处理办法是删掉 isl,启动数据库之后再删除表

 

 

posted @ 2018-11-08 11:35  Ziroro  阅读(508)  评论(0编辑  收藏  举报