MySQL系列(6)--初识存储引擎InnoDB

本文详细介绍了MySQL中各种类型的日志文件及其作用,包括error日志、slow-log、general-log、logbin二进制日志文件和redo重做日志文件。同时,还深入探讨了InnoDB存储引擎的工作原理,以及MySQL系统数据库的功能。

了解了MySQL的基础,包括启动,监听,语句分析,表对象之后。需要了解很重要的一块–存储引擎。首先从最流行,应用最广的InnoDB说起

MySQL配置文件中datadir目录下文件类型有如下几类:
这里写图片描述
分别介绍这几个分类
1、日志文件

1)error日志:记录启动、运行或停止MySQL服务器过程,以及MySQL运行过程中一些较为严重的错误信息
2)slow-log:开启后慢查询日志后,会生成xxx-slow.log的日志,记录SQL语句执行过程中超过慢查询的记录
3)general-log:配置了通用查询日志,MySQL将运行过程中的所有sql都记录在xxx.log的文件中。在搞QPS下,开启会影响系统的性能,一般会在跟踪调测性能的时候打开。在高QPS的情况下,文件会很大。
4)logbin二进制日志文件:开启了二进制日志后会存在多个二进制文件(如mysql-bin.xxxx), bin-log日志记录数据中发生的写入性操作(增删改),但不记录查询操作,语句以事件的方式保存,描述了数据的更改过程,此日志对发生灾难时数据恢复起到了极为重要的作用。

5)redo重做日志文件:ib_logfile0,ib_logfile1.支持事务性引擎的redo日志文件
redo日志默认情况下有两个文件,也即:ib_logfile0和ib_logfile1,如果在数据库启动的过程中没有这两个文件,系统会默认自动生成这两个文件。
默认情况下,ib_logfile0和ib_logfile1是两个独立的日志文件(可以配置的更多个ib_logfile文件),但是redo日志的写入在逻辑上对于ib_logfile0和ib_logfile1是连续的。
重做日志是MySQL事物处理的核心文件,事务处理的核心之一是一致性,也就是说要么全做,要么全不做。
MySQL事物操作是logwrite-ahead操作,也即先写日志(具体怎么写日志取决于innodb_flush_log_at_trx_commit的配置),相当于间接写盘操作。
目的是将对数据库具体的数据文件的分散随机写入(多个表的数据写入数据文件)转换成基于日志的顺序写入操作,而数据文件是异步写盘,
如果数据文件写盘异常,可以通过redo日志来“重做”,据此来提高事物性操作的效率。
redo日志空间的使用,在逻辑上相当于一个环形空间,redo日志不断向前推进写入记录,后台的定时执行的checkpoint将事务修改过尚未写盘的记录异步写入数据文件之后,日志空间可重用

  这里写图片描述
2、系统数据库
1)mysql

存储了系统的用户权限信息及帮助信息,新建的用户,用户的权限信息的都存储在MySQL库。比如在修改MySQL的root密码的时候,都要先use mysql这个系统库,然后再执行用户,授权等操作。

2)performance_schema

是数据库性能相关的信息的数据,记录的是数据库服务器的性能参数。
1)保留进程等待信息,包括锁,互斥变量,文件信息等。
2)保存历史事件汇总信息,为MySQL服务器性能评估提供参考信息
3)配置型选项,来决定是否记录一些与性能相关的信息,比如profile信息等,参考http://www.cnblogs.com/wy123/p/6979499.html

3)information_schema

数据库的元数据信息(Metadata),是数据库的数据,比如数据库的名字,数据库中的表名,字段名,字段类型等,可以说是数据库的数据字典信息。
这个库中的信息并非物理地保存在表中,而是动态地去读取其他文件得到的,比如上面一开始提到的共享表空间,对于用户数据中的对象,比如表结构等,都保存在共享表空间中,因此在datadir目录下不会生成information_schema文件夹。

4)sys

可以根据sys库中的数据快速了解系统的运行信息,方便地查询出来数据库的信息,在性能瓶颈,自动化吧运维等方面都有很大的帮助,sys库中的信息是通过视图的方式,将information_schema和performance_schema库中的数据结合起来,可以得到更加直观和容易理解的信息

3、用户数据库
对于innodb引擎的表,一个表分别对应两个文件,一个是.frm,存储的是表结构信息,一个是.ibd,存储的是表中的数据,从大小也可以看出来.ibd较大而.frm较小。另外一个文件是db.opt,保存的是数据库的配置信息,比如编码信息等
对于innodb表,如果是独立的表空间的话,数据库中的表结构以及数据都存储在数据库的路径下(而不是在共享表空间中ibdata1文件中)
  但是数据中的其他对象,包括undo信息,也即数据被修改之后,事务提交之间的版本信息,仍然存储在共享表空间的ibdata1文件中

1)共享表空间:ibdata1,如果指定innodb表为非独立文件的,用户自定义库中的表的数据就存储在共享表空间中。即便是innnodb表指定为独立表空间,用户自定义库中的某些元数据信息(比如存储过程等信息都存储在共享表空间中)。 对于innodb,innodb_file_per_table选项决定了是否启动独立表空间,MySQL5.7中是默认启动的,也就是说MySQL的用户数据库将使用独立表空间来存储数据,

这里写图片描述
正如截图看到的,本测试服务器的共享表空间中只有一个文件,如下通过show variables like ‘innodb_data%’;命令可以查询共享表空间的文件信息,实际上共享表空间可以配置成多个物理文件
这里写图片描述

