MySQL表格路径_mysql之 表数据存放路径非datadir目录

本文详细介绍了如何在MySQL中改变表的默认存储路径,包括使用`datadirectory`选项创建表并指定存储位置,以及利用MySQL 5.7后的通用表空间语法创建和管理数据文件。通过示例展示了创建表空间、创建表并关联表空间的过程,以及文件系统中的实际布局。
摘要由CSDN通过智能技术生成

假如,新建一张表,并让该表的存储路径 不是默认的/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)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值