您的位置:威尼斯官方网站 > 威尼斯官方网站登录 > 如果没有设置innodb

如果没有设置innodb

发布时间:2019-12-31 19:29编辑:威尼斯官方网站登录浏览(166)

     

     InnoDB选取按表空间(tablespaceState of Qatar的主意举行仓库储存数据, 默许配置境况下会有叁个上马大小为10MB, 名称为ibdata1的文书, 该公文正是默许的表空间文件(tablespce file),用户能够由此参数innodb_data_file_path对其开展安装,能够有多个数据文件,若无安装innodb_file_per_table的话, 那么些Innodb存款和储蓄类型的表的数量都位居这些分享表空间中,而系统变量innodb_file_per_table=1的话,那么InnoDB存款和储蓄引擎类型的表就能够产生二个独立表空间,独立表空间的命名法则为:表名.idb. 那些单独的表空间文件仅存款和储蓄该表的数量、索引和插入缓冲BITMAP等新闻,此外音讯可能存放在分享表空间中,那么什么样鉴定识别数据库中什么表是独立表空间,哪些表是分享表空间吗?

     

     

     

    措施1:通过ibd文件判定

     

     

    假定表的蕴藏引擎是InnoDB,并且表空间(tablespace)是分享表空间的话,那么数据库对应目录下边是不曾"表名.ibd"文件的。独立表空间的表的话,则有"表名.ibd"文件。只是那么些措施很笨,对于生产情形,大量的表经过这种方法判定,确实不是三个好办法。

     

    mysql> show variables like 'innodb_file_per_table';
    
    +-----------------------+-------+
    
    | Variable_name         | Value |
    
    +-----------------------+-------+
    
    | innodb_file_per_table | ON    |
    
    +-----------------------+-------+
    
    1 row in set (0.01 sec)
    
     
    
    mysql> use MyDB;
    
    Reading table information for completion of table and column names
    
    You can turn off this feature to get a quicker startup with -A
    
     
    
    Database changed
    
    mysql> create table Independent_tablespace(name  varchar(64));
    
    Query OK, 0 rows affected (0.03 sec)
    
     
    
    mysql> exit
    
     
    
    [root@DB-Server ~]# cd /data/mysql/MyDB/
    
    [root@DB-Server MyDB]# ls -lrt Independent_tablespace*
    
    -rw-rw---- 1 mysql mysql  8560 Aug 21 22:05 Independent_tablespace.frm
    
    -rw-rw---- 1 mysql mysql 98304 Aug 21 22:05 Independent_tablespace.ibd
    
    [root@DB-Server MyDB]# 
    

     

    在布署文件my.cnf里面安装innodb_file_per_table=0,重启MySQL服务,创建表common_tablespace,你会在数额目录看见独有common_tablespace.frm文件。

     

    mysql> show variables like 'innodb_file_per_table';
    
    +-----------------------+-------+
    
    | Variable_name         | Value |
    
    +-----------------------+-------+
    
    | innodb_file_per_table | OFF   |
    
    +-----------------------+-------+
    
    1 row in set (0.00 sec)
    
     
    
    mysql> use MyDB;
    
    Reading table information for completion of table and column names
    
    You can turn off this feature to get a quicker startup with -A
    
     
    
    Database changed
    
    mysql> create table common_tablespace(name varchar(64));
    
    Query OK, 0 rows affected (0.02 sec)
    
     
    
    mysql> exit
    
    Bye
    
    [root@DB-Server MyDB]# ls -lrt common_tablespace*
    
    -rw-rw---- 1 mysql mysql 8560 Aug 21 22:08 common_tablespace.frm
    
    [root@DB-Server MyDB]# 
    

     

     

    方法2:使用INFORMATION_SCHEMA.INNODB_SYS_TABLESPACES来判别。

     

     

    MySQL 5.6

     

    MySQL 5.6 INFORMATION_SCHEMA.INNODB_SYS_TABLESPACES 关于这一个系统表提供了有关表格的格式和仓库储存个性,包含行格式,压缩页面大小位级其他音信(如适用),INNODB的表空间消息。

     

    The INNODB_SYS_TABLESPACES table provides metadata about InnoDB tablespaces, equivalent to the information in the SYS_TABLESPACES table in the InnoDB data dictionary.

     

       花了点时间了然了眨眼之间间INFORMATION_SCHEMA数据库下边包车型客车INNODB_SYS_TABLESPACES那一个表,遂写了多个SQL来判断那多少个InnoDB引擎表是独立表空还是分享表空间

     

    分享表空间:

     

     
    
    SELECT TABLE_SCHEMA
    
        ,TABLE_NAME
    
        ,TABLE_TYPE
    
        ,N'共享表空间' AS TABLE_SPACE
    
        ,ENGINE
    
        ,VERSION
    
        ,TABLE_ROWS
    
        ,AVG_ROW_LENGTH
    
        ,CREATE_TIME
    
        ,UPDATE_TIME
    
    FROM INFORMATION_SCHEMA.TABLES  T
    
    LEFT JOIN INFORMATION_SCHEMA.INNODB_SYS_TABLESPACES I ON  CONCAT(T.TABLE_SCHEMA, '/',T.TABLE_NAME)=I.NAME
    
    WHERE I.NAME IS NULL  AND T.TABLE_SCHEMA='MyDB' AND T.ENGINE='InnoDB';
    

     

    图片 1

     

    唯独这几个剧本有个细微bug,对于富含特殊字符的表名,有比超大可能率现身错误景况,那个是因为只要表名包涵特殊字符,那么文件名或INFORMATION_SCHEMA.INNODB_SYS_TABLESPACES中的NAME做了转义管理,如下所示

     

    图片 2

     

    独立表空间

     

     
    
    SELECT TABLE_SCHEMA
    
        ,TABLE_NAME
    
        ,TABLE_TYPE
    
        ,N'独立表空间' AS TABLE_SPACE
    
        ,ENGINE
    
        ,VERSION
    
        ,TABLE_ROWS
    
        ,AVG_ROW_LENGTH
    
        ,CREATE_TIME
    
        ,UPDATE_TIME
    
    FROM INFORMATION_SCHEMA.TABLES  T
    
    INNER JOIN INFORMATION_SCHEMA.INNODB_SYS_TABLESPACES I ON  CONCAT(T.TABLE_SCHEMA, '/',T.TABLE_NAME)=I.NAME
    
    WHERE T.TABLE_SCHEMA='MyDB'  AND T.ENGINE='InnoDB';
    

     

    图片 3

     

     

    方法3 :INFORMATION_SCHEMA.INNODB_SYS_TABLES判别

     

     

    MySQL 5.7

     

         假如是MySQL 5.7的话, 比MySQL 5.6有多了黄金时代种格局,MySQL 5.7 的INFORMATION_SCHEMA.INNODB_SYS_TABLESPACES中多了SPACE_TYPE字段,可是其值全部为Single,而INFORMATION_SCHEMA.INNODB_SYS_TABLES中也多了字段SPACE_TYPE, 其值有Single与System 分别代表单独表空间和分享表空间。

     

     

    #单独表空间

     

    SELECT * FROM  INFORMATION_SCHEMA.INNODB_SYS_TABLES
    
    WHERE SPACE_TYPE='Single';
    
     
    
     
    
     
    
    SELECT TABLE_SCHEMA
    
        ,TABLE_NAME
    
        ,TABLE_TYPE
    
        ,N'独立表空间' AS TABLE_SPACE
    
        ,ENGINE
    
        ,VERSION
    
        ,TABLE_ROWS
    
        ,AVG_ROW_LENGTH
    
        ,CREATE_TIME
    
        ,UPDATE_TIME
    
    FROM INFORMATION_SCHEMA.TABLES  T
    
    INNER JOIN INFORMATION_SCHEMA.INNODB_SYS_TABLESPACES I ON  CONCAT(T.TABLE_SCHEMA, '/',T.TABLE_NAME)=I.NAME
    
    WHERE T.TABLE_SCHEMA='YourDatabase'  AND T.ENGINE='InnoDB';
    

     

    #分享表空间

     

    SELECT * FROM  INFORMATION_SCHEMA.INNODB_SYS_TABLES
    
    WHERE SPACE_TYPE='System';
    
     
    
     
    
       
    
    SELECT TABLE_SCHEMA
    
        ,TABLE_NAME
    
        ,TABLE_TYPE
    
        ,N'共享表空间' AS TABLE_SPACE
    
        ,ENGINE
    
        ,VERSION
    
        ,TABLE_ROWS
    
        ,AVG_ROW_LENGTH
    
        ,CREATE_TIME
    
        ,UPDATE_TIME
    
    FROM INFORMATION_SCHEMA.TABLES  T
    
    LEFT JOIN INFORMATION_SCHEMA.INNODB_SYS_TABLESPACES I ON  CONCAT(T.TABLE_SCHEMA, '/',T.TABLE_NAME)=I.NAME
    
    WHERE I.NAME IS NULL  AND T.TABLE_SCHEMA='YourDatabase' AND T.ENGINE='InnoDB'
    

     

     

     

     

    方法4: INFORMATION_SCHEMA.INNODB_TABLES判别

     

     

    MySQL 8.0

     

    假诺是MySLQ 8.0的话,还多了风华正茂种办法, 那正是透过INFORMATION_SCHEMA.INNODB_TABLES来决断,那么些新扩充的系统表能够通过SPACE_TYPE字段来区分共享表空间与独立表空间

     

    SELECT * FROM  INFORMATION_SCHEMA.INNODB_TABLES WHERE SPACE_TYPE=’Single’;

     

     

     

    参照他事他说加以侦查资料

     

    本文由威尼斯官方网站发布于威尼斯官方网站登录,转载请注明出处:如果没有设置innodb

    关键词:

上一篇:没有了

下一篇:没有了