建立表的時候把表空間定義到其他目錄
阿新 • • 發佈:2018-11-08
一、需求場景
可能有這麼一種場景,系統中是 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-----. 1mysql 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 16Nov 7 21:48 t1.isl
果然在 datadir 下面,不過還多了一個 t1.isl檔案,這個是什麼鬼。先不管,cat 一下
cat t1.isl /tmp/test/t1.ibd
好像是指定到 /tmp/test/t1.ibd。看一下官方的解釋
包含表空間路徑的isl檔案檔案在datadir下建立。該 isl
檔案被視為符號連結。
三、注意事項
如果目錄之外的表空間盤被解除安裝了,資料庫是啟動不了的。處理辦法是刪掉 isl,啟動資料庫之後再刪除表