mysql有多少文件你知道吗?(代码片段)

hello_读书就是赚钱 hello_读书就是赚钱     2022-11-29     475

关键词:

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等信息放在每个表的表空间中.但其他信息会存储在默认的表空间中.我们一般不会去动这部分的文件,所以只做一个了解即可.

javascript执行:你知道现在有多少种函数吗?(代码片段)

在前一篇文章中,我们大致了解了执行上下文是什么,也知道了任何语句的执行都会依赖特定的上下文。一旦上下文被切换,整个语句的效果可能都会发生改变。那么,切换上下文的时机就显得非常重要了。在Java... 查看详情

你知道你的电脑1秒钟能做多少事情吗?(代码片段)

让我们来看看你有多么了解电脑!所有这些程序的数值都是可变的。你的任务是:在程序花费1秒运行之前猜测它的大概值。你并不需要猜出一个精确值:选择范围在1和10亿之间。你只要能猜出正确的数量级,就算正确!下面是... 查看详情

面试官问:mysql锁与事物隔离级别你知道吗?(代码片段)

 前言 前面我们讲了MySQL数据库底层的数据结构与算法、MySQL性能优化篇一些内容。我们再来聊聊MySQL的锁与事务隔离级别,分上下两篇,本篇重点讲MySQL的行锁与事务隔离级别。锁定义锁是计算机协调多个进程或线程并发... 查看详情

关于数据库优化你知道多少?(代码片段)

文章目录什么是数据库优化?优化MySQL的查询使用索引:优化子查询:优化MySQL的插入MyISAM引擎InnoDB引擎海量数据处理优化表中包含几千万条数据该怎么办?MySQL的慢查询优化慢查询概念开启慢查询日志:分析... 查看详情

mysql的那点事儿,你知道吗(代码片段)

1、count(*)和count(1)和count(列名)区别 执行效果上: count(*)包括了所有的列,相当于行数,在统计结果的时候,不会忽略列值为NULL count(1)包括了忽略所有列,用1代表代码行,在统计结果的时候,不会忽略列值为NULL co... 查看详情

mysql存储的字段是不区分大小写的,你知道吗?(代码片段)

做一个积极的人编码、改bug、提升自己我有一个乐园,面向编程,春暖花开!00简单回顾之前写过一篇关于mysql对表大小写敏感的问题,其实在mysql中字段存储的内容是不区分大小写的,本篇进行简单的总结。想回顾一下:MySQL在L... 查看详情

枚举还有这样的用法你知道吗(代码片段)

...是的人,如果你单单告诉他某某设备此时返回的命令码是多少多少!此时不仅是体验用户懵了,甚至代码隔的久了,你也会这样说,稍等下我查下文档,不用说,你要是做出这样的效果,客户不满意,上级不满意,更准确来说你... 查看详情

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

你知道java的main方法启动后,会有多少个线程吗?packagecom;importjava.util.stream.Stream;/***你知道java的main方法启动后,会有多少个线程吗?*/publicclassThreadTestpublicstaticvoidmain(String[]args)throwsInterruptedExceptionThreadmainThread 查看详情

带@的css语法,你知道多少?(代码片段)

前言  css的顶层样式表由两种规则组成的规则列表构成,一种称为at—rule规则,也就是at规则,另一种是qualifiedrule,也就是普通规则。今天就学习一下at规则正文  @charset  用于提示css文件使用的编码方式,必须在最前... 查看详情

问卷调查(代码片段)

...?(作业,实验,教材,其他),目前为止估算自己写过多少行代码?看MOOC,学校发的教材。不记得。2.2学了C语言,你分的清数组指针,指针数组;函数指针,指针函数这些概念吗?有点迷糊。2.3学了C语言,你明白文件和流的... 查看详情

5种高大上的yml文件读取方式,你知道吗?(代码片段)

...nProperties外,还能够通过哪些方式,来读取yml配置文件的内容。1、Environment在Spring中有一个类Environment,它可以被认为是当前应用程序正在运行的环境,它继承了PropertyResolver接口&#x 查看详情

调查问卷(代码片段)

...?(作业,实验,教材,其他),目前为止估算自己写过多少行代码?A:听课,看教程,实践,Google,百度。大约有1000行左右。Q:2.2 学了C语言,你分的清数组指针,指针数组;函数指针,指针函数这些概念吗?A:可以。Q:2.3 学了... 查看详情

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

】mysql统计每秒执行多少个查询,有啥办法吗?【英文标题】:Mysqlcounthowmanyqueriespersecondareexecuted,isthereanyway?mysql统计每秒执行多少个查询,有什么办法吗?【发布时间】:2011-02-1419:36:45【问题描述】:我有一个安装了LAMP的繁忙... 查看详情

visualstudio的奇淫技巧,你知道多少?(代码片段)

如果你像我一样,或许你也沉迷于开发者工具。这就是我喜欢VisualStudio的原因之一——它有无数的生产力技巧。这篇文章将展示五个这样的技巧,这些技巧对我每天的工作都有帮助。请注意,这些仅适用于VisualStudio。... 查看详情

调查问卷(代码片段)

...?(作业,实验,教材,其他),目前为止估算自己写过多少行代码?课本,网上查阅资料,实践2.2学了C语言,你分的清数组指针,指针数组;函数指针,指针函数这些概念吗?目前分不清2.3学了C语言,你明白文件和流的区别... 查看详情

mysql数据库的优化,你知道有哪些?(代码片段)

点击上方关注“终端研发部”设为“星标”,和你一起掌握更多数据库知识来源| sf.gg/a/1190000018631870数据库优化一方面是找出系统的瓶颈,提高MySQL数据库的整体性能,而另一方面需要合理的结构设计和参数调整,以提高用户的... 查看详情

mysql数据库的优化,你知道有哪些?(代码片段)

点击上方关注“终端研发部”设为“星标”,和你一起掌握更多数据库知识来源| sf.gg/a/1190000018631870数据库优化一方面是找出系统的瓶颈,提高MySQL数据库的整体性能,而另一方面需要合理的结构设计和参数调整,以提高用户的... 查看详情

在mysql批处理中运行多个sql文件(代码片段)

运行单个文件,你可以在mysql中运行。文件名或者你可以在mysql之外运行mysql<filename我有一个sql文件目录,所以我试图通过使用通配符一次运行它们*.SQL但它不起作用。有任何想法吗?答案假设你正在使用bash:cat*.sql|mysql另一答... 查看详情