zoukankan      html  css  js  c++  java
  • 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)

  • 相关阅读:
    Maven依赖
    Maven坐标
    初识Maven POM
    Maven配置
    相似文本文档分析之SimHash算法
    Ubuntu14.10下JDK编译安装详细操作说明
    Ubuntu14.10下Tomcat编译安装 详细操作说明
    ubuntu 14.10 编译安装 Ruby
    ubuntu 14.10 编译安装 Python
    ubuntu 14.10 编译安装 Golang
  • 原文地址:https://www.cnblogs.com/andy6/p/9582622.html
Copyright © 2011-2022 走看看