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;


数据恢复

原文地址:https://www.cnblogs.com/klvchen/p/12296762.html

时间: 2024-10-28 17:47:54

MySQL 存储引擎 (二)的相关文章

mysql存储引擎(二)

mysql存储引擎(二) mysql存储引擎二 MEMORY MERGE BerkeleyDB存储引擎 MEMORY MEMORY存储引擎通过采用内存中的内容来创建表.每个Memory表实际上和一个磁盘文件关联起来,文件名采用"表名.frm"的格式.Memory类型的表访问速度极快,因为数据源来自内存,所以数据库关闭时,内存中的数据就会发生丢失.默认使用Hash索引. mysql> create table memory_table( id int primary key, na

mysql 存储引擎 myisam innodb 区别

虽然MySQL里的存储引擎不只是MyISAM与InnoDB这两个,但常用的就是它俩了.可能有站长并未注意过MySQL的存储引擎,其实存储引擎也是数据库设计里的一大重要点,那么博客系统应该使用哪种存储引擎呢?下面我们分别来看两种存储引擎的区别. MySQL存储引擎MyISAM与InnoDB的区别 一.InnoDB支持事务,MyISAM不支持,这一点是非常之重要.事务是一种高级的处理方式,如在一些列增删改中只要哪个出错还可以回滚还原,而MyISAM就不可以了. 二.MyISAM适合查询以及插入为主的

五花八门的MySQL存储引擎,哪一盘是你的菜?

一.MYSQL中存储引擎分类及应用场合 MyISAM.InnoDB.MERGE.MEMORY(HEAP).BDB(BerkeleyDB).EXAMPLE.FEDERATED.ARCHIVE.CSV.BLACKHOLE. MySQL支持数个存储引擎作为对不同表的类型的处理器.MySQL存储引擎包括处理事务安全表的引擎和处理非事务安全表的引擎: 1.MyISAM管理非事务表 它提供高速存储和检索,以及全文搜索能力.MyISAM在所有MySQL配置里被支持,它是默认的存储引擎,除非你配置MySQL默认

mysql 存储引擎对比

mysql 存储引擎:存储引擎也通常被称作"表类型" 修改原始hellodb.sql存储引擎为InnoDB  sed -i '[email protected][email protected][email protected]' /home/hellodb.sql 导入修改后的sql文件  mysql -uroot -p  mydb < /home/hellodb.sql 查看表引擎,状态  mysql> show engines;    mysql> show t

mysql基础之-mysql存储引擎概述(八)

0x01 mysql 存储引擎:存储引擎也通常被称作“表类型” mysql> show engines;   --- 查看当前所有所支持的存储引擎 mysql> show table status 存储引擎格式: SHOW TABLE STATUS [{FROM | IN} db_name] [LIKE 'pattern' | WHERE expr] mysql> show table status in hellodb where Name='class'\G Name 表名 Engi

MySql学习 - MySql存储引擎笔记

MySql存储引擎 MySql数据库有很多种存储引擎,不同的引擎特点不同,有各自的优点.最近在看MySQL技术内幕,刚好做下笔记. InnoDB存储引擎 这个是自从MySQL 5.5.8版本后的默认存储引擎,也是我平时使用的搜索引擎.支持事务操作,主要面向联机事务处理的应用,特点是行锁设计,支持外键,也支持类似Oracle的非锁定读这种默认读取操作不会产生锁. 通过使用版本控制来获得高并发并且实现了SQL标准的四种隔离级别,默认是REPEATABLE级别(可以防止脏读和非重复读).同时使用一种n

MySql存储引擎+表解压缩机制+索引+查询缓存机制+慢查询日志

一.大型网站优化之MySql优化 1.优化和不优化的对比的 在业界当中我们有一个叫大数据(big data)的概念,所谓的大数据指代千万级别以上的数据作为起步的数据.所以我们现在需要对两张都具有50331650条记录的表进行查询对比,其中表名为tbl_no的表是没有做过任何优化手段的表,表名为tbl_yes的表是做过优化手段的表.这个实验的目的是观察具有优化手段和不具有优化手段的查询中速度的差别. 实验条件: 1)两张表的数据记录总数是相同的 2)两张表的数据字段结构也是一样的 3)查询的记录的

mysql 存储引擎,字段类型,索引介绍

一:常用的存储引擎:1,myisam:    我建立了一个MyISAM引擎的tb_Demo表,那么就会生成以下三个文件:     1>tb_demo.frm,存储表定义:     2>tb_demo.MYD,存储数据:     3>tb_demo.MYI, 存储索引.   特点: 查询快,写入慢,支持表锁,支持符合全文索引    适合管理邮件,web服务器的日志数据,选择密集结构表的时候用,插入密集结构   表的时候用2,innodb     1>更新密集的表.InnoDB存储引擎

MySQL存储引擎认识

存储引擎是MySQL的一大特色,学习MySQL必须要了解它,知其各种engines的差异,怎样正确的选择与使用之.因此简要介之. 1. 查看系统所支持的引擎类型,如截图中的命令. 2. 设定系统使用一个指定的存储引擎   有很多方法指定一个要使用的存储引擎.比较简单的方法是在MySQL配置文件中my.ini或my.cnf中设置一个默认的引擎类型,比如使用default_storage_engine=innodb 选项:或在启动数据库服务器时在命令行后面加上--default-storage-en