目录
一. 客户端与服务器模型
连接 MySQL 方式
总结:
二. MySQL 服务器构成
三. MySQL 的结构
一. 客户端与服务器模型
1.MySQL 是一个典型的 C/S 服务结构
1.1 MySQL 自带的客户端程序 (/application/MySQL/bin)
- ? MySQL
- ? mysqladmin
- ? mysqldump
第三方工具
- phpadmin
- navicat
- sqlyog
官网对应需要插件
如果开启防火墙, navicat 连接技巧
1.2 mysqld 一个二进制程序, 后台的守护进程
单进程
** 多线程 *
连接 MySQL 方式
1.TCP/IP 的连接方式
2. 套接字连接方式
思考: 下列都是用哪种方式连接?
- MySQL
- MySQL -uroot -p123
- MySQL -uroot -p123 -h127.0.0.1
- MySQL -uroot -p123 -hlocalhost
- MySQL -uroot -p123 -h127.0.0.1 -S /tmp/MySQL.sock
1,2,4 是 socket 连接
- MySQL> status;
- --------------
- MySQL Ver 14.14 Distrib 5.6.44, for Linux-glibc2.12 (x86_64) using EditLine wrapper
- Connection id: 3
- Current database:
- Current user: [email protected]
- Connection: Localhost via UNIX socket
- ......
3,6 是 Tcp 连接
- [[email protected] ~]# MySQL -h127.0.0.1
- ERROR 2003 (HY000): Can't connect to MySQL server on'127.0.0.1' (111)
- [[email protected] ~]# MySQL -uroot -p123 -h 172.16.1.52
- ......
- MySQL [(none)]> status;
- --------------
- MySQL Ver 15.1 Distrib 5.5.64-MariaDB, for Linux (x86_64) using readline 5.1
- Connection id: 7
- Current database:
- Current user: [email protected]
- SSL: Not in use
- Connection: 172.16.1.52 via TCP/IP
- .......
总结:
1. 不一定 -h 都是 TCP 连接,-hlocalhost (是 socket)
2. 不一定 -s 都是 socket 连接, 如果加了 -h 一定是 tcp (tcp 优先)
3. MySQL 默认使用的是 socket
为什么默认使用 socket 连接?
1. 安全
2. 速度快
二. MySQL 服务器构成
什么是实例
1.MySQL 的后台进程 + 线程 + 预分配的内存结构.
2.MySQL 在启动的过程中会启动后台守护进程, 并生成工作线程, 预分配内存结构供 MySQL 处理数据使用.
图 1.1-Word 的打开方式
图 1.2-mysqld 的打开方式
MySQLD 服务器程序构成
mysqld 是一个守护进程但是本身不能自主启动:
- [[email protected] ~]# MySQL -uroot -poldboy123
- [[email protected] ~]# select user,host,password from MySQL.user;
连接层
1, 验证用户的合法性 (用户名, 密码, 主机域, 黑名单, 白名单)
2, 提供两种连接方式 (TCP/IP , socket ) -h -S
3, 提供一个专用连接线程 (接收 SQL, 返回结果), 将 SQL 语句交给 SQL 层继续处理
SQL 层
1, 接收到 SQL 语句.
2, 检查语法.
3, 检查语义 (验证 sql 语句, 是 select, 还是 show...) (判断语句类型: DML,DDL,DCL,DQL)
4, 解析 SQL 语句, 生成多种执行计划
5, 优化器, 选择他认为成本最低, 最优的执行计划.
6, 执行器根据优化器的选择, 按照优化器建议执行 SQL 语句
提供一个与存储引擎层交互的线程
接收在存储引擎层返回的结构化成表的数据
7, 提供查询缓存
7.1 query_cache, 使用 memcache 或者 Redis 替代
8, 日志记录 (binlog)
存储引擎层
1, 接收 SQL 层传来的最优化的 SQL 语句
2, 与磁盘交互, 拿到数据, 并结构化成表格, 返回给 SQL 层
3, 提供一个与 SQL 层交互的线程返回给客户端
三. MySQL 的结构
1.MySQL 的逻辑结构 (熟悉)
MySQL 的逻辑对象: 做为管理人员或者开发人员操作的对象
1, 库
2, 表: 元数据 + 真实数据行
3, 元数据: 用来描述真实数据的数据 (列 + 其它属性 (行数 + 占用空间大小 + 权限))
4, 列: 列名字 + 数据类型 + 其他约束 (非空, 唯一, 主键, 非负数, 自增长, 默认值)
最直观的数据: 二维表, 必须用库来存放
MySQL 逻辑结构与 Linux 系统对比
MySQL | Linux |
---|---|
库 | 目录 |
show databases; | ls-l / |
use mysql | cd /mysql |
表 | 文件 |
show tables; | ls |
二维表 = 元数据 + 真实数据行 | 文件 = 文件名 + 文件属性 |
2.MySQL 的物理结构 (了解)
1)MySQL 的最底层的物理结构是数据文件, 也就是说, 存储引擎层, 打交道的文件, 是数据文件.
2) 存储引擎分为很多种类 (Linux 中的 FS)
3) 不同存储引擎的区别: 存储方式, 安全性, 性能
myisam:
innodb:
段, 区, 页 (块)
1, 段: 理论上一个表就是一个段, 由多个区构成,(分区表是一个分区一个段)
2, 区: 连续的多个页构成
3, 页: 最小的数据存储单元, 默认是 16k
分区表: 就是一个区构成一个段也就是一个表, 就是分区表.
来源: http://www.bubuko.com/infodetail-3266930.html