目录
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体系结构
- 连接池组件
- 管理服务和工具组件
- SQL接口组件
- 查询分析器组件
- 优化器组件
- 缓冲组件
- 插件式存储引擎
- 物理文件
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