MySQL学习笔记-数据库文件

时间:2023-01-13 22:57:31
数据库文件

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架构,则启动会失败;

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学习笔记-数据库文件

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

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

 MySQL学习笔记-数据库文件

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

 MySQL学习笔记-数据库文件

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

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

 MySQL学习笔记-数据库文件


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

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

MySQL学习笔记-数据库文件

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

MySQL学习笔记-数据库文件

设置变量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;
MySQL学习笔记-数据库文件

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. Linux知识:/root/.bashrc与/etc/profile的异同

    Linux知识:/root/.bashrc与/etc/profile的异同 要搞清bashrc与profile的区别,首先要弄明白什么是交互式shell和非交互式shell,什么是login shel ...

  2. iOS - OC NSFileManager		文件管理

    前言 @interface NSFileManager : NSObject @interface NSFileHandle : NSObject <NSSecureCoding> NSF ...

  3. JS中的call&lpar;&rpar;方法的理解

    fn.call(obj,arg1,arg2);这是call()方法的使用形式,apply()是差不多的.作用是用obj对象来替换fn中的this 举个栗子: function A(){ this.co ...

  4. Eclipse&plus;Axis使用WSDL文件生成Web Service服务端&sol;客户端

    JDK版本:1.5.0_22 Eclipse版本:Helios Service Release 2(3.6.2) WSDL文件的创建过程见http://blog.csdn.net/a19881029/ ...

  5. 数据库 SQL Server2012安装步骤详解

    这篇文章主要给大家讲解一下数据库SQL Server2012的安装步骤(若有雷同纯属巧合,还望谅解!) 在正式安装之前,我们需要进行两个设置: ① 首先需要关闭Windows防火墙,若不关闭,后续的安 ...

  6. 我的第二个开源库SuperTextView——中文文档

    一个简单的TextView实现了打字机的效果让文字一个个显示出来, 方法介绍: startShow  开始打字 使用: startShow(int typeStartTime,int typeTime ...

  7. C&sol;C&plus;&plus;静态代码安全检查工具

    静态代码安全检查工具是一种能够帮助程序员自动检测出源程序中是否存在安全缺陷的软件.它通过逐行分析程序的源代码,发现软件中潜在的安全漏洞.本文针对 C/C++语言程序设计中容易存在的多种安全问题,分别分 ...

  8. Html 标签种类

    Html 标签种类 自闭合标签与闭合标签 自闭合标签 <标签 /> 闭合标签 <标签></标签> 块级标签与行内标签 浏览器审查元素使用: (1) f12 查看每个 ...

  9. 转--python 中写单例

    原文地址 原文地址2 Python中的单例模式的几种实现方式的及优化 阅读目录(Content) 单例模式 实现单例模式的几种方式 1.使用模块 2.使用装饰器 3.使用类 4.基于__new__方法 ...

  10. IDEA中Git的使用基础

    场景概述 工作中多人使用版本控制软件协作开发,常见的应用场景归纳如下: 假设小组中有两个人,组长小张,组员小袁 场景一:小张创建项目并提交到远程Git仓库 场景二:小袁从远程Git仓库上获取项目源码 ...