MySQL客户端与服务端模型

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
##如何验证是那种连接方式
不退出直接\s

# 总结
1)MySQL默认使用Socket连接,TCP连接需要建立三次握手,速度比socket慢
2)不是只有-h就一定是TCP连接
3)当-h和-S一起出现时,如果-h指定的是IP地址,那么一定是TCP连接

MySQ服务端构成

# 实例
由一个进程 + 多个线程 + 一个预分配的内存结构

mysqld程序的工作流程

# 连接层
    -提供了两种连接方式
        -TCP
        -socket

    -验证用户的合法性
        -权限
        -用户名
        -密码
    -验证黑白名单
        -验证主机和端口的黑白名单
    -提供了一个和SQL层建立连接的专用线程

# SQL层
    -接受连接层传来的SQL语句
    -验证语法
    -验证语义
        -DML
        -DDL
        -DQL
        -DCL
        -DTL
    -解析器:解析后面的SQL语句
    -优化器:提供一个比较优化的执行方案
    -执行器:选择优化器提供的最优方案去执行
        -提供一个与存储引擎层建立的线程
        -接收存储引擎层结构化成表的数据
    -如果有缓存,写缓存
    -记录日志(binlog)

# 存储引擎层 (相当于mysql的文件系统)
    -接收SQL层传来的SQL语句
    -去磁盘取出SQL语句需要的数据
    -结构化成表格的形式返回给SQL层

MySQL的结构

- 逻辑结构
数据库管理员的所有操作对象(MySQL的资源)
	-库
	-表
		-真实数据
		-元数据(描述数据属性的数据)
			-列(字段)
				-列名(字段名)
				-数据类型
				-约束
					-是否为空
					-默认值
					-范围
					-注释
					-索引
			-其他属性
				-行数
				-大小
				-权限
-物理结构
最底层的物理数据(即使mkdir ku一个,去数据库show databases;也能看见这个库)

物理结构区别

# myisam
[root@db01 data]# ll mysql/user*
-rw-rw---- 1 mysql mysql 10684 Jul 18 22:50 mysql/user.frm  (format ,表结构)
-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

MySQL文件系统的大小单位

Linux文件系统CentOS7: xfs
Linux文件系统CentOS6: ext4
段:一个段是由多个区组成的,(一张表,具体多大看表的内容有多少数据)
区:一个区是由多个页组成的,64个页为一个区,一个区=1024k=1M
页:最小单位,一页16k