一文看懂 | MySQL目录结构

1.安装目录

安装路径指MySQL程序所在的位置,Linux系统中安装目录常在usr/local/mysql下。安装目录中主要包含以下子目录:

  • /bin:存放一些可执行文件,主要包含客户端和服务端的启动程序,如mysqld、mysql等:
    1.mysqld:代表MySQL服务器程序,运行这个可执行文件可以直接启动一个服务器进程,但此命令不常用
    2.mysqld_safe:MySQL的启动脚本,会间接调用mysqld,同时还启动了另一个监控进程,服务器意外终止时可帮助重启。此外,mysqld_safe启动服务器进程时,会将服务器程序的出错信息和其他诊断信息重定向到日志,便于排错。
    3.mysql.server:也是一个启动脚本,会间接调用mysqld_safe。可以在调用时指定start或stop参数启动或停止MySQL服务器程序。
    4.mysqld_multi:使用单一配置文件统一管理多个MySQL实例(一台服务器开启多个端口运行多个MySQL服务进程,通过不同的socket监听不同的服务端口来提供各自的服务)。mysqld_multi可以对每个服务器进程的启动或停止进行监控。
  • /docs:存放一些文档
  • /include:用于放置一些头文件,如mysql.h、mysqld_error.h等
  • /lib:存放一些类库文件
  • /share:包含MySQL的共享文件,如字符集文件和错误信息文件
  • support-files:存放一些启动脚本,如mysql.server、mysql_multi.server等

2.数据目录

数据目录用于存储MySQL服务器在运行过程中产生的数据文件,且服务器在启动时会从这个目录下加载相关文件
1.查看数据目录地址的方式:

  • 执行SQL语句:show variables like ‘datadir’;
    在这里插入图片描述

  • 查看配置文件my.cnf:datadir属性

2.数据库在文件系统中是如何保存的
执行CREATE DATABASE语句创建一个数据库,会在数据目录中多了一个文件夹(名为数据库名)。刚创建数据库时此目录下为空。5.7版本会在数据库目录下生成一个db.opt文件(数据库配置文件,包含数据库字符集编码和字符集排序规则),MySQL8.0不再使用db.opt文件。

3.数据表在文件系统中如何保存的
(1)InnoDB如何保存表数据:
MySQL5.7新建表会产生.ibd和.frm两个文件,.ibd保存数据和索引信息,.frm保存表结构信息。MySQL8.0中不再单独提供.frm文件,而是合并在.ibd文件中。(MySQL的bin目录中提供了一个工具ibd2sdi,执行命令ibd2sdi --dump-file=解析后的文件名.txt 要解析的文件.ibd,可以解析出表结构信息。
在这里插入图片描述

表空间是InnoDB存储引擎逻辑结构的最高层,如果启用了参数innodb_file_per_table(默认开启),则每张表都会有一个独立表空间(.ibd文件)。如果未开启,将在系统表空间存储表和索引相关的数据。默认情况下,数据目录中名ibdata1的为系统表空间数据文件。
在这里插入图片描述
系统表空间数据文件大小和数量有innodb_data_file_path决定,如图所示表示系统表空间文件名为ibdata1,初始化大小为12M,定义了autoextend随着数据量的增加而进行扩容,每次扩容申请的空间有innodb_autoextend_increment配置。
在这里插入图片描述

在这里插入图片描述
使用独立表空间来存储数据的话,MySQL会在该表所属数据库对应目录下创建一个表示该独立表空间的文件,文件名和表明相同,.ibd为扩展名。
独立表空间【优势】:①每个表的数据和索引都会存在自己的表空间中;②可以实现单表在不同的数据库中移动;③空间可以回收(删除大量数据后可以通过alter table TableName engine=innodb回收不用的空间。对于使用独立表空间的表不管怎么删除,表空间的碎片不会太严重的影响性能,而且有处理的机会)

(2)MyIASM如何存储表数据
创建myisam表后,数据库目录下多出三个文件(.sdi、.MYD、.MYI),.sdi存储文件结构,.MYD存储数据,.MYI存储索引。其中.sdi是MySQL8.0以后才有的,MySQL5.7存储表结构文件是.frm文件。
在这里插入图片描述

3.日志目录

MySQL日志分为多种:错误日志、慢查询日志、二进制日志、查询日志和中继日志,不同类型日志存储的方式和位置也有所不同。

  • 错误日志:用于记录MySQL错误及警告信息,例如启动或关闭MySQL服务的错误、数据库或表损坏的错误等。
  • 慢查询日志:慢查询日志可以用来检查慢查询性能问题,例如查看连接时间超过指定阈值的查询。有三个参数进行配置:slow-query-log,slow-query-log-file,long_query_time。
  • 二进制日志
    二进制日志记录了对MySQL数据库进行的所有操作,例如创建、修改和删除数据库、表和索引等。二进制日志通常存储在数据目录下,主要用于数据恢复和数据复制。
    在这里插入图片描述
    在这里插入图片描述
    MySQL8.0默认是开启二进制文件的。
    相关参数:
    max_binlog_size:控制单个二进制文件的大小(不严格)
    binlog_expire_logs_second:二进制日志文件保留的时长,单位是秒,默认2592000(30天)
    binlog日志生成的时候,mysqld会创建一个.index文件,这个文件并不存储真正的日志,而是binlog日志的索引文件。
    查看二进制日志的方式有:①bin-log目录下;②SHOW BINARY LOGS;命令
    在这里插入图片描述
    当MySQL创建日志文件时,先创建一个“.000001”为后缀的文件,MySQL服务重新启动一次,该文件就增加一个,后缀名按1递增。如果日志文件长度超过了max_binlog_size(默认1G)就会创建一个新的日志文件。

二进制日志文件无法直接查看,需借助mysqlbinlog工具。

  • 通用查询日志
    查询日志记录了MySQL服务器上的每个连接和客户端请求,包括查询操作之前和之后的信息。
    【日志目录】:配置文件中general_log_file=[path[filename]]设置目录(需要配置general_log=ON启动通用查询日志),若未指定位置,默认存放在数据目录中的hostname.log文件。
    可以使用SHOW VARIABLES LIKE ’general_log%’;查看

如果数据使用费查过频繁,那么通用查询日志会占非常大的磁盘空间,DBA可以手动删除日志文件,也可刷新日志:mysqldadmin -uroot -p flush-logs。

  • 中继日志
    中继日志只在主从服务器架构的从服务器存在。从服务器Slave为与主服务器Master保持一致,要从服务器读取二进制日志的内容,并且把读取到的信息写入本地的日志文件中,这个从服务器本地的日志文件就叫中继日志。然后从服务器读取中继日志并根据中继日志的内容对从服务器的数据进行更新,完成主从同步,起到中介作用。
    【文件名的格式】:从服务器-relay-bin.序号
    【相关参数】通过show variables like ‘%relay%’查看relay所有相关参数
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值