InnoDB存储引擎体系结构图

   

mysql结构图 mysql数据库表结构图_慢查询

 

 

1.InnoDB数据库的结构

所以这里的redo log只是InnoDB存储引擎的,这里是循环写入的(如下图这种模式)。但经过mysql server层的封装的话,日志是放在iblog下的。

    

mysql结构图 mysql数据库表结构图_数据_02

  iblog对所有的存储引擎做了一层封装,把所有存储引擎的日志都封装成iblog了。

 

  (2)user tablespace:用户表空间

    包含:

    【1】insert buffer bitmap page:插入数据的位图索引页  【2】leaf page segment:聚集索引的叶子节点(也就是数据表数据)  【3】no leaf page segment:非叶子节点的页(其实也就是索引存放)

    从这里我们可以查出,其实聚集索引是逻辑上连续,而物理上并不是放在一起的。

  (3)sys tablespace:系统表空间

    主要是存放了undo,数据字典等信息;

 

 

2、数据库文件

  

mysql结构图 mysql数据库表结构图_mysql_03

 

(1)数据库配置文件/参数文件

按照顺序从以下几个目录去找;

  【1】/etc/my.cnf  【2】/etc/mysql/my.cnf  【3】/usr/local/mysql/my.cnf  【4】./my.cnf

  



#以下命令可以指定配置文件/参数文件的路径
mysqld_safe --default-file=/u01/my3306/my.cnf

#如果要运行还得再该命令后面加个&



mysqld_safe --default-file=/u01/my3306/my.cnf &



 

(2)表结构定义文件

 



--进入查看表结构定义文件目录
 cd /u01/my3306/data/mysql



mysql结构图 mysql数据库表结构图_mysql_04

以下这样的结构是MYISAM引擎的():

【1】.frm:放表定义  【2】.MYD:放表数据  【3】.MYI:放表索引

下面这些才是用户的:

mysql结构图 mysql数据库表结构图_mysql结构图_05

直接cat user.frm 是看不了的,会是乱码,需要mysql工具来看。

mysql结构图 mysql数据库表结构图_慢查询_06

要去官网下载 MySQL Utilities

#然后装好后运行下面语句即可查看表结构定义



mysqlfrm --diagnostic time_zone_transition.frm



 

(3)数据文件

就是图中的MYD文件,不过这是Myisam的,如果是innodb应该会把索引文件和数据文件放在一起

mysql结构图 mysql数据库表结构图_mysql结构图_05

 

(4)错误文件

这里因为my.cnf里面没有指定,所以查出来错误文件默认放在mysql数据根目录下的bogon.err

mysql结构图 mysql数据库表结构图_mysql结构图_08

mysql结构图 mysql数据库表结构图_mysql结构图_09

注意,是因为我的my.cnf文件是这样,所以结果才出现上图的情况

mysql结构图 mysql数据库表结构图_数据库_10

 

(5)慢查询日志

  一般慢查询日志默认是没有开启的,我们来看看如何开启。

  show variables like '%slow%';

  

mysql结构图 mysql数据库表结构图_慢查询_11

  slow_query_log 这里要设置为ON,这样慢查询日志才会启用,并且才会把数据写到如上图日志文件里面去。

  



#开启慢查询日志
set global slow_query_log='ON';

  


mysql结构图 mysql数据库表结构图_mysql_12


#查看当前超过多少秒认定为慢查询,这里显示的是10S,如下图

  


mysql结构图 mysql数据库表结构图_mysql_13

#设置查询时间超过多久为慢查询并记录在慢查询日志中去



set global long_query_time=1; 

注意,这些修改都只是临时的,重启一次mysql之后就没用了。要永久有效需要在my.cnf文件里配置。

  



#编辑配置文件/etc/my.cnf加入如下内容

[mysqld]

slow_query_log = ON

slow_query_log_file = /var/lib/mysql/test-10-226-slow.log

long_query_time = 1

#修改配置后重启mysql

systemctl restart mysqld

mysql -uroot -p

#使用下面命令验证

show variables like 'slow_query%';

mysql永久开启了漫查询日志功能



 




 

(6)通用日志

  默认不开,一般用作数据库审计。开了之后会把数据库所有的操作记下来。

  show variables like '%gen%'

   

mysql结构图 mysql数据库表结构图_数据库_14