MySQL的文件系统(Linux环境)

database

Linux环境下,MySQL的主要目录及其作用、数据库和数据表在文件系统上的存储结构。

目录

数据库文件目录

/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/

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

[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

InnoDB存储引擎模式

表结构:

在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)等。

MyISAM存储引擎模式

表结构:

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

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

表中数据和索引:

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

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

参考资料:

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

以上是 MySQL的文件系统(Linux环境) 的全部内容, 来源链接: utcz.com/z/536491.html

回到顶部