名词解释
- 数据库(databse)
“物理操作系统文件或其他形式文件类型的集合。在mysql数据库中,可以是frm、MYD、MYI、ibd结尾的文件。使用NDB引擎时候,文件存放在内存之中,定义不变”。
- 实例(instance)
“mysql数据库由后台线程以及一个共享内存区组成。共享内存可以被运行的后台线程所共享。数据库实例是真正用于操作数据库文件的。”
mysql数据库实例在系统上的表现就是一个进程。
”数据库是由一个个文件组成(一般来说都是二进制的文件)的,要对这些文件执行诸如SELECT、INSERT、UPDATE、DELETE之类的数据库操作是不能通过简单的操作文件来更改数据库的内容,需要通过数据库实例来完成对数据库的操作。“
mysql组成
- 连接池组件
- 管理服务和工具组件
- SQL接口组件
- 查询分析器组件
- 优化器组件
- 缓冲(Cache)组件
- 插件式存储引擎
- 物理文件
MySQL体系架构
(摘自Mysql官方手册)
mysql存储引擎
由于MySQL数据库开源特性,存储引擎可以分为MySQL官方存储引擎和第三方存储引擎。著名的InnoDB存储引擎(最早是三方存储引擎,后被Oracle收购),应用就极其广泛。
InnoDB存储引擎
支持事务,特点是行锁设计、支持外键,面向OLTP(在线事务处理)支持类似Oracle的非锁定读,即默认读取不会产生锁。将数据存放在一个逻辑的表空间中,由其自身进行管理。MySQL4.1(包含4.1)版本开始,将每个InnoDB存储引擎的表单独存放到一个独立的ibd文件中。此外它还支持裸设备(row disk)来建立其表空间。提供了插入缓冲(insert buffer)、二次写(double write)、自适应哈希索引(adaptive hash index)、预读(read ahead)等高性能和高可用的功能。
MYISAM存储引擎
MYISAM存储引擎不支持事务、表锁设计,支持全文索引,面向OLAP(在线分析处理)数据库应用。(OLAP与OLTP区别具体可以查看)
MYISAM存储引擎表由MYD和MYI组成,MYD存放数据文件,MYI存放索引文件。
NDB存储引擎
NDB存储引擎(share nothing)是一个集群存储引擎,类似Oracle的RAC(share everything架构)集群。特点是数据全部放在内存中(MySQL5.1版本开始,可以将非索引数据放在磁盘上),因此主键查找(primary key lookups)的速度极快。
Memory存储引擎
Memory存储引擎将表中数据存放在内存中。适用于存储临时数据的临时表,以及数据仓库中的纬度表。默认使用哈希索引。限制:不支持TEXT和BLOB列类型。
Archive存储引擎
Archive存储引擎只支持INSERT和SELECT操作,从MySQL5.1开始支持索
引。使用zlib算法将数据行(row)进行压缩后存储,压缩比一般可
达1:l0。非常适合存储归档数据,如日志信息。使用行锁来实现高并发的插入操作,但是其本身并不是事务安全的存储引擎,其设计目标主要是提供高速的插人和压缩功能。
Federated存储引擎
Federated存储引擎表并不存放数据,它只是指向一台远程MySQL数据库服务器上
的表。这非常类似于SQL Server的链接服务器和Oracle的透明网关,不同的是,当前
Federated存储引擎只支持MySQL数据库表,不支持异构数据库表。
Maria存储引擎
Maria存储引擎是新开发的引擎,设计目标主要是用来取代原有的MyISAM存储引
擎,从而成为MySQL的默认存储引擎。Maria存储引擎的开发者是MySQL的创始人之
一的Michael Widenius。因此,它可以看做是MyISAM的后续版本。Maria存储引擎的
特点是:支持缓存数据和索引文件,应用了行锁设计,提供了MVCC功能,支持事务和
非事务安全的选项,以及更好的BLOB字符类型的处理性能。
除此之外MySQL还有Merge、CSV等,都有各自使用场合。详细查看官方文档
不同存储引擎的区别
Table 16.1 Storage Engines Feature Summary
Feature | MyISAM | Memory | InnoDB | Archive | NDB |
---|---|---|---|---|---|
B-tree indexes | Yes | Yes | Yes | No | No |
Backup/point-in-time recovery (note 1) | Yes | Yes | Yes | Yes | Yes |
Cluster database support | No | No | No | No | Yes |
Clustered indexes | No | No | Yes | No | No |
Compressed data | Yes (note 2) | No | Yes | Yes | No |
Data caches | No | N/A | Yes | No | Yes |
Encrypted data | Yes (note 3) | Yes (note 3) | Yes (note 4) | Yes (note 3) | Yes (note 3) |
Foreign key support | No | No | Yes | No | Yes (note 5) |
Full-text search indexes | Yes | No | Yes (note 6) | No | No |
Geospatial data type support | Yes | No | Yes | Yes | Yes |
Geospatial indexing support | Yes | No | Yes (note 7) | No | No |
Hash indexes | No | Yes | No (note 8) | No | Yes |
Index caches | Yes | N/A | Yes | No | Yes |
Locking granularity | Table | Table | Row | Row | Row |
MVCC | No | No | Yes | No | No |
Replication support (note 1) | Yes | Limited (note 9) | Yes | Yes | Yes |
Storage limits | 256TB | RAM | 64TB | None | 384EB |
T-tree indexes | No | No | No | No | Yes |
Transactions | No | No | Yes | No | Yes |
Update statistics for data dictionary | Yes | Yes | Yes | Yes | Yes |
Notes:
-
Implemented in the server, rather than in the storage engine.
-
Compressed MyISAM tables are supported only when using the compressed row format. Tables using the compressed row format with MyISAM are read only.
-
Implemented in the server via encryption functions.
-
Implemented in the server via encryption functions; In MySQL 5.7 and later, data-at-rest encryption is supported.
-
Support for foreign keys is available in MySQL Cluster NDB 7.3 and later.
-
Support for FULLTEXT indexes is available in MySQL 5.6 and later.
-
Support for geospatial indexing is available in MySQL 5.7 and later.
-
InnoDB utilizes hash indexes internally for its Adaptive Hash Index feature.
-
See the discussion later in this section.
常用命令
查看mysql启用的进程情况
ps -ef | grep mysqld
查看MySQL数据库所支持的存储引擎
SHOW ENGINES
转换表的引擎的方法
ALTER TABLE XXX ENGINE=InnoDB;
修改默认存储引擎
SET DEFAULT_STORAGE_ENGINE=MyISAM;
创建表指定存储引擎
CREATE TABLE xxx(
xxxx;
) ENGINE=InnoDB
查看所有数据库
show databses;
查看所有表
show tables;
查看innodb版本
show variables like 'innodb_version'
查看innodb中的IO Thread
show engine innodb status;