构成MySQL数据库和InnoDB存储引擎表的各种类型文件,组要有以下文件

参数文件:告诉MySQL实例启动时在哪里可以找到,数据库文件,并且指定某些初始化参数,这些参数定义了某种内存结构的大小等设置

日志文件:用来记录MySQL实例对某种条件做出响应时写入的文件,如错误日志文件、二进制日志文件、慢查询日志文件、查询日志文件等

socket文件:当UNIX域套接字方式进行连接时需要的文件

pid文件:MySQL实例的进程ID文件

MySQL表结构文件:用来存放MySQL表结构定义文件

存储引擎文件:因为MySQL表存储引擎的关系,每个存储引擎都会有自己的文件来保存各种数据.这些存储引擎真正存储了记录和索引等数据

日志文件

错误日志:

错误日志文件对MySQL的启动、运行、关闭过程进行了记录。MySQL DBA在遇到问题时应该首先查看该文件以便定位问题。该文件不仅记录了所有的错误信息,也记录了一些警告信息或正确的信息

慢查询日志:

慢查询日志可帮助DBA定位可能存在问题的SQL语句,从而进行SQL语句层面的优化。例如,可以在MySQL启动时设一个阈值,将运行时间超过该值的所有SQL语句都记录到慢查询日志文件中该阈值可以通过参数long_query_time来设置,默认值为10,代表10秒

查询日志:

查询日志记录了所有对MySQL数据库请求的信息,无论这些请求是否得到了正确的执行。默认文件名为:主机名.log

二进制日志:

二进制日志记录了对MySQL数据库执行更改的所有操作(update,delete,insert 命令),但是不包括SELECT和SHOW这类操作,因为这类操作对数据本身并没有修改。

二进制日志主要有以下几种作用:

恢复:某些数据的恢复需要二进制日志,例如,在一个数据库全备文件回复后,用户可以通过二进制日志进行point-in-time的恢复

复制:通过复制和执行二进制日志使一台远程的MySQL数据库与一台MySQL数据库进行同步(master-slave同步)

审计:用户可以通过二进制日志中的信息来进行审计,判断是否有对数据库进行注入的攻击

当使用事务的表存储引擎时,所有未提交的二进制日志会被记录到一个缓存中去,等该事务提交时直接将缓冲中的二进制日志写入二进制日志文件,而该缓冲区的大小由binlog_cache_size决定,默认大小为32k。binlog_cache_size是基于会话的。在默认情况下,二进制日志并不是在每次写的时候同步到磁盘。因此,当数据库所在操作系统发生宕机时可能会有最后一部分数据没有写入二进制日志文件中。sync_binlog=1表示采用同步写磁盘的方式来写二进制日志,这时写操作不使用操作系统的缓冲来写二进制日志

套接字文件:

在unix系统下本地连接MySQL可以采用UNIX域套接字方式,这种方式需要一个套接字(socket)文件。套接字文件可由参数socket控制。一般在/tmp目录下名为mysql.sock

表结构定义文件:

MySQL插件式存储引擎的体系结构的关系,MySQL数据的存储是根据表进行的,每个表都会有与之对应的文件。但不论表采用何种存储引擎,MySQL都有一个以frm为后缀名的文件

这个文件记录了该表的表结构定义

表空间文件:

InnoDB采用将存储的数据按表空间(tablespace)进行存放的设计。在默认配置下会有一个初始大小为10MB,名为idbdata1的文件(该文件是共用表空间),该文件就是默认的表空间文件

设置innodb_data_file_path参数后,所有基于InnoDB存储引擎的表的数据都会记录到该共享表空间中。若设置了参数innodb_file_per_table,则用户可以将每个基于InnoDB存储引擎的表产生一个独立表空间。独立表空间的命名规则为:表名.ibd。通过这样的方式,用户不用将所有数据都存放在默认的表空间中。需要注意的是,这些单独的表空间文件,仅存储该表的数据、索引和插入缓冲BITMAP等信息,其余信息还是存放在默认的表空间。

重做日志文件:

默认情况下,在InnoDB存储引擎的数据目录下会有两个名为ib_logfile0和ib_logfile1的文件。在MySQL官方手册中将其称为InnoDB存储引擎的日志文件,不过更准确的定义应该是重做日志文件(redo log file)为什么强调是重做日志文件呢?因为重做日志文件对于InnoDB存储引擎至关重要,它们记录了对于InnoDB存储引擎的事务日志.

重做日志文件不能设置的太大,如果设置得很大,在恢复时可能需要很长时间,另一方面又不能设置得太小,否则可能导致一个事务的日志需要多次切换重做日志文件。此外重做日志文件太小会导致频繁地发生async checkpoint,导致性能的抖动。

重做日志和二进制日志的不同点:

二进制日志会记录所有与MySQL数据库有关的日志记录,包括InnoDB、MyISAM,Heap等其他存储引擎的日志。而InnoDB存储引擎的重做日志只记录有关该存储引擎本身的事务日志。二进制文件是逻辑日志。而InnoDB存储引擎的重做日志文件记录的是关于每个页的更改情况。

此外,写入的时间也不同,二进制日志文件仅在事务提交前进行提交,即只写磁盘一次,不论这时该事务多大。而在事务进行的过程中,却不断有重做日志被写入到重做日志文件中

