MySQL学习笔记-数据库文件

2023-03-14,,

数据库文件

MySQL主要文件类型有如下几种


参数文件:my.cnf——MySQL实例启动的时候在哪里可以找到数据库文件,并且指定某些初始化参数,这些参数定义了某种内存结构的大小等设置,还介绍了参数类型以及定义作用域;

日志文件:记录MySQL对某种条件做出响应时候写入的文件,包括错误日志、查询日志、慢查询日志、二进制日志;

Mysql表结构文件:存放MySQL表结构定义文件,不论采用何种存储引擎,MySQL都有一个以frm为后缀名的文件;

Socket文件:当用linux的MySQL命令行窗口登录的时候需要的文件;

Pid文件:MySQL实例的进程ID文件;

存储引擎文件:每个存储引擎都有自己的文件夹来保存各种数据,这些存储引擎真正存储了数据和索引等数据。

参数文件


当MySQL实例启动时,MySQL会读取一个配置参数文件,用来寻找数据库的各种文件所在位置以及指定某些初始化参数,这些参数通常定义了某种内存结构有多大等设置。默认情况下,MySQL实例会按照一定的次序去取,可以通过命令行,查看my.cnf文件的位置;

    mysql --help | grep my.cnf

Mysql在启动时可以不需要参数文件,但是如果在默认的数据库目录下找不到mysql架构,则启动会失败;

Mysql的参数可以通过“show variables”来查看,由于从mysql5.1版本开始,可以通过information_schema架构下的GLOBAL_VARIABLES视图来进行查找,所以也可以这样查看

    select * from information_schema.global_variables;



Mysql 的参数类型:
分为动态(dynamic)和静态参数(static)。

动态参数意味着可以再mysql实例运行中进行更改,有些参数修改可以是基于会话的也可以是基于整个实例的生命周期;

静态参数说明在整个实例声明周期内都不得进行更改,就好像是只读(read only)的。。Mysql5.1的动态参数在这里。

日志文件


MySQL数据库中常见的日志文件有错误日志、二进制日志、慢查询日志。这些日志为数据库优化、问题查找带来了便利。一般来说日志文件的存放路径结构如下:


错误日志

该文件对Mysql的启动、运行、关闭过程进行了记录。在遇到问题时,首先应该查看此文件,可以通过命令来定位该文件。 

    show variables like 'log_error';

慢查询日志

该文件记录了所有运行时间超过阀值的SQL语句,该阀值可以通过参数long_query_time来设置。默认值为10秒。

需要注意的两点内容:
首先,慢查询日志记录的是大于阀值的SQL语句,而不是大于等于!!!
其次,从Mysql 5.1开始,long_quey_time开始以微秒记录sql语句运行时间。

    show variables like 'long_query_time';

 

但是在默认情况下,Mysql并不启动满查询日志,需要手工修改这个参数;

    show variables like 'log_slow_queries';

 

设置开启慢日志命令;

    set global slow_query_log=off;

另一个和慢查询相关的参数是log_queries_not_using_index,如果运行的SQL语句没有使用索引,则Mysql则同样会将这条SQL语句记录到慢查询日志文件中;

    show variables like 'log_queries_not_using_indexes';

 

在慢查询日志文件逐渐增大时,可考虑使用工具mysqldumpslow工具帮助我们分析。该工具的使用您可以使用 “man mysqldumpslow” 或者去这里了解。Mysql5.1开始可以将慢查询的日志记录放入一张表中,该表在mysql.slow_log表中。是否放在表中由参数‘log_output’来决定;

参数log_output指定了慢查询输出的格式,默认为FILE,也可以将其设置为TABLE,就可以去Mysql.slow_log中去查询了。 

    show variables like 'log_output';

同样也可以将查询日志的记录放入mysql架构下的general_log表。

查询日志

查询日志记录了所有对Mysql数据库请求的信息,不论这些请求是否得到了正确的执行。默认文件名为:主机名.log。我们查看一个查询日志

    show variables like 'general_log%';

设置变量general_log以开启通用查询日志

    set @@global.general_log=1;

二进制日志

二进制日志记录了对数据库执行更改的所有操作。二进制日志主要有以下两种作用:
恢复(recovery):某些数据库的恢复需要二进制日志,如当一个数据库全被文件恢复后,我们可以通过二进制日志进行point-in-time的恢复;
复制(replication):通过复制和执行二进制日志使得一台远程的MySQL数据库(一般称为slave或者standby)与一台MySQL数据库(一般称为master或者primary)进行实时同步。
可以通过以下命令查看地址信息:

    show variables like 'datadir';

注:二进制日志是一个比较复杂,并且DBA会常常用到的日志。在此不是学习重点,所以只是简要描述。

套接字文件


linux环境中本地连接MySQL需要一个套接字(socket)文件。文件可由参数socket控制。可以通过以下命令查看地址信息:

    show variables like 'socket' \G;

pid文件


当MySQL实例启动时,会将自己的进程ID写入pid文件中。该文件可由参数pid_file控制。默认路径位于数据库目录下,文件名为主机名.pid。

    show variables like 'pid_file' \G;

重做日志文件


对于InnoDB存储引擎而言重做日志至关重要,详细原理机制在cache 与buffer中已经讲解,在此不再赘述。
它的主要目的是,万一实例或者介质失败(media failure),重做日志文件就能派上用场。如数据库由于所在主机掉电的哦啊只实例失败,InnoDB存储引擎会使用重做日志回复到掉电前端时刻,以此来保证数据的完整性。

参数innodb_log_file_size、innodb_log_files_in_group、innodb_mirrored_log_groups、innodb_log_group_home_dir影响着重做日志文件的属性。
innodb_log_buffer_size:控制redo log buffer大小;
innodb_log_files_in_group:控制redo log文件数量,默认为2;
innodb_mirrored_log_groups:控制日志镜像文件组数量,默认为1;
可以通过以下命令查看重做日志的配置信息:

    show variables like 'innodb%log%'\G;

undo日志


存在于共享表空间ibdata1里面,有一个回滚段地址,里面存放了头信息,配置头信息,段的头信息,里面存储了与redo相反的数据更新操作,如果rollback的话,就把undo段里面数据回写到数据文件里面。

Redo与undo他们并不是各自独立没有关系的,他们是有关联的,交替合作来保证数据的一致性和安全性。

与redo不同的是,redo存放在重做日志文件中,undo存放在数据库内部的一个特殊段(segment)中,这称为undo段(undo segment),undo段位于共享表空间内。如果用了独立表空间的话,则直接存储到表私自的空间中,而不存储到共享表空间中。在innodb存储引擎中,undo log用来完成事务的回滚以及MVCC的功能。

表结构定义文件


MySQL是插件式存储引擎的体系结构,对于数据的存储是按照表划分,每张表都会有与之对应的文件。不论采用何种存储引擎,MySQL都有一个以frm为后缀名的文件,这个文件记录了该表的表结构定义。

InnoDB存储引擎文件 


太重要,太有份量了,暂时搁置吧。下次抽空补上,这里需要看很多文章才能写好。

MySQL系列博客:


MySQL学习笔记-大纲

MySQL学习笔记-MySQL体系结构总览

MySQL学习笔记-数据库后台线程

MySQL学习笔记-数据库内存

MySQL学习笔记-cache 与 buffer

MySQL学习笔记-数据库文件

MySQL学习笔记-事务相关话题

MySQL学习笔记-MySQL数据库优化实践[转]

来自为知笔记(Wiz)

MySQL学习笔记-数据库文件的相关教程结束。

《MySQL学习笔记-数据库文件.doc》

下载本文的Word格式文档,以方便收藏与打印。