0
点赞
收藏
分享

微信扫一扫

MySQL(InnoDB剖析):01---数据库和实例的概念、启动时读取的配置文件、MySQL体系结构


一、数据库和实例的概念

  • 数据库领域中有两个词很容易混淆,就是“数据库(databases)”和“实例(instance)”

数据库和实例的概念

  • 数据库:物理操作系统文件或其他形式文件类型的集合。在MySQL数据库中,数据库文件可以是frm、MYD、MYI、ibd结尾的文件。当使用NDB引擎时,数据库的文件可能不是操作系统上的文件,而是存放于内存之中的文件,但是定义仍然不变
  • 实例:MySQL数据库有后台线程以及一个共享内存区组成。共享内存可以被运行的后台线程所共享。需要牢记的是,数据库实例才是真正用于操作数据库文件的
  • 在MySQL数据库中,实例与数据库的关系通常是一一对应的,即一个实例对应一个数据库,一个数据库对应一个实例。但是,在集群情况下可能存在一个数据库被多个数据库实例使用的情况
  • MySQL被设计为一个单进程多线程架构的数据库,这点与SQL Server比较类似,但与Oracle多进程的架构有所不同(Oracle的Windows版本也是单进程多线程架构的)。这就是说,MySQL数据库实例在系统上的表现就是一个进程

演示案例

  • 在Linux操作系统中使用mysqld_safe脚本来启动MySQL

MySQL(InnoDB剖析):01---数据库和实例的概念、启动时读取的配置文件、MySQL体系结构_mysql

  • 然后通过ps命令查看MySQL的后台进程。其中进程号为3039的就是MySQL实例

MySQL(InnoDB剖析):01---数据库和实例的概念、启动时读取的配置文件、MySQL体系结构_数据库和实例的概念_02

二、配置文件

  • 当启动实例时,MySQL数据库会去读取配置文件,根据配置文件的参数来启动数据库实例
  • 与Oracle的不同:
  • 这与Oracle的参数文件(spfile)相似,不同的是,Oracle中如果没有参数文件,在启动实例时会提供找不到参数文件,数据库启动失败
  • MySQL数据库中,可以没有配置文件,在这种情况下,MySQL会按照编译时的默认参数设置启动实例
  • 在Linux下,配置文件一般放在/etc/my.cnf或/etc/mysql/my.cnf下
  • 在Windows下,配置文件的后缀可能是.cnf,也可能是.ini

查看配置文件在何处

①Linux系统下:

​mysql --help | grep my.cnf​

MySQL(InnoDB剖析):01---数据库和实例的概念、启动时读取的配置文件、MySQL体系结构_mysql_03

  • 可以看到MySQL数据库是按/etc/my.cnf->/etc/mysql/my.cnf->/usr/local/mysql/etc/my.cnf->~/.my.cnf的顺序来读取配置文件的
  • 如果几个配置文件都有一个相同的参数,则MySQL以读取到的最后一个配置文件中的参数为准

②Windows系统下:

  • Windows操作系统下运行如下命令可以找到如下内容

​mysql --help​

MySQL(InnoDB剖析):01---数据库和实例的概念、启动时读取的配置文件、MySQL体系结构_MySQL体系结构_04

三、mysql实例的路径

  • 配置文件有一个参数datadir,指定了数据库所在的路径。不同操作系统下该路径可能不同,例如上图查看MySQL后台进程可以看到--datadie参数为/var/lib/mysql。用户可以修改该参数,当然也可以使用该路径

演示说明

  • 下面的环境为Ubuntu14.04

​show variables like 'datadir'\G​

MySQL(InnoDB剖析):01---数据库和实例的概念、启动时读取的配置文件、MySQL体系结构_数据库_05

四、MySQL体系结构

  • MySQL数据库的体系结构如下,其结构图摘自MySQL官方手册

MySQL(InnoDB剖析):01---数据库和实例的概念、启动时读取的配置文件、MySQL体系结构_mysql_06

  • MySQL由以下几部分组成:
  • 连接池组件
  • 管理服务和工具组件
  • SQL接口组件
  • 查询分析器组件
  • 优化器组件
  • 缓冲(Cache)组件
  • 插件式存储引擎
  • 物理文件
  • 从图中可以看到,MySQL数据库区别于其他数据库的最重要的一个特点就是其插件式的表存储引擎。MySQL插件式的存储引擎架构提供了一系列标准的管理和服务支持,这些标准与存储引擎本身无关,可能是每个数据库系统本身都必需的,如SQL分析器和优化器等,而存储引擎时底层物理结构的实现,每个存储引擎开发者可以按照自己的意愿来进行开发
  • 需要特别注意的是,存储引擎是基于表的,而不是数据库
举报

相关推荐

0 条评论