MySQL文件系统简介

1. 文件系统简介

MySQL的文件系统主要分为数据库和存储引擎层面介绍各种类型的文件。

此次仅对数据库文件粗略讲解,目的是说明各个文件的作用,后续会增加各个文件的细节,例如慢查询日志的分析等。

  • 数据库层面:
    参数文件 my.cnf ,
    错误日志 error.log
    慢查询日志 slow.log
    全量日志 general log
    二进制日志文件 binlog
    审计日志 andit log
    中继日志 relay log
    套接字文件 socket
    进程文件 pid
    表结构文件
  • 存储引擎层面:
    redo log 又称为重做日志
    undo log 用于撤销回退的日志,记录事务执行前后行数据的历史记录。

2. 配置参数文件 my.cnf

  • 文件存储位置
    my.cnf 是 linux系统下配置文件的说明,windows系统下的文件名称叫做 my.ini。

  • 文件作用
    my.cnf 是配置文件,主要配置mysql启动的时候的一些参数。

  • my.cnf说明
    包括了clent section 和 server section 两个部分,分别记录客户端和服务端的参数。

此处展示一些基本配置:

[client]
socket=/tmp/mysql.sock
[mysqld]
user=mysql
basedir=/usr/local/mysql
datadir=/usr/local/mysql/data
socket=/tmp/mysql.sock
pid-file=/usr/local/mysql/data/mysql.pid
log-error=/usr/local/mysql/data/mysql.err

使用这些基本的配置就可以正常运行数据库了,稍后会写一篇文章详细讲解。
此处讲解以上配置字段

  • socket : socket 文件是服务器和本地客户端产生的unix套接字文件,默认的位置是/tmp/mysql.sock
  • user : 启动mysql执行mysqld 使用root账号启动使用的账号,用于执行其他操作。
  • basedir: mysql安装的绝对路径。
  • datadir: 数据库文件的绝对路径。
  • pid-file: pid文件配置的地址。
  • log-error:错误日志配置的地址。

3. 错误日志 error log

  • 文件存储位置
    error log 文件的位置可以在 my.cnf 中配置,示例:

log-error=/usr/local/mysql/data/error.log

一般是和其他的数据库文件放在一起,此处的 /usr/local/mysql/data 是存放数据库文件的配置位置。

  • 文件作用

用于记录在MySQL启动,运行和结束的时候的错误日志,也会存放一些warning日志。
还有就是可以在初始化的时候 增加 --initialize 在错误日志生成初始密码。

4. 二进制日志 binlog

binlog 全称 binary log,二进制日志文件。和redo log一样记录执行更改(MDL)的操作,即为insert、update 和 delete,不包含 show 和 select。

  • 文件作用
    ① 完成主从复制功能,主数据库传输给从数据库所有binlog 的操作,从而达到主从同步。
    ② 备份恢复的功能。数据库可以通过mysqlbinlog操作完成,基于时间点和位置的恢复,误操作必备…

  • 开启二进制日志
    my.cnf 配置 log-bin=[filename],如果没有配置filename会使用主机名。存储的位置是datadir下。

  • 开启binlog

  1. 查看 binlog配置

show varibables like “%log-bin%”;

在这里插入图片描述
2. 修改配置文件
在这里插入图片描述
可以配置 log-bin 参数用来开启 binlog日志,
注意:一定要设置 server-id的值,不然会启动失败!

  1. 查看二进制日志记录
  • show binary logs 查看所有binlog日志文件
  • show master status 查看当前的日志文件
    结果中 Position是偏移量

在这里插入图片描述
data下binlogs文件查看:

在这里插入图片描述
和SQL查询结果一致,其中 mysql-bin.index 是日志索引文件,记录日志序号。

  1. 参数

max_binlog_size 单个binlog文件的最大值,超过后自动生成新的文件,当然,重启MySQL也会生成新的日志文件。
binlog_cache_siez : 记录未提交的事务,提交之后刷新到binlog中。默认大小32K,没产生一个会话会新生成一个cache。
binlog_format: 目前都是使用的ROW ,其他还有statement和mixed 都已经不使用了。statement 会存在丢失数据的情况导致主从不一致,mixed是row 和 statement的混合模式。

  1. 查看日志
  • 查看创建表语句: show create table test;

在这里插入图片描述

  • 插入一条数据: insert into test(name) values(“xiaoming”);

在这里插入图片描述

  • 对插入的数据进行更新: update from test set name = ‘xm’ where id = 5;
  • 分析处理当前的binlog文件: /usr/local/mysql/bin/mysqlbinlog --no-defaults --base64-output=decode-rows mysql-bin.000004 > bin.log

在这里插入图片描述

备份恢复稍后会在另一篇博客编写,包括其他的备份恢复功能。

5. 慢查询日志 slow log

慢查询日志可以把超时的SQL语句收集起来,写入日志。参数 long_query_time 是 10s。
当我们想要优化SQL的时候可以去查看slow.log,然后就可以根据慢SQL进行SQL优化。

