MySQL体系结构管理

MySQL体系结构管理

MySQL客户端与服务器模型

img

C/S结构的服务

client server

MySQL的连接方式

mysql一启动连接 就会有一个mysql的文件出现

[root@db02 ~]# ll /tmp
total 0
srwxrwxrwx 1 mysql mysql 0 Nov 26 08:39 mysql.sock

1.TCP/IP

mysql -uroot -p123 -h10.0.0.52

2.Socket

mysql -uroot -p123 -S /tmp/mysql.sock
当我 mv /tmp/mysql.sock  /opt 
mysql -uroot -p123 -S /opt/mysql.sock 还是可以连接
只要给他指定了socket路径就行

问题:

  • mysql -uroot -p123

    • socket
    [root@db02 ~]# mysql
    ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/tmp/mysql.sock' (2)
    因为我刚才把socket文件移到opt下了
    
  • mysql -uroot -p123 -h127.0.0.1

    • TCP
    [root@db02 ~]# mysql  -h127.0.0.1
    mysql> 
    socket文件在opt下 可以连接上 指定了主机
    
  • mysql -uroot -p123 -hlocalhost

    • socket
    [root@db02 ~]# mysql  -hlocalhost
    ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/tmp/mysql.sock' (2)
    socket文件在opt下
    
  • mysql -uroot -p123 -h127.0.0.1 -S /tmp/mysql.sock

    • TCP
    [root@db02 ~]# mysql  -h127.0.0.1 -S /opt/mysql.sock
    mysql> 
    有-h的情况下 直走-h 
    因为socket直走本地连接 远程不行
    

总结:

1.-h不一定都是tcp连接

2.MySQL默认使用socket连接

3.-S只允许本地连接,无法远程连接

4.tcp连接需要建立3次握手,所以MySQL默认使用socket(速度快)

MySQL服务器构成

什么是实例?

一个进程+多个线程+与分配的内存结构

如果是mysql 像上图操作 修改完数据之后退出 mysql程序不会在内存上退出。

这就是mysql的实例

MySQL的程序结构mysqld

img

# 创建个用户
[root@db02 ~]# mysql -S /tmp/mysql.sock -h127.0.0.1
mysql> grant all on *.* to root@'%' identified by '123';

# 用你创建的去连接
[root@db02 ~]# mysql -uroot -p123
Warning: Using a password on the command line interface can be insecure.
ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: YES)

[root@db02 ~]# mysql
mysql> select user,host from mysql.user;
+------+-----------+
| user | host      |
+------+-----------+
| root | %         |
| root | 127.0.0.1 |
| root | ::1       |
|      | db02      |
| root | db02      |
|      | localhost |
| root | localhost |
+------+-----------+
7 rows in set (0.00 sec)
有7个用户

#在mysql中  root用户不是root用户  root用户有好几个 刚才我们连接的是最后一个 所以连接不上
[root@db02 ~]# mysql -uroot -p123 -h10.0.0.52
Warning: Using a password on the command line interface can be insecure.
ERROR 1045 (28000): Access denied for user 'root'@'db02' (using password: YES)
#在报错中出现主机名 应该就是反向解析的锅
#把域名解析成ip是正向解析 把ip解析成域名就是反向解析    

[root@db02 ~]# vim /etc/my.cnf
[mysqld]
skip_name_resolve  跳过反向解析

[root@db02 ~]# systemctl restart mysqld
[root@db02 ~]# mysql -uroot -p123 -h10.0.0.52
mysql> 

连接层

1.验证用户的合法性(用户名,密码,主机域)

2.提供了两种连接方式(TCP/IP Socket)

3.建立一个与SQL层连接的线程

SQL层

1.接收连接层传来的SQL语句

2.检测语法

3.检测语义(DDL,DML,DQL,DCL),检测是show还是select?还是update?还是insert?

4.解析器,解析整条SQL语句,生成多种执行计划

5.优化器,选择解析器生成的多种执行计划中,效率最高的一种

6.执行器,将优化器,优化的最优的一种执行方式,执行

  • 和存储引擎层建立连接(提供一个线程)
  • 接收存储引擎层传来的结构化成表的数据

7.写缓存

8.记录日志(binlog)

只要我有,从搭建数据库开始到现在,所有的binlog日志,那么我可以将MySQL的数据恢复到任意时刻.

存储引擎层

1.接收SQL层传来的SQL语句

2.与磁盘交互,读取数据并结构化成表,返回给SQL层

3.建立一个与SQL层连接的线程

MySQL的结构

1.逻辑结构

数据库管理员,操作的对象

  • 表:(真实数据+元数据)
  • 元数据:列+其他属性(大小,行数...)
  • 列:列名+(数据类型+约束(非空,默认值,主键,非负...))

2.物理结构

MySQL的物理结构,是最底层的数据文件

MySQL Linux
show databases; ls -l /
show tables; ls
use db cd /
drop database rm -fr
drop table rm -f
create database mkdir
## 库名,表名,一律小写
create database ZLS;
create database zls;
insert into ZLS.ZLS1 values(1);
insert into zls.zls1 values(1);

windows不区分大小写

linux是区分大小写的

#大写的MSY 和小写的msy是可以同时创建的

#加上这条配置
vim my.cnf
[mysqld]
lower_case_table_names=1  不区分大小写

默认都是小写
删除的时候 dropdatabase MSY;
删掉的是小写的msy

MySQL单位

  • 段:是由多个区组成的,一张表就是一个段
  • 区:是由64个页组成的,一个区:1M=1024K
  • 页(块):16k为一页

分区表:是由一个区构成一个段也就是一个表的表.

posted @ 2019-11-27 14:32  干瘪的柠檬  阅读(166)  评论(0)    收藏  举报