- MySQL体系结构的特点:插件式的表存储引擎
MySQL | Oracle | |
---|---|---|
架构 | 单进程多线程。与SQL Server类似 | 多进程架构(Oracle的Windows版本也是单进程多线程架构) |
无参数文件时启动实例 | 按编译时的默认参数设置启动 | 启动会报错 |
- MySQL参数文件在哪?
#查看mysql查找其配置文件的路径
mysql --help | grep my.cnf
#配置文件中读取的参数值会以读到的最后一个文件的为准
/etc/my.cnf /etc/mysql/my.cnf /usr/local/mysql/etc/my.cnf ~/.my.cnf
1. 体系结构
数据库是文件的集合,依照某种数据模型组织起来并存放于二级存储器中的数据集合;
数据库实例是程序,位于用户和操作系统之间的一层数据管理软件。用户,应用程序对数据的任何操作都通过实例。
2.存储引擎
2.1 InnoDB
- 主要面向OLTP在线事务处理。
- 支持事务,行锁,外键,MVCC多版本并发控制,实现了4种隔离级别,类似Oracle的非锁定读。
- 聚集(clustered)方式:表中顺序按主键顺序存放,无主键时,会生成6字节ROWID作为主键。
- 一些网站使用InnoDB处理插入/更新的操作平均800次/秒。
2.2 MyISAM
- 主要面向OLAP应用。不支持事务,表锁,支持全文索引。
- 特别:缓冲池只缓存索引文件,不缓存数据文件,数据文件的缓存交由操作系统本身来完成。
- MYD(数据文件) MYI(索引文件)
2.3 NDB
- 集群存储引擎。类似ORACLE的RAC集群
架构 | |
---|---|
NDB集群存储引擎 | share nothing。独享CPU/内存/硬盘,并行效率高 |
Oracle RAC集群 | share everything。共享CPU/内存/硬盘,并行效率低 |
- 数据全部存放在内存(5.1后非索引数据可放到磁盘)。主键查找极快,添加DN节点可线性提升性能,高可用高性能。
- JOIN操作是在数据库层,网络开销大。
2.4 Memory
- 数据存放在内存中,适合临时表,数据仓库中的纬度表。
- 默认使用Hash索引,而不是B+树索引。
- 支持表锁。不支持TEXT,BLOB列。存储VARCHAR是按照定长CHAR方式。
- 中间结果集超过容量或含有TEXT,BLOB,数据库会把其存放到磁盘中。
2.5 Arichive
- 提供高速插入和压缩功能。使用zlib算法压缩后存储,比例可达1:10.。
- 只支持INSERT和SELECT,适合归档数据如日志信息。
- 行锁实现高并发插入,但并非事务安全。
2.6 Federated
- 不存放数据,指向一台远程MySQL服务器上的表。类似SQL Server的链接服务器和Oracle的透明网关。但只支持Mysql的表。
2.7 Maria
- 设计目标是取代MyISAM从而成为默认存储引擎。
- 支持缓存数据和索引文件。行锁,MVCC,支持事务和非事务安全的选项,更好的BLOB类型的处理性能。
2.8 其他
Merge CSV Sphinx Infobright
3.存储引擎比较
//查看支持的存储引擎
SHOW ENGINES;
//或者查询系统表
SELECT * FROM INFORMATION_SCHEMA.ENGINES
4.连接MySQL
常见的进程通信方式:管道、命名管道、TCP/IP套接字、UNIX域套接字
4.1 TCP/IP
MYSQL在任何平台都提供的连接方式。
连接实例时,MYSQL会先检查权限视图,判断客户端IP是否允许连接。
USE MYSQL;
SELECT HOST, USER, PASSWORD FROM USER;
4.2 命名管道和共享内存
WINDOWS一些平台,通信的两线程在同一服务器上可使用命名管道。配置文件中启用enable-named-pipe。
4.1版本后提供共享内存连接方式,配置文件添加–shared-memory,客户端连接必须使用–protocol=memory
4.3 UNIX域套接字
Linux和UNIX环境下使用。不是网络协议,所以客户端和数据库实例得在同一服务器。
配置文件中指定套接字文件的路径,如–socket=/tmp/mysql.sock