MySQL被设计为一个可移植的数据库,几乎在当前所有系统上都能运行,且基本能保证在各平台上的物理体系结构的一致性

定义数据库和实例

  • 数据库:物理操作系统文件或其他形式文件类型的集合
  • 实例:MySQL数据库由后台线程及一个共享内存区组成。数据库实例才是正真用于操作数据库文件的

总结:MySQL被设计为一个单进程多线程架构的数据库,MySQL数据库实例在系统上的表现就是一个进程

MySQL数据库配置文件顺序

image.png
由上图可知MySQL在Linux下以从左到右的顺序执行配置文件加载,且参数以最后配置文件为准
/etc/my.cnf 文件配置信息
image.png

  • datadir为数据库所在的路径

MySQL体系结构

  • 理解两个概念数据库和数据合实例:
    数据库:数据库是文件数据的集合
    数据库实例:通过数据库实例来完成对数据库的操作

540235201609270838545632139392246.jpg
上图为MySQL体系架构图(MySQL官方手册)
包含:

  • 连接池组件
  • 管理服务和工具组件
  • SQL接口组件
  • 查询分析器组件
  • 优化器组件
  • 缓冲(Cache)组件
  • 插件式存储引擎
  • 物理文件

MySQL数据库区别于其他数据库的最重要点为:插件式的表存储引擎
存储引擎是基于表的,而不是数据库

MySQL存储引擎

  • 存储引擎的好处:每个存储引擎都有各自的特点,能够根据具体的应用建立不同存储引擎表

由于MySQL数据库的开源特性,用户可以根据MySQL预定义的存储引擎接口编写自己的存储引擎,且可分为MySQL官方存储引擎和第三方存储引擎

InnoDB 存储引擎

支持事务,主要面向在线事务处理(OLTP)的应用。
特点为行锁设计、支持外键,并支持类似于Oracle的非锁定读(默认读取操作不会产生锁)。
从5.5.8开始,InnoDB为默认的存储引擎。
每个InnoDB存储引擎的表单独存放到一个独立的ibd文件中。

MyISAM存储引擎

不支持事务、表锁设计,支持全文检索,主要面向一些LOAP数据库应用。
MyISAM存储引擎表由MYD和MYI组成,MYD用来存放数据文件,MYI用来存放索引文件

NDB存储引擎

集群存储引擎,类似于Oracle的RAC集群
NDB的特点是数据全部放在内存中

Memory存储引擎

以前称HEAP存储引擎,将表中的数据存放在内存中,如果数据库重启或发生崩溃,表中的数据都将消失。非常适合用于存储临时数据的临时表

Archive存储引擎

只支持INSERT和SELECT操作,适合存储归档数据,如日志信息

Federated存储引擎

不存放数据,只是指向一台远程MySQL数据库服务器上的表

Maris存储引擎

设计目标是用来替代原有的MyISAM存储引擎

其他存储引擎

Merge、CSV、Sphinx和Infobright

##总结常见问题

  • 1.为什么MySQL不支持全文索引?
    MySQL支持全文索引,MyISAM、InnoDB和Sphinx储存引擎都支持全文索引

  • 2.MySQL数据库速度块是因为不支持事务?
    InnoDB是支持的,快是相对于不同的应用来说的

-3.当表的数据流大于1000万时MySQL的性能会急剧下降吗?
不!MySQK是数据库,不是文件,随着数据行数的增加,性能会有所下降,但下降时线性的。官方手册提及在InnoDB上存储超过1TB的数据,处理插入/更新的操作平均800次/秒

各存储引擎之间的比较

image.png
详情可查看官方文档5.6 https://dev.mysql.com/doc/refman/5.6/en/

//查看当前MySQL支持的存储引擎
SHOW ENGINES;

下载导入MySQL示例数据库

https://dev.mysql.com/doc/index-other.html
image.png
跳转到github,转存到gitee网址
https://gitee.com/useager/test_db

//查看MySQL数据库所支持的存储引擎
SHOW ENGINES

image.png

连接MySQL

连接MySQL操作是一个连接进程和MySQL数据库实例进行通信。本质上是进程通信。
进程通信可以通过:管道、命令管道、命名字、TCP/IP套接字、UNIX域套接字

TCP/IP

MySQL在任何平台下都提供的连接方式,命令行 mysql -h IP地址 -u 用户名 -p 密码 -P 端口
其他参数使用可以mysql --help查看
image.png

命名管道和共享内存

在Windows平台上,且通信进程在同一台服务器上

  • 命名管道:在配置文件中启用 --enable-named-pipe
  • 共享内存:配置文件中添加--shared-memory,客户端也必须使用--protocol=memory

UNIX域套接字

在UNIX和UNIX-like平台上,且通信进程在同一台服务器上
配置文件中指定套接字文件路径,如--socket=/tmp/mysql.sock,数据库启动示例后可通过

//获取UNIX域套接字文件路径
SHOW VARIABLES LIKE 'socket'

//使用得到的值进行连接
mysql -u用户名 -S UNIX域套接字文件路径


这个家伙很懒,啥也没有留下😋