1.1 定义数据库和实例
数据库和实例的区别?
数据库是物理操作系统或其他形式文件的集合(数据库是文件的集合,是依照某种数据模型组织起来并存放于二级存储器中的数据集合)。而数据库实例是真正用于操作数据库文件的(数据库实例是程序,是位于用户和操作系统之间一层数据管理软件),Mysql数据库由后台线程以及一个共享内存区组成,共享内存可以被运行的后台线程所共享。这两个概念有时候可以互相使用,但两者的概念完全不同,在Mysql数据库中,实例与数据库是一一对应的,即一个实例对应一个数据库,一个数据库对应一个实例,但是在集群情况下可能存在一个数据库被多个实例使用的情况。(Mysql被设计为一种单进程多线程架构的数据库,而数据库实例在系统上的表现就是一个进程)
当启动实例时,Mysql数据库会去读取配置文件,根据配置文件的参数来启动数据库实例。下面演示了如何查看mysql数据库在哪里:
mysql --help | grep my.cnf
可以看到Mysql数据库是按照/etc/my.cnf -> /ect/mysql/my.cnf -> /usr/local/mysql/etc/my.cnf -> ~/.my.cnf的顺序读取配置文件的。如果这几个配置文件配置了相同的参数,那么会以最后一个配置文件的参数为准。
1.2 Mysql体系结构
Mysql体系结构如如下:
上面的体系结构由下面几部分组成:
- 连接池组件
- 管理服务和工具组件
- SQL接口组件
- 查询分析器组件
- 优化器组件
- 缓存组件
- 插件式存储引擎
- 物理文件
Mysql数据库区别于其他数据库的最重要的一个特点就是其插件式的表存储引擎,存储引擎是基于表的不是基于数据库的
1. 3 Mysql存储引擎
数据库最核心的一点就是用来存储数据,数据存储就避免不了和磁盘打交道。那么数据以哪种方式进行存储,如何存储是存储的关键所在。所以存储引擎就相当于是数据存储的发动机,来驱动数据在磁盘层面进行存储。不同的存储引擎功能差别很大。
- InnoDB存储引擎
概念
InnoDB存储引擎支持事务,其设计的主要目标是在线事务处理(OLTP)的应用。其特点是行锁设计、支持外键,是从5.5.8版本开始是Mysql的默认存储引擎。
特点
- InnoDB通过使用多版本并发控制(MVCC)来获得高并发性,并且实现了SQL标准的4种隔离级别,默认为Repeatable级别。同时使用一种被称为next-key locking(临键锁)的策略来避免幻读现象的产生。
- InnoDB存储引擎提供了插入缓冲、二次写、自适应hash索引、预读等高性能和高可用功能。
- 对于表中的数据存储,InnoDB采用了聚集的方式,因此每张表的存储都是按主键的顺序进行存放的,如果没有显示的在表的定义时指定主键,InnoDB存储引擎会为每一行生成一个6字节的ROWID,并以此作为主键。
- MyISAM存储引擎
概念
MyISAM是MySQL的默认数据库引擎(5.5版之前),由早期的ISAM所改良。虽然性能极佳,但却有一个缺点:不支持事务处理(transaction)。
特点
- MyISAM存储引擎一个与众不同的地方就是它的缓存池只缓存索引文件,而不缓冲数据文件。
- MyISAM存储引擎表由MYD和MYI组成,MYD用来存放数据文件,MYI用来存放索引文件
- MyISAM存储引擎表,Mysql数据库只缓存其索引文件,数据文件的缓存交由操作系统本身来完成。
- NDB存储引擎
概念
NDB存储引擎时一个集群存储引擎,类似于ORACLE的RAC集群,其结构式shar nothing的集群架构,因此可以提供很高的可用性。
特点
- 数据全部放在内存中,(5.1开始可以将非索引数据放在磁盘上),因此主键查找的数据极快,并且可以通过添加NDB数据存储节点(Data Node)可以线性地提高数据库性能,是高可用、高性能的集群系统。
- NDB存储引擎的连接操作实在MYSQL数据库层完成的,而不是在存储引擎中完成的。这意味着,复杂的连接操作需要巨大的网络开销,因此查询速度很慢。
1. 4 常见问题解答
- Mysql是否支持全文索引?
答:支持
- Myslq数据库快是因为不支持事务吗?
答:错!虽然Mysql的MyISAM存储引擎不支持事务,但是InnoDB支持。
- 当表的数据量大于1000万时Mysql的性能会急剧下降吗?
答:不!Mysql是数据库,不是文件,随着数据行数的增加,性能会有所下降,但是这些下降不是线性的,如果用户选择了正确的存储引擎,以及正确的配置,再多的数据mysql也能承受。
数据库和传统系统文件的区别是在于数据库支持事务
1.5 存储引擎相关操作语法
- 查看当前使用Mysql数据库所支持的存储引擎
show engines\G;
1.6 连接Mysql
连接Mysql操作是一个连接进程和Mysql数据库实例进行通信
- TCP/IP
TCP/IP套接字方式是Mysql数据库在任何平台下都提供的方式,也是网络中使用最多的方式。这种方式在TCP/IP连接上建立一个基于网络的连接请求。
mysql -h127.0.0.1 -u david -p
注意:在通过TCP/IP连接到MYSQL实例时,MYSQL数据库会线检查一张权限视图,用来判断发起请求的客户端IP是否运行连接到Mysql实例。
use mysql;
select host,user from user;
表中四个user都只能通过localhost本地对mysql实例进行连接
- 命名管道和共享内存
使用管道通信时,mysql需要在配置文件中启用--enable-named-pipe
选项。在mysql 4.1之后的版本中,mysql还提供了共享内存的连接方式,这是通过在配置文件中添加--shared-memory
实现的。如果想使用共享内存的连接方式,在连接时,Mysql客户端还必须使用--protocol=memory
选项