MySQL磁盘(物理)结构

MySQL磁盘(物理)结构_第1张图片

数据目录夹(在centos里面切换到mysql目录下面查看,可以看到许多数据文件。)

[root@localhost lib]# cd

[root@localhost ~]# cd /var/lib/mysql

[root@localhost mysql]# ls

auto.cnf  ib_logfile0  mysql        performance_schema

ibdata1   ib_logfile1  mysql.sock  test

 

连接到数据库上面

mysql> show databases;

+--------------------+

| Database           |

+--------------------+

| information_schema |

| mysql              |

| performance_schema |

| test               |

+--------------------+

可以才看到有四个数据库。

Inforamation_schema:主要存储了一些数据库对象信息,比如用户表信息,列信息,权限信息,字符集信息,分区信息等等。

Mysql:存储了系统用户权限信息。

 

 

之后创建一个mytest数据库。

mysql> create database mytest;

Query OK, 1 row affected (0.00 sec)

 

[root@localhost mysql]# cd /var/lib/mysql

[root@localhost mysql]# ls

auto.cnf  ib_logfile0  mysql       mytest              test

ibdata1   ib_logfile1  mysql.sock  performance_schema

之后再去观察,可以看到多出了一个mytest文件,和刚刚的数据库同名。

所以/var/lib/mysql称为数据目录夹。创建一个DB,就会有一个DB的名字和文件名字一样的目录夹产生。即/var/lib/DB名字 为数据库目录夹。

 

在数据库目录夹里面又存放了什么呢?

[root@localhost mysql]# cd mysql   来到mysql数据库目录夹里面

[root@localhost mysql]# ls

columns_priv.frm   innodb_index_stats.frm    slave_worker_info.ibd

columns_priv.MYD   innodb_index_stats.ibd    slow_log.CSM

columns_priv.MYI   innodb_table_stats.frm    slow_log.CSV

db.frm             innodb_table_stats.ibd    slow_log.frm

db.MYD             ndb_binlog_index.frm      tables_priv.frm

db.MYI             ndb_binlog_index.MYD      tables_priv.MYD

event.frm          ndb_binlog_index.MYI      tables_priv.MYI

Mysql数据库里面包含了innodb,mysiam的数据表。相应的对应了文件夹里面的文件。

 

查看mysql数据库里面 tables_priv.MYI的定义。

mysql> show create table tables_priv;

  `Host` char(60) COLLATE utf8_bin NOT NULL DEFAULT '',

  `Db` char(64) COLLATE utf8_bin NOT NULL DEFAULT '',

  `User` char(16) COLLATE utf8_bin NOT NULL DEFAULT '',

  `Table_name` char(64) COLLATE utf8_bin NOT NULL DEFAULT '',

  `Grantor` char(77) COLLATE utf8_bin NOT NULL DEFAULT '',

  `Timestamp` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,

  `Table_priv` set('Select','Insert','Update','Delete','Create','Drop','Grant','References','Index','Alter','Create View','Show view','Trigger') CHARACTER SET utf8 NOT NULL DEFAULT '',

  `Column_priv` set('Select','Insert','Update','References') CHARACTER SET utf8 NOT NULL DEFAULT '',

  PRIMARY KEY (`Host`,`Db`,`User`,`Table_name`),

  KEY `Grantor` (`Grantor`)

) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_bin COMMENT='Table privileges' |

 

mysiaminnodb和其他的引擎的表,不同引擎的表产生的文件也是不一样的。

上面可以看到mysiam引擎的表产生三个文件。

.frm文件(存储表的定义,即表是怎么建立的。下次数据库去查询的时候要告知客户有哪些字段,已经这个字段的长度为多少。这个文件无论是那种引擎都会形成这样的文件。)

.MYD文件(MYData存储数据)

.MYI文件(MYIndex存储索引)

.MYD,.MYImysiam引擎独特的地方。一个存放数据,一个存放索引。都已文件的形式保存。innodb这种引擎没有这两种文件。只有.frm文件,甚至innodb使用的是共有的表空间。

 

 

