客户端与服务器模型

Mysql是一个典型的C/S结构
Mysql的客户端有:

  • Mysql
  • mysqladmin
  • mysqldump
  • 图形化展示:
    • SQLyog
    • navicat

Mysql服务端的连接方式

  • TCP/IP连接 (mysql -uroot -p123 -h10.0.0.51)
  • Socket连接 (mysql -uroot -p123 -S /app/mysql/tmp/mysql.sock)
    问题:
#以下几种方式属于什么连接方式
mysql -uroot -p123 // socket连接方式
mysql -uroot -p123 -h127.0.0.1 // TCP
mysql -uroot -p123 -hlocalhost // Socket
mysql -uroot -p123 -h10.0.0.51 -S /tmp/mysql.sock // TCP
mysql -uroot -p123 -S /tmp/mysql.sock -h10.0.0.51 // TCP
# 总结:
1)MySQL默认使用Socket连接,TCP连接需要建立三次握手,速度比Socket慢
2)不是只要-h就一定是TCP连接
3)当-h和-S一起出现时,如果-h指定的是IP地址,那么一定是TCP连接

MySQL服务端构成

什么是实例?
由 一个进程 + 多个线程 + 一个预分配的内存结构
1.MySQL的后台进程+线程+预分配的内存结构。
2.MySQL在启动的过程中会启动后台守护进程,并生成工作线程,预分配内存结构供MySQL处理数据使用
MySQLD服务器程序构成:
Img
mysqld是一个守护进程但是本身不能自主启动:

[root@db01 ~]# mysql -uroot -poldboy123
[root@db01 ~]# select user,host,password from mysql.user;

mysqld程序的工作流程

连接层

  • 提供了两种连接方式
    • TCP
    • socket
  • 验证用户的合法性
    • 权限
    • 用户名
    • 密码
  • 验证黑白名单
    • 验证主机和端口黑白名单
      提供了一个和SQL层建立连接的专用线程
      SQL层
  • 接收连接层传来的SQL语句
  • 验证语法
  • 验证语义
    • DML(insert update delete)
    • DDL(create database create table drop)
    • DQL(select show call desc explain)
    • DCL(grant revoke)
    • DTL(Database Transaction Language)TCL Transaction Controller Language
  • 解析器:解析后面的SQL语句
  • 优化器:提供几种比较优化的执行方案
  • 执行器:选择优化器提供的最优一种方案,去执行
    • 提供一个与存储引擎出建立连接的线程
    • 接收存储引擎层结构化成表的数据
  • 如果有缓存,写缓存
  • 记录日志(binlog)

存储引擎层

  • 接收SQL层传来的SQL语句
  • 去磁盘上取出SQL语句需要的数据
  • 结构化成表格的形式返回给SQL层

Mysql的结构

逻辑结构

  • 数据库管理员的所有操作对象(MySQL的资源)
    • 真实数据
    • 元数据
      • 列(字段)
      • 列名字(字段名)
      • 数据类型
      • 约束
        • 是否为空
        • 默认值
        • 范围
        • 注释
        • 索引
      • 其他属性
        • 行数
        • 大小
        • 权限

物理结构:
最底层的物理数据,修改数据库目录就能对数据库造成影响

物理结构区别

## myisam frm:format
表结构:
[root@db01 data]# ll mysql/user*
-rw-rw---- 1 mysql mysql 10684 Jul 18 22:50 mysql/user.frm
-rw-rw---- 1 mysql mysql 236 Jul 19 10:53 mysql/user.MYD
-rw-rw---- 1 mysql mysql 2048 Jul 19 10:54 mysql/user.MYI
## innodb
[root@db01 data]# ll yl/yl_test*
-rw-rw---- 1 mysql mysql 8556 Jul 20 09:26 yl/yl_test.frm
-rw-rw---- 1 mysql mysql 98304 Jul 20 09:26 yl/yl_test.ibd

文件系统单位

Linux文件系统CentOS7:xfs
Linux文件系统CentOS6:ext4

Mysql Linux
目录
show databse ls -l/
user mysql cd /mysql
文件
show tables ls
二维表=元数据+真实数据 文件=文件名+文件属性
段:一个段,是由多个区组成的(一张表)
区:一个区,是由多个页组成的,64个页为一个区1024k=1M
页:最小单位,一页,16k