zoukankan      html  css  js  c++  java
  • MySQL 存储引擎 (二)

    InnoDB存储引擎物理存储结构

    ibdata1                    : 系统数据字典信息(统计信息),UNDO表空间等数据
    ib_logfile0 ~ ib_logfile1  : REDO日志文件,事务日志文件。
    ibtmp1                     : 临时表空间磁盘位置,存储临时表
    frm                        : 存储表的列信息
    ibd                        : 表的数据行和索引
    

    共享表空间

    需要将所有数据存储到同一个表空间中 ,管理比较混乱
    5.5 版本出现的管理模式, 也是默认的管理模式。
    5.6 版本, 共享表空间保留,只用来存储:数据字典信息,undo,临时表。
    5.7 版本, 临时表被独立出来了
    8.0 版本, undo也被独立出去了
    
    select @@innodb_data_file_path;
    +-------------------------+
    | @@innodb_data_file_path |
    +-------------------------+
    | ibdata1:12M:autoextend  |
    +-------------------------+
    # 这里的目录是 my.cnf 中 datadir定义的目录
    
    mysql> show variables like '%extend%';
    +-----------------------------+-------+
    | Variable_name               | Value |
    +-----------------------------+-------+
    | innodb_autoextend_increment | 64    |
    +-----------------------------+-------+
    # 每次增长64M
    

    独立表空间

    从 5.6 后,默认表空间不再使用共享表空间,替换为独立表空间。
    独立表空间主要存储的是用户数据,存储特点为:一个表一个ibd文件,存储数据行和索引信息
    
    MySQL的存储引擎日志:
    Redo Log: ib_logfile0,ib_logfile1,重做日志
    Undo Log: ibdata1 ibdata2(存储在共享表空间中),回滚日志
    临时表:ibtmp1,在做join union操作产生临时数据,用完就自动清除
    

    查看是否开启独立表空间

    select @@innodb_file_per_table;
    +-------------------------+
    | @@innodb_file_per_table |
    +-------------------------+
    |                       1 |
    +-------------------------+
    

    表空间迁移

    alter table klvchen.t2 discard tablespace;      # 注意这个命令会删除 ibd 文件,需要提前备份
    alter table klvchen.t2 import tablespace;
    
    # 若 t2.frm 损坏,t2.ibd 数据还在,可以通过建立一个相同表空间,重命名为 t2.frm
    


    虽然 t2.ibd 还在,但是 mysql 无法识别
    处理方式:

    # 在 mysql 中重建一个相同表结构的 tmp 表
    CREATE TABLE `tmp` (
      `id` int(11) DEFAULT NULL
    ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
    
    # 在 mysql datadir 中复制 frm 文件
    cp tmp.frm t2.frm
    chowm mysql.mysql t2.frm
    
    # 备份 t2.ibd 
    cp t2.ibd /tmp
    
    # 在 mysql 中执行 discard tablespace
    alter table klvchen.t2 discard tablespace;
    
    # 把备份的 t2.ibd 文件恢复到位置
    cp /tmp/t2.ibd .
    chowm mysql.mysql t2.ibd
    
    # 在 mysql 中执行 import tablespace
    alter table klvchen.t2 import tablespace;
    


    数据恢复

  • 相关阅读:
    《理解 ES6》阅读整理:块绑定(Block Binding)
    Webpack使用教程六(Plugins)
    Webpack使用教程五(Babel)
    Webpack使用教程四(Loaders)
    Webpack使用教程三(webpack-dev-server)
    Webpack使用教程二
    Node.js、npm和webpack的安装
    Maven的安装和配置
    Java事件处理机制
    MySQL安装
  • 原文地址:https://www.cnblogs.com/klvchen/p/12296762.html
Copyright © 2011-2022 走看看