数据库文件

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


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

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

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

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

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

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

参数文件


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

  1. mysql --help | grep my.cnf

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

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

  1. select * from information_schema.global_variables;

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

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

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


日志文件

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


  • 错误日志
该文件对Mysql的启动、运行、关闭过程进行了记录。在遇到问题时,首先应该查看此文件,可以通过命令来定位该文件。 
  1. show variables like 'log_error';

  • 慢查询日志
该文件记录了所有运行时间超过阀值的SQL语句,该阀值可以通过参数long_query_time来设置。默认值为10秒。
需要注意的两点内容:
首先,慢查询日志记录的是大于阀值的SQL语句,而不是大于等于!!!
其次,从Mysql 5.1开始,long_quey_time开始以微秒记录sql语句运行时间。
  1. show variables like 'long_query_time';

 

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

 

设置开启慢日志命令;
  1. set global slow_query_log=off;

另一个和慢查询相关的参数是log_queries_not_using_index,如果运行的SQL语句没有使用索引,则Mysql则同样会将这条SQL语句记录到慢查询日志文件中;
  1. 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中去查询了。 
  1. show variables like 'log_output';



同样也可以将查询日志的记录放入mysql架构下的general_log表。
  • 查询日志
查询日志记录了所有对Mysql数据库请求的信息,不论这些请求是否得到了正确的执行。默认文件名为:主机名.log。我们查看一个查询日志
  1. show variables like 'general_log%';



设置变量general_log以开启通用查询日志
  1. set @@global.general_log=1;

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

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

套接字文件

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

pid文件

当MySQL实例启动时,会将自己的进程ID写入pid文件中。该文件可由参数pid_file控制。默认路径位于数据库目录下,文件名为主机名.pid。
  1. 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;
可以通过以下命令查看重做日志的配置信息:
  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学习笔记-数据库文件的更多相关文章

  1. MySQL学习笔记-数据库内存

    数据库内存 InnoDB存储引擎内存由以下几个部分组成:缓冲池(buffer pool).重做日志缓冲池(redo log buffer)以及额外的内存池(additional memory pool ...

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

    数据库后台线程 默认情况下讲述的InnoDB存储引擎,以后不再重复声明.后台线程有7个--4个IO thread,1个master thread,1个锁监控线程,1个错误监控线程.IO thread的 ...

  3. mysql学习笔记--数据库操作

    一.显示数据库 show databases; 二.创建数据库 create database [if not exists] 数据库名 [字符编码] 注意: a. 如果已经存在数据库再创建会报错 b ...

  4. MYSQL学习笔记——数据库范式及MYSQL优化整体思路

    一.数据库范式                                                                               为了建立冗余较小.结构合理的 ...

  5. mysql学习笔记--数据库索引

    一.索引的优点:查询速度快 二.索引的缺点: 1. 增.删.改(数据操作语句)效率低了 2. 索引占用空间 三.索引类型: 1. 普通索引 2. 唯一索引(唯一键) 3. 主键索引:只要主键就自动创建 ...

  6. mysql学习笔记--数据库视图

    一.视图 1. 概念 a. 视图是一张虚拟表,它表示一张表的部分或多张表的综合的结构 b. 视图仅仅是表结构,没有数据.视图的结构和数据建立在表的基础上 2. 创建视图 a. 语法: create [ ...

  7. mysql学习笔记--数据库单表查询

    一.查询语句 1.  select [选项] 列名 [from 表名]  [where 条件]  [order by 排序]  [group by 分组]  [having 条件]  [limit 限 ...

  8. mysql学习笔记--数据库设计

    一.数据库基本概念 1. 关系:两个表的公共字段 2. 行:也称记录,也称实体 3. 列:也称字段,也称属性 4. 数据冗余:相同的数据存在不同的地方. 注意:冗余只能减少,不能杜绝. 减少冗余,只能 ...

  9. mysql学习笔记--数据库预处理

    一.概念 1. 预编译一次,可以多次执行.用来解决一条sql语句频繁执行的问题 2. 语法 a. 预处理语句:preapre 预处理名字 from 'sql语句' b. 执行预处理:execute 预 ...

随机推荐

  1. yyyy-MM-dd 转换为年月日

      yyyy-MM-dd 转换为年月日   先用parse转成date型,再用format转成string. Date date = new SimpleDateFormat("yyyy-M ...

  2. Brainwashing

    [Brainwashing] 1.教育和媒体都是“国家意识机器”,他们维持并复制国家领导者的思想. 2.洗脑.情感.意识. 3.洗脑所产生的各种影响具有如下特征:全用暴力,或者进行欺骗,或二者兼有. ...

  3. SO\PR\MO\排产回写的数据如下

    QTYOPEN(WMENG).EDATU(promised_mat_availdate).... insert into OUT_ORDER_RES ' ; --PR 净需求 ' ; ---加上PR回 ...

  4. python全栈 函数名 闭包及迭代器

    1,函数名的运用 2.闭包 3.迭代器 一.函数名的运用 1.函数名的命名规范和变量是一样的 函数名其实就是变量名 (1)函数名的内存地址 例: def func(): print("ale ...

  5. JMeter学习(三十六)发送HTTPS请求(转载)

    转载自 http://www.cnblogs.com/yangxia-test Jmeter一般来说是压力测试的利器,最近想尝试jmeter和BeanShell进行接口测试.由于在云阅读接口测试的过程 ...

  6. GsonFormat的使用 (转)

    一.Android Studio快速添加Gson 具体操作:        1.File->Project Structure:   2.app->Dependencies->&qu ...

  7. 有人说,即使没有JavaScript,你也可以做网页。在纯HTML

    有人说,即使没有JavaScript,你也可以做网页.在纯HTML +服务器端语言理论中也可以完成所有功能,那么,为什么以及在哪里存在JavaScript?   JS,全称JavaScript   在 ...

  8. linux环境下的c++编程

    就C++开发工具而言,与Windows下微软(VC, VS2005等)一统天下相比,Linux/Unix下C++开发,可谓五花八门,各式各样.Emacs, vi, eclipse, anjuta,kd ...

  9. Apache+PHP+MySQL环境搭建

    准备安装包:Apache: apache_2.2.11-win32.msi (http://pan.baidu.com/s/1nvdiNcH)PHP: php-5.2.5-Win32.zip (htt ...

  10. 微信小程序开发——活动规则类文案文件读取及自动转换为小程序排版代码

    前言: 最近做的小程序活动规则内容比较多,且一直处于修改中.由于小程序并不支持类似Html5中的预排版,所以,活动规则内容修改较大的时候,仍需要对新的内容用小程序的<text>组件做下排版 ...