MySQL技术内幕-InnoDB存储引擎:第一章阅读

MySql体系结构和存储引擎

1.1 数据库与数据库实例

  • 数据库实例:数据库实例是应用程序,是位于用户与操作系统之间的一层数据管理软件,用户对数据库数据的任何操作,包括数据库定义、数据查询、数据维护、数据库运行控制等,都是在数据库实例下进行的,应用程序只有通过数据库实例才能和数据库打交道。
  • 数据库:数据库是文件的集合,是依照某种数据模型组织起来并存放于二级存储器中的数据集合。

在启动实例时,MySQL数据库会去读取配置文件,MySQL是按照/etc/my.cnf->/etc/mysql/my.cnf->/usr/local/mysql/etc/my.cnf->~/.my.cnf的顺序读取配置文件的。在Windows下,配置文件的后缀名也可能是.ini

配置文件中datadir参数指定了数据库所在路径。Linux下默认为、usr/local/mysql/data。但是该路径只是一个链接,其指向/opt/mysql_data目录。

1.2 MySQL体系结构

在这里插入图片描述

  1. 连接池组件
  2. 管理服务和工具组件
  3. SQL接口组件
  4. 查询分析器组件
  5. 优化器组件
  6. 缓冲组件
  7. 插件式存储引擎
  8. 物理文件

1.3 MySQL表存储引擎

1.3.1 InnoDB存储引擎

InnoDB存储引擎支持事务,主要面向在线事务处理方面的应用。同时支持行级锁,支持外键。InnoDB通过使用多版本并发控制(MVCC)来获得高并发性,并实现了SQL标准的4种隔离级别,默认为“可重复读”的级别。同时使用一种next-key locking的策略来避免幻读现象的产生。除此之外,InnoDB存储引擎还提供插入缓冲、二次写、自适应哈希索引、预读等高性能和高可用的功能。

对于表中数据的存储,InnoDB存储引擎采用了聚集的方式,每张表的存储都按照逐渐的顺序存放,如果没有显式地在表定义时指定逐渐,InnoDB存储引擎会为每一行生成一个6字节的ROWID,并以此作为主键。

1.3.2 MyISAM存储引擎

不支持事务、表锁和全文索引。该存储引擎的表是由MYD和MYI文件组成,MYD用来存放数据文件,MYI用来存放索引文件。

1.3.3 Memory存储引擎

该存储引擎将表中的数据全部存放在内存中,如果数据库重启或者发生崩溃,表中的数据将会消失。它默认使用的是哈希索引,而不是我们熟悉的B+树索引。

1.4 连接MySQL

连接MySQL操作是连接进程与MySQL数据库实例进行通信,从开发的角度来说,本质上是进程通信。常用的进程间通信方式有管道、命名管道、命名字、TCP/IP套接字、Unix域名套接字。MySQL提供的连接方式从本质上看都是上述提及的进程通信方式。

1.4.1 TCP/IP

mysql -h(target mysql server ip) -u(username) -p(password)

ex:
mysql -h192.168.0.101 -u david -p

通过TCP/IP连接到MySQL实例时,首先会检查一张权限视图,用来判断发起请求的客户端IP是否允许连接到MySQL实例,该视图在mysql库下,表名为user

1.4.2 命名管道与共享内存

若两个通信的进程在同一台服务器上,那么可以使用命名管道。在MySQL数据库中,需要在配置文件中启用**–enabel-named-pipe**选项,若要使用共享内存的连接方式,则需要在配置文件中添加–shared-memory,同时在链接时,客户端还必须使用-protoco=memory选项。

1.4.3 Unix域套接字

在Linux和Unix环境下,还可以使用Unix域套接字。Unix与套接字其实不是一个网络协议,所以只能在MySQL客户端和数据库实例在同一台服务器上的情况下使用。可以在配置文件中指定套接字文件的路径,如**-socket=/tmp/mysql.sock**。当数据库实例启动后,可以通过下列命令来进行Unix域套接字文件的查找:

mysql> show variabels like 'socket'

知道了Unix套接字文件的路径后,就可以使用该方式进行链接了,如下所示:

mysql -udavid -S /tmp/mysql.sock
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值