MySQL的文件系统(Linux环境)

/var/lib/mysql/

可通过以下sql命令查看:

mysql> show variables like 'datadir';
+---------------+-----------------+
| Variable_name | Value           |
+---------------+-----------------+
| datadir       | /var/lib/mysql/ |
+---------------+-----------------+
1 row in set (0.00 sec)

/usr/bin/

mysqladmin、mysqlbinlog、mysqldump等命令

[root@shanghai01 bin]# cd /usr/bin
[root@shanghai01 bin]# find . -name "*mysql*"
./mysql_secure_installation
./mysql_upgrade
./mysql_migrate_keyring
./mysql_config_editor
./mysqlimport
./mysqlpump
./mysql
./mysqlslap
./mysqld_pre_systemd
./mysqlshow
./mysqlbinlog
./mysqldumpslow
./mysql_ssl_rsa_setup
./mysqlcheck
./mysqladmin
./mysqldump
./mysql_tzinfo_to_sql

/usr/sbin/

[root@shanghai01 bin]# cd /usr/sbin
[root@shanghai01 sbin]# find . -name "*mysql*"
./mysqld
./mysqld-debug

/usr/share/mysql-8.0/

错误消息、字符集、安装文件、配置文件等。

[En]

Error messages, character sets, installation files, configuration files, etc.

[root@shanghai01 mysql-8.0]# cd /usr/share/mysql-8.0
[root@shanghai01 mysql-8.0]# ll
total 1100
drwxr-xr-x 2 root root   4096 Apr 25 00:25 bulgarian
drwxr-xr-x 2 root root   4096 Apr 25 00:25 charsets
drwxr-xr-x 2 root root   4096 Apr 25 00:25 czech
drwxr-xr-x 2 root root   4096 Apr 25 00:25 danish
-rw-r--r-- 1 root root  25575 Dec 18 00:07 dictionary.txt
drwxr-xr-x 2 root root   4096 Apr 25 00:25 dutch
drwxr-xr-x 2 root root   4096 Apr 25 00:25 english
drwxr-xr-x 2 root root   4096 Apr 25 00:25 estonian
drwxr-xr-x 2 root root   4096 Apr 25 00:25 french
drwxr-xr-x 2 root root   4096 Apr 25 00:25 german
drwxr-xr-x 2 root root   4096 Apr 25 00:25 greek
drwxr-xr-x 2 root root   4096 Apr 25 00:25 hungarian
-rw-r--r-- 1 root root   3999 Dec 18 00:07 innodb_memcached_config.sql
-rw-r--r-- 1 root root   2216 Dec 18 00:58 install_rewriter.sql
drwxr-xr-x 2 root root   4096 Apr 25 00:25 italian
drwxr-xr-x 2 root root   4096 Apr 25 00:25 japanese
drwxr-xr-x 2 root root   4096 Apr 25 00:25 korean
-rw-r--r-- 1 root root 616528 Dec 18 00:07 messages_to_clients.txt
-rw-r--r-- 1 root root 359072 Dec 18 00:07 messages_to_error_log.txt
-rw-r--r-- 1 root root   1977 Dec 18 00:58 mysql-log-rotate
drwxr-xr-x 2 root root   4096 Apr 25 00:25 norwegian
drwxr-xr-x 2 root root   4096 Apr 25 00:25 norwegian-ny
drwxr-xr-x 2 root root   4096 Apr 25 00:25 polish
drwxr-xr-x 2 root root   4096 Apr 25 00:25 portuguese
drwxr-xr-x 2 root root   4096 Apr 25 00:25 romanian
drwxr-xr-x 2 root root   4096 Apr 25 00:25 russian
drwxr-xr-x 2 root root   4096 Apr 25 00:25 serbian
drwxr-xr-x 2 root root   4096 Apr 25 00:25 slovak
drwxr-xr-x 2 root root   4096 Apr 25 00:25 spanish
drwxr-xr-x 2 root root   4096 Apr 25 00:25 swedish
drwxr-xr-x 2 root root   4096 Apr 25 00:25 ukrainian
-rw-r--r-- 1 root root   1248 Dec 18 00:58 uninstall_rewriter.sql

/etc/my.cnf

[root@shanghai01 /]# cat /etc/my.cnf
For advice on how to change settings please see
http://dev.mysql.com/doc/refman/8.0/en/server-configuration-defaults.html

