MySQL有多少文件你知道吗?
Posted hello_读书就是赚钱
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了MySQL有多少文件你知道吗?相关的知识,希望对你有一定的参考价值。
mysql里面的文件多且杂,与我们业务开发相关的也不多,但是对MySQL的整体理解还是需要懂这些知识点,当遇到问题或需要对MySQL做调优时间可以找到对应的切入点.本文对各种常见的MySQL文件做知识点总结,方便以后可以及时查阅复盘
一、文件分类
MySQL里面的文件大体可以分为两类,一类是MySQL通用的文件
,一类是存储引擎自己独特文件
.这里主要是记录MySQL通用的文件和InnoDB的两种文件.
二、MySQL通用文件
MySQL通用文件主要有日志文件
、配置文件
、表结构定义文件
、进程文件
、套接字文件
.下面根据重要程度分别进行总结介绍.
1、日志文件
1.1、二进制日志(binlog)
1.1.1、是什么
二进制文件也就是我们常说binlog
文件,它负责记录的内容是数据库数据变更的逻辑记录.逻辑记录,就是说记录了执行了什么语句、或者是哪一条记录被变更了,注意,并不是物理记录的变动情况.不会引起数据变动的查询是不会被记录到这里来的.
1.1.2、作用
binlog日志主要有以下三大作用
恢复数据
:当我们需要恢复数据找不到热备或冷备时,可以考虑通过这个方案来尝试操作主从复制
:我们配置主从时,都是要配置binlog的配置数据库审计
:可以通过程序读取改文件的内容对数据库变更做审计
1.1.3、格式
statement
:以sql语句的格式进行记录,注意在这种情况下可能导致主从数据不一致.比如使用了now()函数参数的数据是不一样的row
:记录数据变动的记录,比如是哪一行变动了什么字段数据.注意在这样的模式下可能会引起磁盘的使用变大.比如一个全表update,那么就要记录全表的记录mix
:上述两者的结合.默认是用的是statement模式,当出现会导致数据不一致的sql时,会使用row的模式进行记录
1.1.4、文件缓存
数据库中写数据到磁盘总会先写缓存,那么我们可以通过以下几个参数对binlog的写入缓存精确控制,提升性能
binlog_cache_size
:设置缓存大小,太大会影响内存,太小会导致写入临时文件(此时还没写入binlog)binlog_cache_use
:统计缓存写入次数,仅查看binlog_cache_disk_use
:统计缓存爆了临时写磁盘的次数
我们可以结合后两个参数的值去判断binlog缓存设置是否合理,去调优binlog的写入性能
1.1.5、写入时间点
我们可以通过sync_binlog
参数来控制binlog的写入时间点,表示当多少次操作就把缓存里面的内容写入binlog,默认值为1.
当我们填0
时:指的是MySQL将写入文件的时机交给操作系统自动来控制,在这个情况的性能最好,但是可靠性最没有保障.
当我们填1
时:表示当数据将要进行commit的时候将操作写入binlog.注意此时可能事务将要回滚,但同时发生宕机,所以导致binlog出现数据差异.所以MySQL官方建议配置innodb_flush_log_at_trx_commit=1
来避免这样的情况达到最好的可靠性.
当我们填N
时:也就是当N次事务提交时去写文件,这种情况下同样有可靠性问题.
1.1.6、忽略某些表
我们可以通过binlog_ignore_db
参数来忽略掉某一些表的数据来让binlog不要去记录这些数据.之前我们主从间同步屏蔽掉某些表数据就是通过这样的方式来做的.
1.1.7、查看方式
binlog日志是无法直接查看和使用的,但官方提供了binlog_ignore_db
命令解决了我们这些问题.
1.2、慢查询日志
慢查询日志记录我们数据库运行中慢查询的sql语句
1.2.1、记录方式
慢查询日志一个是可以通过文件方式记录
.显示为xxx.log.一个是可以记录到MySQL的mysql.slow表
中.我们可以通过log_output
参数人工设置
1.2.2、开启与关闭
默认情况下,慢查询日志是关闭的,我们可以通过log_show_queries
来开启,或者关闭
1.2.3、阀值
我们可以手动的指定超过多少时间的查询才算是慢查询,可以通过long_query_time
进行控制.除此之外,我们还能记录那些没有击中索引的查询.可以通过log_queries_not_using_indexs
来开启,并可以通过log_throttle_queries_not_using_indexes
来控制没击中索引的查询的数量
1.2.4、查看方式
慢查询日志是可以直接通过cat来查看的,但内容会很多.官方提供了mysqldumpslow
命令来让我们对慢查询进行统计.
1.3、其他日志文件
除此之外,MySQL还提供了其他的日志文件,比如查询日志文件
还有错误日志文件
.
查询日志文件的用法跟慢查询日志文件差不多,就不再累述,它记录的是所有的查询内容,没什么意义.这里我们是所说错误日志文件.
错误日志文件
,是DBA的好帮手,作者在之前部署MySQL的时候,时常遇到无法启动的现象,大都通过错误日志定位到问题,遇到问题先查日志这个点总是没错的.可以通过
show variables like "log_error"
来找到错误日志的位置
2、参数文件
参数文件
,其实也就是配置文件
,我们看到的MySQL里面的参数,都是通过配置文件控制.通过配置文件控制的参数是全局的.所以借此机会需要再讲讲MySQL里面的参数
2.1、参数
参数
就是KV形式的配置,通过不同的K去设置不同的v去控制MySQL的功能.
2.1.1、查看方式
我们可以通过以下两个方式来查看具体的参数值
show variables like '%%'
select * from global_variables where variable_name like '%%''
2.1.2、类型
MySQL的参数可以分为动态参数与静态参数
动态参数
,我的理解是运行时参数,也就是在运行的时候可以动态改变的静态参数
,我的理解像是编译时的参数,也就是说一经启动后是无法改变的,通常由配置文件来指定
2.1.3、作用域
MySQL的参数是有分作用域的,跟编程语言里面的参数作用域差不多
global 全局参数
,指的是全局生效,可以通过查阅文档来看某一个配置是支持全局的,还是会话间的session 会话参数
.指的是我们建立一个链接的时候,这个会话运行时的参数,此时配置只对这个会话有效
注意,设置了全局参数是不会同步更新到配置文件里面的,也就是说重启后是失效的,像作者之前的配置更改是动态设置后,再在配置文件去增加参数配置
2.1.4、设置方法
我们可以通过下面两种语法对参数进行设置
set global|session system_var_name=expr
set @@global.|@@session.|@@ system_var_name=expr
这一节 主要是介绍了参数配置文件与参数,具体的参数方法很多,比如有MySQL 的配置,也有InnoDB的配置,具体要查看MySQL官方文档,再具体的使用
3、表结构定义文件
其实表结构信息也是放在文件中的,我们可以在MySQL的数据文件目录中找到这些表结构定义文件,并且可以通过cat来看里面的格式.当然了使用起来并没有用show create tables
来看这么方便了
4、进程文件
运行MySQL的进程会产生进程文件,一般我们可以通过下面的语句找到
show variables like 'pid_file'
5、套接字文件
也就是socket文件,之前一直遇到找不到套接字文件的问题,可以通过这个参数去配置,去找套接字
show variables like ‘socket’
二、InnoDB的文件
1、重做日志文件(redo log)
是名为 ib_logfile0,ib_logfile_1的文件,当宕机时,就可以根据重做日志来恢复数据.重做文件分为重做文件组,文件组里面有若干个重做文件,当一个重做文件写完的时候会循环写入另一个文件.重做日志文件主要的目的是用来回滚事务和宕机时的数据恢复.与其他的日志文件有些区分,下面详细介绍
1.1、与undo log的区别
undo log是逻辑概念,undo log记录的信息是藏在表空间(下文会继续说到)中的,是MVCC实现的基础.undo log不是为宕机做准备的,它只工作在数据库运行时,当redo log执行后,会去查询undo log的信息,然后对数据的物理信息做回滚.
1.2、与二进制日志的区别
- 作用域不同.二进制文件是整个MySQL的日志文件,与引擎无关.重做日志文件是InnoDB自身的文件
- 记录内容不同.二进制文件记录的是数据的变动情况,属于逻辑信息.而重做文件记录的是物理信息,也就是真实物理数据的变动情况
- 写入的时间点不同.二进制文件只会在事务提交的时候写入.重做日志是会在事务的执行过程中不断产生的
1.3、文件缓存
重做日志也是会先写缓存再写日志,可以通过参数控制缓存写入本地文件的时机.我们可以通过innodb_flush_log_at_trx_commit
参数进行控制,它有以下几个可选项
0
:表示事务提交时,不写入本地文件1
:表示将重做日志缓冲同步写到磁盘,最可靠2
:表示将重做日志缓冲同步写磁盘缓存,不能完成保证在执行commit时肯定会写入重做日志
1.4、其他相关参数
innodb_log_file_size
:重做日志文件大小- 太大重启恢复数据会很慢
- 太小会导致重做日志一直切换
innodb_log_files_in_group
:指定在重做日志文件组里面的文件数量innodb_mirrored_log_groups
:指定日志镜像文件组的数量innodb_log_group_home_dir
:指定日志文件组所在路径
2、表空间文件
表空间文件说白了就是存储数据、索引等其他物理信息的文件,可以通过show variables like 'innodb_data_file_path'
找到他们的存储位置.可以分为默认表空间和每个表的独立表空间.
默认表空间是名为ibdata1、ibdata2的文件,当不指定每个表单独使用表空间时,将会将所有数据都写入默认表空间中.
每个表的表空间是名为 表名.ibd
的文件,需要通过参数innodb_file_per_table
控制进行开启或关闭,将会存储数据、索引、插入缓存 bitmap等信息放在每个表的表空间中.但其他信息会存储在默认的表空间中.我们一般不会去动这部分的文件,所以只做一个了解即可.
以上是关于MySQL有多少文件你知道吗?的主要内容,如果未能解决你的问题,请参考以下文章