MySQL----浅谈InnoDB存储引擎的文件(1)

1,前言

MySQL数据库和InnoDB存储引擎有这样几种文件:

  • 参数文件
  • 日志文件
    • 错误日志文件
    • 二进制日志文件
    • 慢查询日志文件
    • 查询文件
  • socket文件
  • pid文件
  • MySQL表结构文件
  • 存储引擎文件
    • 表空间文件
    • 重做日志文件

2,文件

2.1,参数文件

2.1.1,参数文件的读取

当MySQL启动时,会去读取配置参数文件,用来寻找数据库的各种文件所在位置以及指定某些初始化参数。MySQL实例启动的时候也可以不需要参数文件,这时所有的参数值取决于编译MySQL时指定的默认值和源代码中指定参数的默认值。但是如果MySQL在默认的数据库目录中没有找到mysql架构的话,则会启动失败,mysql架构中记录了访问该实例权限的权限,若找不到,实例就不会启动成功。

2.1.2,参数类型

MySQL参数文件中的参数有两种:

  • 静态参数
  • 动态参数
    • 基于会话:当前会话内有效,如autocommit
    • 基于实例:整个MySQL实例生命周期内有效

静态参数表示在整个生命周期内都不得进行修改;而动态参数则可以在MySQL实例运行过程中进行修改。
值得一提的是,在实例中修改了参数,这个参数在这个实例运行期间都会生效,一旦实例重启,MySQL还是会按照参数文件里的参数进行设置。要想永久的修改某些设置,可以修改MySQL的参数文件。

2.2,日志文件

日志文件记录了MySQL数据库的各种类型活动

2.2.1,错误日志

错误日志对MySQL的启动、运行、关闭过程进行了记录。MySQL DBA在遇到问题时应该首先查看该文件。
可以通过查看参数:log_error来寻找错误日志的存放位置

show variables like 'log_error'

2.2.2,慢查询日志

慢查询日志能为SQL语句的优化带来很好的帮助。设置一个阈值,运行时间超过这个阈值的SQL语句都会被记录到这个文件。
MySQL默认不启动慢查询日志,所以需要手动修改参数:log_slow_queries,将其修改为ON

# 查看是否开启
show variables like 'log_slow_queries';

SQL执行时间超过阈值(大于阈值才会被记录,小于或等于并不会被记录),就会被记录到慢查询日志,与这个阈值有关的参数是:long_query_time

show variables like 'long_query_time';

还可以将没有使用索引的SQL执行语句记录到慢查询日志,只需要设置参数:log_queries_not_using_indexes为ON

show variables like 'log_queries_not_using_indexes';

2.2.3,查询日志

查询日志记录了所有对MySQL数据库请求的信息,不论这些请求是否得到了正确的执行

2.2.4,二进制日志

二进制日志记录了对数据库执行更改的所有操作,当然并不包括SELECT和SHOW这类的操作,因为这类命令并不会更改数据库。
二进制日志的主要作用有:

  • 恢复(recovery):某些数据的恢复需要二进制日志,如当一个数据库全备文件恢复后,可以通过二进制文件进行point-in-time的恢复(恢复到某个时间点下的数据库状态)
  • 复制(replication):原理与恢复类似,通过复制和执行二进制日志使得主从数据库间进行实时同步

二进制日志文件在默认情况下是没有启动的,需要手动指定参数来启动。开启这个功能会影响性能,但影响十分有限,在考虑可以使用复制和point-in-time恢复的情况下,这些性能损失是值得的

2.3,套接字文件

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

2.4,pid文件

当MySQL实例启动时,会将自己的进程ID写入一个文件中----即为pid文件,该文件可由参数pid_file控制,默认路径位于数据库目录下,文件名为:主机名.pid

2.5,表结构定义文件

因为MySQL插件式存储引擎的体系结构的关系,MySQL对于数据的存储是按照表的,并非按照存储引擎。无论是使用任何存储引擎,MySQL都有一个.frm后缀的文件,这个文件记录了该表的表结构定义(也可以记录视图的定义)

2.6,InnoDB存储引擎文件

上面介绍的文件都是MySQL数据库本身的文件,和存储引擎无关。除了这些文件外,每个表存储引擎都还有其自己独有的文件。

2.6.1,表空间文件

InnoDB存储引擎在存储设计上模仿了Oracle,将存储的数据按表空间进行存放。

可以这样简单粗暴的理解:

  1. 有一个表空间A,有这么一个表B
  2. 假设A是B的表空间
  3. 那么A下面会有表B的定义文件、表B的数据文件

2.6.2,重做日志文件

重做日志的主要目的是,万一实例或者介质失败,InnoDB存储引擎会使用重做日志恢复到断电前的时刻,以此来保证数据的完整性。
同样是记录事务日志,重做日志文件只记录InnoDB存储引擎本身的事务日志;而前文提到的二进制日志会记录所有与MySQL有关的日志记录,包括InnoDB、MyISAM、Heap等其他存储引擎的日志。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值