mysql之 表資料存放路徑非datadir目錄

2021-08-27 03:01:48 字數 2703 閱讀 5919

假如,新建一張表,並讓該錶的儲存路徑 不是預設的/path/to/datadir/dbname 。而是 指定儲存的位置 應該如何處理?

方法一shell> mkdir /generalt1

shell> chown mysql.mysql /generalt1

mysql> create table test_ger1 (a int) data directory='/generalt1';

query ok, 0 rows affected (0.15 sec)

shell> cd /generalt1

shell> ll test_ger1* # 在datadir 的 test 目錄下

-rw-r-----. 1 mysql mysql 8554 jan 3 16:41 test_ger1.frm

-rw-r-----. 1 mysql mysql 36 jan 3 16:41 test_ger1.isl # 這是鏈結檔案,鏈結到上面的ibd檔案

shell> cat test_ger1.isl # 乙個文字檔案,內容就是idb檔案的路徑

/generalt1/test/test_ger1.ibd

方法二在mysql 5.7之後,可以使用`通用表空間`

語法:create tablespace tablespace_name add datafile 'file_name' [file_block_size = value] [engine [=] engine_name]

-- 1: 建立乙個通用表空間

mysql> create tablespace ger_space add datafile '/generalt1/ger_space.ibd' file_block_size=8192;

query ok, 0 rows affected (0.07 sec)

-- datafile 指定儲存路徑後,在datadir下會產生乙個isl檔案,該檔案的內容為general space的ibd檔案的路徑

-- 如果datafile不指定路徑,則ibd檔案預設儲存在datadir目錄下,且不需要isl檔案了

mysql> create tablespace ger_space2 add datafile 'ger_space2.ibd' file_block_size=8192;

query ok, 0 rows affected (0.06 sec)

shell> ll ger*

-rw-r-----. 1 mysql mysql 32768 jan 3 16:51 ger_space2.ibd # 未指定路徑,存放於datadir目錄

-rw-r-----. 1 mysql mysql 26 jan 3 16:50 ger_space.isl # 指定了其他路徑,存在isl鏈結檔案

shell> cat ger_space.isl

/generalt1/ger_space.ibd # ibd檔案真實存在的路徑

mysql> select * from information_schema.innodb_sys_tablespaces where name='ger_space'\g

*************************** 1. row ***************************

space: 96

name: ger_space

flag: 2304

file_format: any

row_format: any

page_size: 8192 -- page_size是8k

zip_page_size: 0

space_type: general -- general型別

fs_block_size: 0

file_size: 18446744073709551615

allocated_size: 2

compression: none

1 row in set (0.00 sec)

-- 2: 建立表

mysql> create table test_ger2 (a int) tablespace=ger_space;

query ok, 0 rows affected (0.11 sec)

shell> ll test_ger* # 在datadir 的 test 目錄下

-rw-r-----. 1 mysql mysql 8554 jan 3 16:41 test_ger1.frm

-rw-r-----. 1 mysql mysql 36 jan 3 16:41 test_ger1.isl

-rw-r-----. 1 mysql mysql 8554 jan 3 17:09 test_ger2.frm # 僅有乙個frm檔案

shell> ll /generalt1/

total 52

drwxr-x---. 2 mysql mysql 4096 jan 3 16:41 test

-rw-r-----. 1 mysql mysql 49152 jan 3 17:09 ger_space.ibd # test_ger2的ibd檔案其實儲存在ger_space.ibd的通用表空間中

mysql> create table test_ger3 (a int) tablespace=ger_space; -- test_ger3 也存放在ger_space.ibd中

query ok, 0 rows affected (0.09 sec)

修改mysql資料庫存放路徑

步驟 一 停止mysql服務 sudo service mysql stop二 新建目錄並移動現有資料庫 1 建立新的資料庫目錄 2 移庫 要在停止資料庫的情況下操作 三 修改配置檔案三處 1 修改mysql的配置檔案 vim etc mysql my.cnf但是它指向了下面的這個檔案,於是 sud...

mysql修改資料存放路徑(linux)

親測可以的,記錄下來 2018年2月5日 11 03 22 1 etc my.cnf mysqld 增加datadir data nas 2 etc rc.d init.d mysql 從 datadir data 修改為 datadir data nas 從 datadir set 修改為 dat...

修改MySQL資料庫存放路徑

mysql 資料庫預設存放路徑是 var lib mysql,要把它放在別的路徑下,方法如下 以下操作需root許可權 1.新建乙個要存放的資料庫的目錄,比如 home jeff mysql,mkdir mysql 2.將原資料庫目錄拷貝到新的目錄下 cp r var lib mysql hoem ...