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有多少文件你知道吗?的主要内容,如果未能解决你的问题,请参考以下文章

请问知道MYSQL账号和密码可以入侵吗?

mysql统计每秒执行多少个查询,有啥办法吗?

MySQL最常见错误代码及代码说明你都知道吗?

你知道java的main 方法启动后,会有多少个线程吗?

有人知道下面的代码片段是啥意思吗?

你知道mysql-connector-java是什么吗