可以使用插件对 slow log进行分析。

6.全量日志 general log

默认关闭,记录所有的数据库操作的SQL语句,包括select 和 show,如果开启日志会特别大,除非是需要定位问题才需要开启。如果error 日志可以定位到问题,也是不需要开启的。

7. 审计日志 andit log

完成实时纪录网络上的数据库活动,例如对数据库的访问行为的记录分析和报告,帮助用户事后生成报告追溯根源。
官网的审计功能需要收费,可以通过第三方的插件完成审计日志的功能。

8. 中继日志 relay log

主从复制又一角色,用于从服务器读取到主数据库的二进制日志记录到本地文件relay log 中,即为接过主数据库的操作完成从数据库中数据同步的功能。
完成之后从数据库线程从relay log 中读取到SQL应用于从数据库。

9. 其他日志文件说明

9.1 pid文件

用于记录mysql启动进程号。

9.2 socket 文件

用于记录mysql 本地客户端与服务端的unix套接字文件。在my.cnf中有配置。

9.3 表结构文件

不同的存储引擎的表结构文件是不同的。
MyISAM 的索引文件结尾是 .MYI , 数据文件是 .MYD, 表结构 .frm。例如初始化完成数据库mysql,

路径: /usr/local/mysql/data/mysql, 这里存储的是数据库的一些基本库(此处是MySQL 5.7版本)。例如其中两个使用的是MyISAM存储引擎:

在这里插入图片描述
也有使用的是InnoDB存储引擎,当然大多数是InnoDB存储引擎,因为InnoDB数据即索引,索引即数据,只有 数据索引文件 .ibd 和 表结构文件 .frm:

在这里插入图片描述
也有使用CSV存储引擎的表数据,CSV存储引擎文件。这里csv即是数据文件,csm存储数量和状态,frm存储表结构文件,csv文件是明文存储,可以直接查看:
在这里插入图片描述

10. 数据库引擎文件

InnoDB 存储文件还是很重要的,非常有必要了解。
InnoDB 是支持事务的,关于数据库的事务可以查看我的另外一篇文章:MySQL事务

MySQL是如何完成事务的功能呢?主要是通过redo log 日志和undo log 日志。

10.1 redo log

  • redo log 作用
    redo log 重做日志,用于记录事务的变化,无论是否提交都会记录下来。

  • redo log 执行机制
    数据库是如何完成正常业务呢,主要是通过MySQL的各个线程,其中一个就是redo log thread。
    数据库的事务提交的时候首先会提交到 redo log buffer中,之后 redo log thread 会把 redo log buffer中的数据写入磁盘,完成持久化操作。

  • redo log 文件
    redo log 文件在磁盘中的命名为 ib_logfile0-N:
    在这里插入图片描述

执行的特征是顺序写,循环写。例如首先会写入上述的ib_logfile0,之后写入 ib_logfile1,此时的ib_logfile1是最后一个文件,之后会再次使用ib_logfile0,也就是说完成顺序写,循环写最少需要两个redo log文件。注意redo log不是只有2个,而是我这里有两个 …

当写到参数配置的百分比值,日志文件会被触发脏页的刷新。所谓脏页就是执行的事务操作,mysql并不会实时完成事务写入磁盘,而是等到redo log写满之后完成持久化写入磁盘的操作,这个操作叫做checkpoint。

当数据库重启的时候会完成redo log 文件对照,假如数据库中的文件大小和当前不一致,那么就会删除并新生成redo log日志,并按照配置参数文件 my.cnf 中的设置大小,如果没有设置,那么就会按照默认的大小。

10.2 undo log

InnoDB支持事务,支持MVCC(多版本并发控制)。是通过undo log 日志和回滚段来实现。

此外 InnoDB中每行记录含有三个隐藏字段:DB_ROW_ID,DB_TRX_ID和DB_ROLL_PTR。

  • DB_ROW_ID : 递增的行号,和MVCC没啥关系,就是记录行号,当没有主键和唯一索引的时候充当聚集索引。
  • DB_TRX_ID: 事务ID,每次insert|update 的时候更新,delete不会更新,会更新逻辑删除位置。并且InnoDB有一个全局的事务链表,事务开始的时候会放入。
  • DB_ROLL_PTR: 回滚指针,执向的是undo log的记录。

undo log 默认记录在系统表空间中,但是在MySQL5.6之后可以单独设立表空间记录。

在这里插入图片描述

参数说明:

innodb_undo_directory 文件存储的位置
innodb_undo_logs 回滚段数量
innodb_undo_tablespaces: undo log 表空间数量,当使用独立表空间的时候最少需要2个,因为需要清理表空间数据
innodb_undo_log_truncate 默认关闭清理无用undo log功能
innodb_undo_log_size: undo log 最大可以达到1GB,默认是10MB

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值