[mysqld]
#
Remove leading # and set to the amount of RAM for the most important data
cache in MySQL. Start at 70% of total RAM for dedicated server, else 10%.

innodb_buffer_pool_size = 128M
#
Remove the leading "# " to disable binary logging
Binary logging captures changes between backups and is enabled by
default. It's default setting is log_bin=binlog
disable_log_bin
#
Remove leading # to set options mainly useful for reporting servers.

The server defaults are faster for transactions and fast SELECTs.

Adjust sizes as needed, experiment to find the optimal values.

join_buffer_size = 128M
sort_buffer_size = 2M
read_rnd_buffer_size = 2M
#
Remove leading # to revert to previous value for default_authentication_plugin,
this will increase compatibility with older clients. For background, see:
https://dev.mysql.com/doc/refman/8.0/en/server-system-variables.html#sysvar_default_authentication_plugin
default-authentication-plugin=mysql_native_password

datadir=/var/lib/mysql
socket=/var/lib/mysql/mysql.sock

log-error=/var/log/mysqld.log
pid-file=/var/run/mysqld/mysqld.pid

除了information_schema这个系统数据库外,其他的数据库在数据目录下都有对应的子目录。

[root@shanghai01 ~]# cd /var/lib/mysql/
[root@shanghai01 mysql]# ll
total 188876
-rw-r----- 1 mysql mysql       56 Apr 25 00:43 auto.cnf
-rw-r----- 1 mysql mysql     1433 Apr 25 11:26 binlog.000001
-rw-r----- 1 mysql mysql       16 Apr 25 00:48 binlog.index
-rw------- 1 mysql mysql     1676 Apr 25 00:43 ca-key.pem
-rw-r--r-- 1 mysql mysql     1112 Apr 25 00:43 ca.pem
-rw-r--r-- 1 mysql mysql     1112 Apr 25 00:43 client-cert.pem
-rw------- 1 mysql mysql     1676 Apr 25 00:43 client-key.pem
-rw-r----- 1 mysql mysql   196608 Apr 25 12:11 #ib_16384_0.dblwr
-rw-r----- 1 mysql mysql  8585216 Apr 25 00:43 #ib_16384_1.dblwr
-rw-r----- 1 mysql mysql     5517 Apr 25 00:43 ib_buffer_pool
-rw-r----- 1 mysql mysql 12582912 Apr 25 12:11 ibdata1
-rw-r----- 1 mysql mysql 50331648 Apr 25 12:11 ib_logfile0
-rw-r----- 1 mysql mysql 50331648 Apr 25 00:43 ib_logfile1
-rw-r----- 1 mysql mysql 12582912 Apr 25 00:48 ibtmp1
drwxr-x--- 2 mysql mysql     4096 Apr 25 00:48 #innodb_temp
drwxr-x--- 2 mysql mysql     4096 Apr 25 00:43 mysql
-rw-r----- 1 mysql mysql 25165824 Apr 25 11:25 mysql.ibd
srwxrwxrwx 1 mysql mysql        0 Apr 25 00:48 mysql.sock
-rw------- 1 mysql mysql        6 Apr 25 00:48 mysql.sock.lock
drwxr-x--- 2 mysql mysql     4096 Apr 25 00:43 performance_schema
-rw------- 1 mysql mysql     1680 Apr 25 00:43 private_key.pem
-rw-r--r-- 1 mysql mysql      452 Apr 25 00:43 public_key.pem
-rw-r--r-- 1 mysql mysql     1112 Apr 25 00:43 server-cert.pem
-rw------- 1 mysql mysql     1676 Apr 25 00:43 server-key.pem
drwxr-x--- 2 mysql mysql     4096 Apr 25 00:43 sys
-rw-r----- 1 mysql mysql 16777216 Apr 25 11:27 undo_001
-rw-r----- 1 mysql mysql 16777216 Apr 25 00:55 undo_002

MySQL5.7中会在数据库子目录下生成db.opt文件,用于保存数据库的相关配置。比如:字符集、比较规则。而MySQL8.0不再提供db.opt文件。

创建测试数据库和表

CREATE DATABASE db_innodb_myisam;

USE db_innodb_myisam;

