关键字:客户端、服务端、逻辑架构、存储引擎
1.1、mysql介绍
mysql是一个关系型数据库服务器。mysql分为服务端和客户端,每一个mysql服务端进程都是一个mysql实例。
mysql服务端进程名称:mysqld;
mysql客户端进程名称:mysql。
1.2、启动mysql服务端
在mysql安装目录的bin目录下,有多个可以启动mysqld的执行文件,分别是:
(1)mysqld:启动一个服务端进程,不常用
(2)mysqld_safe:调用mysqld,并且启动一个监控进程并打印日志
(3)mysql.server:调用mysqld_safe
启动mysql:mysql.server start
停止mysql:mysql.server stop
(4)mysql_multi:可以启动多个mysql实例
1.3、启动mysql客户端
在mysql的安装目录的bin目录下,有多个可以启动mysql提供的客户端的执行文件,常用的几个是:
(1)mysql
连接mysql的服务端,使用方法:
mysql -h主机名 -u用户名 -p密码
或 mysql –host=主机名 --user=用户名 –password=密码
(2)mysqldump
备份数据库,使用方法
mysqldump -u用户名 -p密码 数据库名 > 备份文件名
(3)mysqlcheck、mysqladmin等
1.4、客户端向服务端发送请求
客户端向服务器端发送请求总共有三步:
连接管理、解析与优化、存储引擎。
1.4.1、连接管理
mysql服务端和客户端的连接本质上是进程间通讯的过程,mysql有三种通讯方式,分别是:
(1)TCP/IP
mysql服务器端默认监听3306端口,客户端可以通过3306端口和服务器端通讯,这是最常用的方式。
(2)命名管道和共享内存
windows操作系统的机制,在类unix机器上没有什么用处。
(3)unix套接字文件
必须是类unix机器,且客户端和服务器端在一台机器上。
服务器端:默认套接字文件位置:/tmp/mysql.sock
手动指定:mysqld –socket=/tmp/xxx.txt
客户端:mysql -hlocalhost -uroot –socket=/tmp/xxx.txt -p
(4)最大连接数
无论采用哪种通讯方式,服务器端每建立一个连接,就会创建一个线程去处理,所以服务器端有最大连接数的限制。
a)查看最大连接数
show variables like '%max_connections%';
b)修改最大连接数
set GLOBAL max_connections = 200;
1.4.2、解析与优化
解析与优化分为三个步骤:
查询缓存、语法解析、查询优化
(1)查询缓存
mysql会将查询语句和执行的结果缓存起来,如果下次有相同的查询语句,则直接返回结果。但维护查询缓存的成本很高,每次对mysql的数据进行修改或者修改表结构,缓存就会全部失效。所以,在mysql5.7.20开始,不推荐使用查询缓存,在mysql8.0中删除查询缓存。
(2)语法解析
将接受的sql语句进行语法解析,确认语句的正确性,并创建内部的数据结构,生成解析树。
(3)查询优化
对我们写的sql语句进行优化,并分析出使用什么查询方式,利用什么索引,计算查询成本,生成执行计划。
注:explain可以查看生成的执行计划
1.4.3、存储引擎
存储引擎是直接对文件系统中的数据进行读写操作的。存储引擎对上层提供了若干接口,SQL语句被解析和优化后,生成了执行计划,mysql就拿着执行计划依次执行存储引擎的接口即可。
常用的存储引擎命令:
(1)show engines:查看支持的存储引擎
(2)设置表的存储引擎:
建表指定
create table 表名{建表语句} engine = 存储引擎名称;
修改:
alter table 表名 engine = 存储引擎名称;
常见的存储引擎
innodb(默认)、myisam、memory
1.5、存储引擎
存储引擎是基于表的,不是数据库的,所以一个库下的不同表可以指定不同的存储引擎。
1.5.1、Innodb存储引擎
innodb存储引擎主要是面向在线事务处理的应用,innodb支持事务、支持外键,特点是行锁设计,并且支持一致性读,即默认情况下读取操作不会产生锁。
1.5.2、MyISAM存储引擎
MyISAM存储引擎主要是面向OLAP数据库应用,MyISAM不支持事务,不支持外键,表锁设计,支持全文检索。
1.5.3、NDB存储引擎
NDB存储引擎的数据是存储在内存中的,支持部分事务(除了持久性)。
1.5.4、Memory
NDB存储引擎的数据是存储在内存中的,支持表锁,不支持事务。