2)临时表空间:ibtemp1,存储临时对象的空间,比如临时表对象等
临时表空间是存储全局级,回话级,事物级,检索级临时表对象的地方,有参数innodb_temp_data_file_path可以看到临时表空间的信息。
这里写图片描述

<think>好的,我现在需要处理用户关于MySQL基础知识的查询。首先,用户提供了三个引用内容,我需要仔细分析这些引用,看看它们提供了哪些信息。 引用[1]提到会带领大家认识和使用数据库的相关概念和基本操作,并提到初始MySQL的框架。引用[2]是关于MySQL基础入门的,包括数据库操作、表操作和SQL数据类型,还提到MySQL的架构。引用[3]则涉及安装和环境变量配置,以及如何通过命令行连接MySQL。 用户的问题是想了解初识MySQL的基础教程。根据引用内容,我应该组织一个结构清晰的回答,涵盖MySQL的基本概念、架构、安装步骤、基本操作如数据库和表的创建,以及简单的SQL语句。同时,需要按照用户的要求,使用正确的LaTeX格式,生成相关问题,并在引用处添加标识。 首先,我需要确认MySQL的基础知识通常包括哪些部分。根据引用内容,可能包括MySQL的架构、安装配置、数据库和表的操作、数据类型等。然后,我需要将这些内容分步骤解释,确保每个部分都简明扼要,并正确引用来源。 需要注意的是,用户要求行内数学表达式用$...$,独立公式用$$...$$,虽然MySQL基础知识可能涉及较少的数学公式,但如果提到比如索引的算法或其他需要公式的地方,需要正确应用格式。不过当前引用内容中没有涉及复杂公式,可能可以忽略,但需保持警惕。 另外,回答需要生成相关问题。根据引用内容中的主题,相关问题可能涉及架构的细节、安装步骤的详细说明、SQL语句的具体用法,以及优化方法等。 在结构上,应该按照用户示例中的方式,先给出回答,再列出相关问题。回答需要分点,如MySQL简介、架构、安装配置、基本操作等。每个部分引用对应的引用来源。 现在,我需要确保所有引用都被正确标注。例如,在提到MySQL架构时,需要引用[^2],在安装步骤引用[^3],在基本操作部分引用[^1]和[^2]。 可能还需要检查是否有遗漏的信息,比如SQL数据类型在引用[2]中提到,应该在回答中包括这部分内容,并引用。 最后,生成的相关问题需要与回答内容相关,可能包括如何安装MySQLMySQL架构的组成部分、数据库操作的具体步骤、SQL数据类型有哪些等。 总结步骤: 1. 简介MySQL及其重要性。 2. 讲解MySQL的架构,引用。 3. 安装和环境配置步骤,引用[^3]。 4. 数据库操作,如创建、使用数据库,引用。 5. 表操作和数据类型,引用。 6. 基本SQL语句示例。 7. 生成相关问题,覆盖架构、安装、操作、数据类型等。 需要确保每个引用标记自然出现在相关段落末尾,语言口语化,避免使用Markdown格式,符合用户的要求。</think>### 初识 MySQL 基础教程 #### 1. **MySQL 简介** MySQL 是最流行的开源关系型数据库管理系统之一,支持跨平台运行,广泛用于 Web 开发、数据分析等领域。其核心特点包括高性能、易用性和可扩展性。 #### 2. **MySQL 架构** MySQL 采用分层架构,主要分为: - **连接层**:管理客户端连接(如通过命令行或应用程序)[^3]。 - **服务层**:处理 SQL 解析、查询优化等核心功能。 - **存储引擎层**:负责数据存储和检索(如 InnoDB、MyISAM)[^2]。 #### 3. **安装与配置** - **安装步骤**:从官网下载对应操作系统的安装包,按向导完成安装。 - **配置环境变量**(Windows 示例): 将 MySQL 的 `bin` 目录(如 `C:\Program Files\MySQL\MySQL Server 8.0\bin`)添加到系统环境变量。 - **连接数据库**: ```bash mysql -h 127.0.0.1 -P 3306 -u root -p ``` 输入密码后即可进入交互界面。 #### 4. **数据库操作** - **创建数据库**: ```sql CREATE DATABASE mydb; ``` - **切换数据库**: ```sql USE mydb; ``` - **删除数据库**: ```sql DROP DATABASE mydb; ``` 以上操作需通过 SQL 语句执行[^1]。 #### 5. **表操作与数据类型** - **创建表**(示例): ```sql CREATE TABLE users ( id INT PRIMARY KEY AUTO_INCREMENT, name VARCHAR(50) NOT NULL, age INT, created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ); ``` - **常见数据类型**: - 整数:`INT`, `TINYINT` - 字符串:`VARCHAR(n)`, `TEXT` - 日期时间:`DATE`, `DATETIME` - 浮点数:`FLOAT`, `DECIMAL` #### 6. **基本 SQL 语句** - **插入数据**: ```sql INSERT INTO users (name, age) VALUES ('Alice', 25); ``` - **查询数据**: ```sql SELECT * FROM users WHERE age > 20; ``` - **更新数据**: ```sql UPDATE users SET age = 26 WHERE name = 'Alice'; ``` - **删除数据**: ```sql DELETE FROM users WHERE id = 1; ``` --- ###
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值