MySQL InnoDB表空间及日志文件简介

MySQL一个显著的特点是其可插拔的存储引擎,因此MySQL文件分为两种:一种是MySQL服务器本身的文件(主要是一 些日志文件,如错误日志、二进制日志等),所有的存储引擎共享;另一种是和具体存储引擎相关的文件。本文主要介 绍和InnoDB存储引擎相关的文件(数据+日志),至于MySQL服务器本身的日志文件,可以参考《[MySQL] 日志文件概述 》。

InnoDB表空间文件

InnoDB在很多方面和Oracle非常像,它的数据也是按表空间存储的,表空间是一个在逻辑上为整体的存储块,默认情 况下,所有的数据都放在一个共享的存储表空间里。

以下两个变量和共享表空间相关:

1)innodb_data_home_dir:设置共享表空间的主目录,默认等于datadir的值

2)innodb_data_file_path:设置共享表空间文件,可以包含多个文件,它们之间用分号隔开。

如果你不想把所有数据放在共享表空间里,而是想基于每个表单独生成一个文件,那么把innodb_file_per_table设 为ON即可,这样将会为每个表创建一个表空间,但即便如此,共享表空间也是必不可少的,因为数据字典还需要放在里 面,只是它不会占用那么多空间了。

下图显示了innodb的存储方式:

上图中主要有以下几种存储文件:

1)表结构定义文件(.frm):MySQL里每个表、每个视图都有一个对应的.frm文件用于记录表和视图的定义。注意:该 文件和存储引擎无关,属于MySQL数据库本身的文件。

2)共享表空间文件(ibdata)

3)单独表空间文件(.ibd)

同时,为了提高性能,可以通过变量innodb_buffer_pool_size配置表空间文件的缓冲区。

InnoDB日志文件

innodb除了MySQL服务器本身的日志文件之外,还有它独有的日志文件:重做日志文件,用于记录事务日志,如果数 据库由于宕机导致实例失败,重新启动时,就可以利用重做日志恢复到宕机前的一致性状态。

MySQL的重做日志和Oracle的很类似,通过循环的方式覆盖重用,下图显示了一个拥有3个重做日志文件的重做日志文 件组:

和Innodb日志文件相关的变量有:

1)innodb_log_group_home_dir:定义日志文件的目录

2)innodb_log_files_in_group:定义日志文件数目

3)innodb_log_file_size:定义日志文件大小

4)innodb_log_buffer_size:日志缓冲区大小

这里有个疑问,同样是记录事务日志,InnoDB的重做日志文件和MySQL自身的二进制文件有什么区别?它们的区别主 要有以下三点:

1)首先,范围不同。二进制文件记录所有与MySQL相关的日志记录,包括InnoDB,MyISAM,Heap等存储引擎的日志。 而InnoDB的重做日志只记录InnoDB相关的事务日志。

2)其次,内容不同。二进制文件记录的是关于一个事务的具体操作内容,而InnoDB的重做日志记录每个数据页 (page)更改的物理情况。

3)写入的时间不同。二进制文件在事务提交之前记录,在事务进行过程中,不断有重做日志条目写入重做日志文件 中。

查看本栏目更多精彩内容:http://www.bianceng.cnhttp://www.bianceng.cn/database/MySQL/

时间: 2024-10-03 18:17:34

MySQL InnoDB表空间及日志文件简介的相关文章

Oracle的表空间与数据文件简介

一.概念 表空间:是一个或多个数据文件的逻辑集合 表空间逻辑存储对象:永久段-->如表与索引 临时段-->如临时表数据与排序段 回滚段-->用于事物回滚或闪回内存的撤销数据 表空间分类:系统表空间(system.sysaux),非系统表空间 一个表空间至少包含一个数据文件,一个数据文件只能属于一个表空间. 不可或缺的几个表空间: SYSTEM --->字典表空间,不能被损坏 UNDO    --->dml,dql把数据快照到此,数据提交即消失(用于恢复) SYSAUX    

Oracle的数据库、表空间及数据文件简介

