mysql02---客戶端與服務器模型

一.客戶端與服務器模型

  • 1.mysql是一個典型的C/S服務結構
    • 1.1 mysql自帶的客戶端程序(/application/mysql/bin)
      • mysql
      • mysqladmin
      • mysqldump

第三方工具mysql

phpadminlinux

navicatweb

sqlyog
官網對應須要插件
redis

若是開啓防火牆,navicat鏈接技巧
sql

  • 1.2 mysqld一個二進制程序,後臺的守護進程
    • 單進程
    • **多線程*

鏈接MySQL方式

  • 1.TCP/IP的鏈接方式
    shell

  • 2.套接字鏈接方式
    緩存

思考:下列都是用哪一種方式鏈接?安全

1.mysql
2.mysql -uroot -p123
3.mysql -uroot -p123 -h127.0.0.1
4.mysql -uroot -p123 -hlocalhost
5.mysql -uroot -p123 -h127.0.0.1 -S /tmp/mysql.sock

一、二、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:       root@localhost

Connection:     Localhost via UNIX socket
......

三、6是Tcp鏈接

[root@web01 ~]# mysql -h127.0.0.1
ERROR 2003 (HY000): Can't connect to MySQL server on '127.0.0.1' (111)
[root@web01 ~]# 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:       root@172.16.1.7
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是一個守護進程可是自己不能自主啓動:

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

鏈接層

  • 一、驗證用戶的合法性(用戶名、密碼、主機域,黑名單,白名單)
  • 二、 提供兩種鏈接方式 (TCP/IP 、 socket ) -h -S
  • 三、提供一個專用鏈接線程(接收SQL、返回結果),將SQL語句交給SQL層繼續處理

SQL層

  • 一、接收到SQL語句。
  • 二、檢查語法。
  • 三、檢查語義 (驗證sql語句,是select,仍是show...) (判斷語句類型:DML、DDL、DCL、DQL)
  • 四、解析SQL語句,生成多種執行計劃
  • 五、優化器,選擇他認爲成本最低,最優的執行計劃。
  • 六、執行器根據優化器的選擇,按照優化器建議執行SQL語句
    • 提供一個與存儲引擎層交互的線程
    • 接收在存儲引擎層返回的結構化成表的數據
  • 七、提供查詢緩存
    • 7.1 query_cache, 使用memcache 或者redis 替代
  • 八、日誌記錄(binlog)

存儲引擎層

  • 一、接收SQL層傳來的最優化的SQL語句
  • 二、與磁盤交互,拿到數據,並結構化成表格,返回給SQL層
  • 三、提供一個與SQL層交互的線程返回給客戶端

三.MySQL的結構

1.MySQL的邏輯結構(熟悉)

MySQL的邏輯對象:作爲管理人員或者開發人員操做的對象

  • 一、庫
  • 二、表:元數據+真實數據行
  • 三、元數據:用來描述真實數據的數據 (列+其它屬性(行數+佔用空間大小+權限))
  • 四、列:列名字+數據類型+其餘約束(非空、惟1、主鍵、非負數、自增加、默認值)

最直觀的數據:二維表,必須用庫來存放

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:

段、區、頁(塊)

  • 一、段:理論上一個表就是一個段,由多個區構成,(分區表是一個分區一個段)
  • 二、區:連續的多個頁構成
  • 三、頁:最小的數據存儲單元,默認是16k

分區表: 就是一個區構成一個段也就是一個表,就是分區表。

相關文章
相關標籤/搜索