CREATE TABLE tb_innodb
(
    id INT PRIMARY KEY,
    NAME VARCHAR(20) NOT NULL
)
    ENGINE = innodb;

SHOW CREATE TABLE tb_innodb;

CREATE TABLE tb_myisam
(
    id INT PRIMARY KEY,
    NAME VARCHAR(20) NOT NULL
)
    ENGINE = myisam;

SHOW CREATE TABLE tb_myisam;

查看数据库目录下的文件

[root@shanghai01 mysql]# cd /var/lib/mysql/db_innodb_myisam/
[root@shanghai01 db_innodb_myisam]# ll
total 120
-rw-r----- 1 mysql mysql 114688 May  7 14:50 tb_innodb.ibd
-rw-r----- 1 mysql mysql   2901 May  7 14:51 tb_myisam_363.sdi
-rw-r----- 1 mysql mysql      0 May  7 14:51 tb_myisam.MYD
-rw-r----- 1 mysql mysql   1024 May  7 14:51 tb_myisam.MYI

表结构:

在mysql8以前,为了保存表结构,InnoDB会在数据目录下对应的数据库子目录下创建一个专门用于描述表结构的文件,文件名是 表名.frm,这个后缀名为.frm是以二进制格式存储的。在mysql8中,表结构和表数据一起存在后缀名为.ibd的文件中。

表中数据和索引:

系统表空间

默认情况下,InnoDB会在数据目录下创建一个名为ibdata1、大小为12M的文件,这个文件就是系统表空间在文件系统上的表示。这个文件是自扩展文件,当不够用的时候它会自己增加文件大小。

当然,如果想让系统表空间对应文件系统上多个实际文件,或者想要修改ibdata1这个文件名,那可以在MySQL启动时,配置对应的文件路径以及它们的大小,比如这样修改一下my.cnf配置文件:

[server]
innodb_data_file_path=data1:512M;data2:512M:autoextend

独立表空间

在MySQL5.6.6以及之后的版本中,InnoDB并不会默认的把各个表的数据存储到系统表空间中,而是为每一个表建立一个独立表空间,也就是说我们创建了多少个表,就有多少个独立表空间。

使用独立表空间来存储表数据的话,会在该表所属数据库对应的子目录下创建一个表示该独立表空间的文件,文件名和表名相同,只不过添加了一个.ibd的扩展名而已,所以完整的文件名称长这样: 表名.ibd

例如tb_innodb.ibd中存储了测试表tb_innodb的结构、数据、索引。

可以用ibd2sdi工具解析ibd文件。

系统表空间与独立表空间的设置

可以自己指定使用系统表空间还是独立表空间来存储数据,这个功能由启动参数innodb_file_per_table控制,比如说我们想刻意将表数据都存储到系统表空间时,可以在启动MySQL服务器的时候这样配置:

[server]
innodb_file_per_table=0 # 0:代表使用系统表空间; 1:代表使用独立表空间

其他类型的表空间

随着MySQL的发展,除了上述两种老牌表空间之外,现在还新提出了一些不同类型的表空间,比如通用
表空间(general tablespace)、临时表空间(temporary tablespace)等。

表结构:

mysql8中后缀为.sdi,mysql5.7中后缀为.frm。

例如tb_myisam_363.sdi中存储了测试表tb_myisam表结构。

表中数据和索引:

在MyISAM中的索引全部都是二级索引,该存储引擎的数据和索引是分开存放的。所以在文件系统中也是使用不同的文件来存储数据文件和索引文件,同时表数据都存放在对应的数据库子目录下。

例如tb_myisam.MYD存储数据(MYData)、tb_myisam.MYI存储索引(MYIndex)。

参考资料:

  • MySQL – 尚硅谷 – 宋红康
  • MySQL官方文档

