MySQL被设计为一个可移植的数据库,几乎在当前所有系统上都能运行,且基本能保证在各平台上的物理体系结构的一致性
定义数据库和实例
- 数据库:物理操作系统文件或其他形式文件类型的集合
- 实例:MySQL数据库由后台线程及一个共享内存区组成。数据库实例才是正真用于操作数据库文件的
总结:MySQL被设计为一个单进程多线程架构的数据库,MySQL数据库实例在系统上的表现就是一个进程
MySQL数据库配置文件顺序
由上图可知MySQL在Linux下以从左到右的顺序执行配置文件加载,且参数以最后配置文件为准
/etc/my.cnf 文件配置信息
- datadir为数据库所在的路径
MySQL体系结构
- 理解两个概念数据库和数据合实例:
数据库:数据库是文件数据的集合
数据库实例:通过数据库实例来完成对数据库的操作
上图为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次/秒
各存储引擎之间的比较
详情可查看官方文档5.6 https://dev.mysql.com/doc/refman/5.6/en/
//查看当前MySQL支持的存储引擎
SHOW ENGINES;
下载导入MySQL示例数据库
https://dev.mysql.com/doc/index-other.html
跳转到github,转存到gitee网址
https://gitee.com/useager/test_db
//查看MySQL数据库所支持的存储引擎
SHOW ENGINES
连接MySQL
连接MySQL操作是一个连接进程和MySQL数据库实例进行通信。本质上是进程通信。
进程通信可以通过:管道、命令管道、命名字、TCP/IP套接字、UNIX域套接字
TCP/IP
MySQL在任何平台下都提供的连接方式,命令行 mysql -h IP地址 -u 用户名 -p 密码 -P 端口
其他参数使用可以mysql --help查看
命名管道和共享内存
在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域套接字文件路径
Comments | 0 条评论