MySQL文件和Innodb引擎文件的更多相关文章

  1. MySQL日志文件和InnoDB引擎文件简介

    MySQL和InnoDB的关系不在这里介绍了.但是大家都知道其中相关的文件很多,类型很多.看文件名就有点分布清楚了.所以在这里简单介绍下他们的文件. 我们直接看文件列表以及在后面直接加注释.做笔记. ...

  2. MySql锁与InnoDB引擎

    MySql锁与InnoDB引擎 mysql的锁是面试中很高频问题,也是我们在日常开发中经常会遇到但是我们并没有注意到的地方.我把我自己理解的锁通过本篇博文分享出来,由于锁需要结合事务来理解,本文只介绍 ...

  3. MySQL 通过.frm文件和.ibd文件实现InnoDB引擎的数据恢复

    起因是这样的,公司的领导表示说服务器崩了,修理好之后,只剩下数据库目录下的物理文件(即.frm文件与.ibd文件).然后,整了一份压缩包给我,叫我瞅一下能不能把数据恢复出来.我当场愣了一下,这都啥文件 ...

  4. Mysql优化系列--Innodb引擎下mysql自身配置优化-转

    原文链接:http://www.cnblogs.com/kevingrace/p/6133818.html 谢谢楼主 1.简单介绍 InnoDB给MySQL提供了具有提交,回滚和崩溃恢复能力的事务安全 ...

  5. 查看MySQL是否支持InnoDB引擎以及不支持的解决办法

    通过命令行进入mysql SHOW variables like "have_%"; 显示结果中会有如下3种可能的结果: have_innodb YES have_innodb N ...

  6. mysql数据恢复 根据旧备份的sql文件和当前data下的ibd文件恢复innodb引擎数据

    1.使用navicat fro mysql数据库工具进行恢复 2.将原有备份的sql文件导入数据库 3.新建一个空数据库 4将备份数据库的数据表复制到新建数据库(只复制表格式) 5.在命令行模式中 u ...

  7. MySQL innodb引擎下根据.frm和.ibd文件恢复表结构和数据

    记录通过.frm和.ibd文件恢复数据到本地 .frm文件:保存了每个表的元数据,包括表结构的定义等: .ibd文件:InnoDB引擎开启了独立表空间(my.ini中配置innodb_file_per ...

  8. MySQL技术内幕InnoDB存储引擎(三)——文件相关

    构成MySQL数据库和InnoDB存储引擎表的文件类型有: 参数文件:MySQL实例运行时需要的参数就是存储在这里. 日志文件:用来记录MySQL实例对某种条件做出响应时写入的文件. socket文件 ...

  9. InnoDB存储引擎文件

    InnoDB存储引擎文件 MySQL数据库包括数据库本身的文件和存储引擎文件.数据库自身的文件由参数文件(my.cnf).错误日志文件.慢查询日志文件.查询日志文件.二进制日志文件.套接字文件.pid ...

随机推荐

  1. Macro definition of snprintf conflicts with Standard Library function declaration

    Macro definition of snprintf conflicts with Standard Library function declaration 即将此处的宏定义注释掉,因为在VS2 ...

  2. 各大网站css初始化代码【转】

    文章来源:http://blog.sina.com.cn/s/blog_71ed1b870101a52w.html 腾讯QQ官网(http://www.qq.com)样式初始化 body,ol,ul, ...

  3. 倍福TwinCAT(贝福Beckhoff)常见问题(FAQ)-点击运行按钮进入到运行状态报错Error starting TwinCAT System怎么办 AdsWarning1823怎么办

    一般提示如下   点击Device,然后选中当前真正连接到的网卡   一般是由于重装系统之后,没有把本来是realtime capable的设备Install,所以找不到支持EtherCAT的设备导致 ...

  4. python 创建类先执行metaclass父类__new__ > __init__>__call__ 然后再执行自己的__new__>__init__

    class MyType(type): def __init__(self,*args,**kwargs): print("Mytype __init__",*args,**kwa ...

  5. vue 项目中 自定义 webpack 的 配置文件(webpack.config.babel.js)

    webpack.config.babel.js,这样命名是想让webpack在编译的时候自动识别es6的语法,现在貌似不需要这样命名了,之前用webpack1.x的时候貌似是需要的 let path ...

  6. js比较数字相等

    示例代码: <!DOCTYPE html> <html lang="zh"> <head> <meta charset="UTF ...

  7. 表单提交post和get方法区别

    表象不同,get把提交的数据url可以看到,post看不到 原理不同,get 是拼接 url, post 是放入http 请求体中 提交数据量不同,get最多提交2k数据,浏览器的限制.post理论上 ...

  8. Python课程之字典

    字典(dict) 一.定义:字典类型在其他语言中又称为map,是一种映射类型,并且{key:value}无序,其关键字必须为不可变类型(如:元组/字符串),在同一个字典中关键字必须互不相同(若出现相同 ...

  9. 在连接mysql数据库时出错:The server time zone value '�й���׼ʱ��' is unrecognized or represents more than one time zone

    这个错误是时区导致的,所以需要在配置连接url后面加上时区: url=jdbc:mysql://localhost:3309/test?serverTimezone=UTC 其中UTC是统一标准世界时 ...

  10. linux 自启动

    使用chkconfig命令可以查看在不同启动级别下课自动启动的服务(或是程序),命令格式如下:chkconfig --list可能输出如下:openvpn 0:关闭 1:开启 ...... 6:关闭 ...