Original: https://www.cnblogs.com/herecwh/p/16242893.html
Author: 玮浩同学
Title: MySQL的文件系统(Linux环境)

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/505403/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

  • Java实现负载均衡算法–轮询和加权轮询

    1.普通轮询算法 轮询(Round Robin,RR)是依次将用户的访问请求,按循环顺序分配到web服务节点上,从1开始到最后一台服务器节点结束,然后再开始新一轮的循环。这种算法简…

    数据库 2023年6月6日
    089
  • 自己编写平滑加权轮询算法,实现反向代理集群服务的平滑分配

    学会了负载均衡算法,却没有用起来? 今天就来 实战一遍,感受下平滑加权轮询算法的魅力。 通过Java语言,自己编写的平滑加权轮询算法,结合线程池和Socket 网络编程等,实现了反…

    数据库 2023年6月6日
    0271
  • MySQL索引知识点&面试常见问题

    来源:BiggerBoy作者:北哥原文链接:https://mp.weixin.qq.com/s/fucHvdRK5wRrDfBOo6IBGw 大家好我是北哥,今天整理了MySQL…

    数据库 2023年6月11日
    086
  • 微服务架构设计模式

    内容简介 成功地开发基于微服务架构的应用软件,需要掌握一系列全新的架构思想和实践。在这本书籍中解释了 44 个架构设计模式,这些模式用来解决诸如服务拆分、事务管理、查询和跨服务通信…

    数据库 2023年6月6日
    0139
  • java 网络考试 在线教育系统 模块设计方案

    组建试卷:创建试卷,题目、类型、总分、及格分数、时长、出成绩方式、重复考试、公布答案、考试对象等 试卷题型:试卷明细,给试卷添加题型,分值,随机或者手动从题库选择试题,预览试题,自…

    数据库 2023年6月6日
    099
  • [LeetCode]13. 罗马数字转整数

    罗马数字包含以下七种字符: I, V, X, L,C,D 和 M。 字符 数值 I 1 V 5 X 10 L 50 C 100 D 500 M 1000 例如, 罗马数字 2 写做…

    数据库 2023年6月9日
    0129
  • MariaDB主从备份

    MariaDB主从备份 修改my.ini的参数 注释第30行左右的bind-address bind-address=127.0.0.1 注释61行左右的log-bin=mysql…

    数据库 2023年6月9日
    066
  • PLSQL_developer安装与配置

    前言: 记录安装与配置操作 环境: 客户机:windows服务器:虚拟机中的windows server 2003/————&#82…

    数据库 2023年6月11日
    088
  • B树-查找

    B树系列文章 1. B树-介绍 2. B树-查找 3. B树-插入 4. B树-删除 查找 假设有一棵3阶B树,如下图所示。 下面说明在该B树中查找 52的过程 首先,从根结点出发…

    数据库 2023年6月14日
    0138
  • Eureka详解系列(三)–探索Eureka强大的配置体系

    通过前面的两篇博客,我们知道了:什么是 Eureka?为什么使用 Eureka?如何使用 Eureka?今天,我们开始来研究 Eureka 的源码,先从配置部分的源码开始看,其他部…

    数据库 2023年6月6日
    0203
  • 使用mybatis连接数据库–针对小白

    实现mybatis连接数据库的步骤: 1.建表 2.pom.xml的配置 <?xml version="1.0" encoding="UTF-8…

    数据库 2023年6月11日
    059
  • Minio的安装与使用

    Minio的安装与使用 一、Minio介绍 MinIO 是在 Apache License v2.0 下发布的高性能对象存储. 就是说是个存东西的玩意,比较方便配好启动就能访问,也…

    数据库 2023年6月6日
    0105
  • 如何使用Intellij IDEA工具导入SVN项目

    步骤一:选择VCS 打开Intellij IDEA开发工具,在导航栏中选择 VCS栏位,如图。 步骤二:创建SVN地址 执行步骤二,可以看见打开了一个SVN Repositorie…

    数据库 2023年6月6日
    083
  • MySQL 数据库自动备份

    压缩文件恢复 gzip -d backup.sql.gz | mysql -h -u -p Tips: gzip -d为解压, 下面介绍下gzip用法与参数介绍(gzip命令只是压…

    数据库 2023年5月24日
    070
  • Mongodb使用总结

    Mongodb使用总结 基于内存操作,便于与网站交互 数据库-集合-文档(存储多种数据类型),我们的操作都是基于单文档进行操作,并且通过冗余字段进行操作 嵌入式数组文档减少了对昂贵…

    数据库 2023年6月11日
    081
  • 工作中常用Less知识点实践总结

    工作中常用Less知识点实践总结,帮助你更好的使用Less 我所理解的Less的一些好处 函数式编程css 自定义变量用于整体主题调整 嵌套语法简化开发复杂度 mixin的写法 ….

    数据库 2023年6月11日
    082
亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球