所以创建一个数据库会在/var/lib下面创建一个和数据库同名的文件。在该数据库里面创建表就会在/usr/lib/数据库名字/下面创建.frm或者其他的文件。得看具体的存储引擎是什么。如下图所示

 MySQL磁盘(物理)结构_第2张图片

 

 

可以在centos下面使用file命令查看文件的类型。

[root@localhost mysql]# file tables_priv.frm

tables_priv.frm: MySQL table definition file Version 9  表定义

[root@localhost mysql]# file tables_priv.MYD

tables_priv.MYD: empty  表数据为空,因为里面没有插入数据

[root@localhost mysql]# file tables_priv.MYI

tables_priv.MYI: MySQL MISAM compressed data file Version 1 索引为压缩的数据文件   

 

 

Innodb会将所有的表放在自己的表空间里面,同时还有日志文件。同一个表空间里面存储多个数据库的表信息,所以innodb数据库的日志文件放在mysql数据目录夹下面。

[root@localhost mysql]# ls -l

总用量 110604

-rw-rw----. 1 mysql mysql       56 9月  22 16:24 auto.cnf

-rw-rw----. 1 mysql mysql 12582912 9月  26 11:16 ibdata1

-rw-rw----. 1 mysql mysql 50331648 9月  26 11:16 ib_logfile0

-rw-rw----. 1 mysql mysql 50331648 9月  22 16:24 ib_logfile1

drwx------. 2 mysql mysql     4096 9月  22 16:24 mysql

srwxrwxrwx. 1 mysql mysql        0 9月  26 11:16 mysql.sock

drwx------. 2 mysql mysql       20 9月  27 15:41 mytest

drwx------. 2 mysql mysql     4096 9月  22 16:24 performance_schema

drwx------. 2 mysql mysql       20 9月  27 14:31 test

红色的为日志文件,即两个日志文件,绿色的为表空间文件,这个如果空间不够了会自动增长。

 

 

 

最后一种文件为服务器产生的日志文件,注意不是mysql的日志文件,上面的innodb日志文件是用来数据灾难恢复用的。而服务器上的日志文件是描述服务器启动的过程,甚至服务器里面的信息可以在服务器之间进行同步,做数据的复制。

 

[root@localhost mysql]# /usr/sbin/mysqld --help --verbose | grep log-bin

2017-09-27 16:43:21 0 [Note] /usr/sbin/mysqld (mysqld 5.6.37) starting as process 8997 ...

2017-09-27 16:43:21 8997 [Note] Plugin 'FEDERATED' is disabled.

  --log-bin[=name]    Log update queries in binary format. Optional (but

  --log-bin-index=name

  --log-bin-trust-function-creators

                      If set to FALSE (the default), then when --log-bin is

  --log-bin-use-v1-row-events

2017-09-27 16:43:21 8997 [Note] Binlog end

2017-09-27 16:43:21 8997 [Note] Shutting down plugin 'MyISAM'

2017-09-27 16:43:21 8997 [Note] Shutting down plugin 'CSV'

log-bin                                                    (No default value)

由于目前这里没有设置值,所以在当前服务器的运行环境当中是没有日志可以维护的。

log-bin-index                                              (No default value)

log-bin-trust-function-creators                            FALSE

log-bin-use-v1-row-events                                  FALSE

 

logbin是以二进制的方式将日志的信息做保存。

还可以

[root@localhost mysql]# /usr/sbin/mysqld --help --verbose | grep slow

可以查看缓慢日志

  --slow-query-log    Log slow queries to a table or log file. Defaults logging

                      to a file hostname-slow.log or a table mysql.slow_log if

                      other slow log options

  --slow-query-log-file=name

                      Log slow queries to given log file. Defaults logging to

                      hostname-slow.log. Must be enabled to activate other slow

log-slow-admin-statements                                  FALSE

log-slow-slave-statements                                  FALSE

slow-launch-time                                           2

slow-query-log                                             FALSE

slow-query-log-file                                        /var/lib/mysql/localhost-slow.log

 

 

 

 

总结:

(1)数据的目录夹是存放各个数据库的信息

(2)不管是哪种引擎,建立表的时候都会产生表结构文件.frm

(3)Innodb的日志文件是用来做灾难数据恢复的。同时表空间里面存放了所有的表。


你可能感兴趣的:(mysql进阶)