• mysql之 表数据存放路径非datadir目录


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

  • 相关阅读:
    2017 ACM/ICPC Asia Regional Qingdao Online Solution
    2017ACM/ICPC Guangxi Invitational Solution
    POJ
    The Maximum Unreachable Node Set 【17南宁区域赛】 【二分匹配】
    17 南宁区域赛 F
    17南宁区域赛 I
    17南宁区域赛 J
    CodeForces
    c/c++ 输入输出技巧
    ZOJ
  • 原文地址:https://www.cnblogs.com/andy6/p/9582622.html
Copyright © 2020-2023  润新知