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)

  • 相关阅读:
    MVC模式简单介绍
    Android AES加密算法及事实上现
    01背包问题
    C++继承经典样例
    [React] React Fundamentals: Using Refs to Access Components
    [React] React Fundamentals: Owner Ownee Relationship
    [React] React Fundamentals: State Basics
    [React] React Fundamentals: First Component
    [Javascript] Lodash: Refactoring Simple For Loops (_.find, _.findLast, _.filter)
    [Javascript] Create an Array concatAll method
  • 原文地址:https://www.cnblogs.com/andy6/p/9582622.html
Copyright © 2011-2022 走看看