创建表的时候把表空间定义到其他目录
一、需求场景
可能有这么一种场景,系统中是 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,启动数据库之后再删除表