数据文件是数据库的物理存储单位,而表空间TableSpace则是数据库的逻辑组成部分.数据库的数据是存储在表空间中的,而一个表空间可以由一个或多个数据文件组成,一个数据文件只能属于一个表空间.一旦数据文件被加入到某个表空间后,就不能删除这个文件,如果要删除某个数据文件,只能删除其所属于的表空间才行. 数据库,表空间,数据文件是紧密关联的,但它们有着重要的区别: 数据库和表空间 一个Oracle数据库由一个或多个叫做表空间的逻辑存储单元组成,表空间存储了所有数据库的数据. 表空间和数据文件 在Or

MySQL Innodb表导致死锁日志情况分析与归纳_Mysql

案例描述在定时脚本运行过程中,发现当备份表格的sql语句与删除该表部分数据的sql语句同时运行时,mysql会检测出死锁,并打印出日志.两个sql语句如下:(1)insert into backup_table select * from source_table(2)DELETE FROM source_table WHERE Id>5 AND titleWeight<32768 AND joinTime<'$daysago_1week'teamUser表的表结构如下:PRIMARY

Oracle 表空间与数据文件

--============================== --Oracle 表空间与数据文件 --============================== /* 一.概念     表空间:是一个或多个数据文件的逻辑集合     表空间逻辑存储对象:永久段-->如表与索引                         临时段-->如临时表数据与排序段                      回滚段-->用于事物回滚或闪回内存的撤销数据     表空间分类:系统表空间(sys

MySQL中二进制与重做日志文件的基本概念学习教程_Mysql

二进制日志二进制日志记录了所有对数据库执行更改的操作,二进制主要有以下两种作用: 1.恢复(recovery)2.复制(replication) 二进制日志的启动:配置参数log-bin[=name],如果不指定name,则默认二进制日志文件名为主机名,后缀名为二级制日志的序列号,所在路径为数据库所在目录. 以index为后缀的文件为二进制日志的索引文件,用来存储过往生产的二进制日志. 和二进制日志相关的参数: max_binlog_size.binlog_cache_size.sync_bin

RDS for MySQL InnoDB 表级锁等待

RDS for MySQL InnoDB 表级锁等待   1. 显式 lock table 2. 隐式 lock table 在 RDS MySQL 实例日常使用中,有些情况下会发现出现 InnoDB 表级锁等待的情况,下面列出常见的2个原因.  1. 显式 lock table 执行了 lock tables tab_name read; 导致 DML 会话等待在表的表级锁上. 会话 1 lock tables tab_name read; 会话 2 会话 3   2. 隐式 lock tab

[20160329]表空间与数据文件.txt

[20160329]表空间与数据文件.txt --昨天跟别人聊天,提到招聘DBA,一些dba这些基本的概念不清楚. --表空间可以是一个逻辑的概念,包含多个数据文件.而一个数据文件仅仅属于一个表空间. --表空间offline,一般不需要recover 恢复.除非加入immediate 参数. --而数据文件offline,一定需要恢复,才能online.如果是非归档模式必须在后面加入drop参数(自己曾经对于这存在混乱). --不要误解后面这个drop不是删除的意思,我以前理解就存在错误. -

浅析mysql 共享表空间与独享表空间以及他们之间的转化_Mysql

innodb这种引擎,与MYISAM引擎的区别很大.特别是它的数据存储格式等.对于innodb的数据结构,首先要解决两个概念性的问题: 共享表空间以及独占表空间.什么是共享表空间和独占表空间共享表空间以及独占表空间都是针对数据的存储方式而言的.共享表空间:  某一个数据库的所有的表数据,索引文件全部放在一个文件中,默认这个共享表空间的文件路径在data目录下. 默认的文件名为:ibdata1  初始化为10M.独占表空间:  每一个表都将会生成以独立的文件方式来进行存储,每一个表都有一个.frm

MYSQL InnoDB表锁

InnoDB锁问题 InnoDB与MyISAM的最大不同有两点:一是支持事务(TRANSACTION):二是采用了行级锁.行级锁与表级锁本来就有许多不同之处,另外,事务的引入也带来了一些新问题.下面我们先介绍一点背景知识,然后详细讨论InnoDB的锁问题. 2.并发事务处理带来的问题 相对于串行处理来说,并发事务处理能大大增加数据库资源的利用率,提高数据库系统的事务吞吐量,从而可以支持更多的用户.但并发事务处理也会带来一些问题,主要包括以下几种情况.      更新丢失(ost Update):