1. 程式人生 > >建立表的時候把表空間定義到其他目錄

建立表的時候把表空間定義到其他目錄

一、需求場景

可能有這麼一種場景,系統中是 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,啟動資料庫之後再刪除表