1. 程式人生 > 實用技巧 >MySQL體系結構與管理

MySQL體系結構與管理

MySQL體系結構與管理

MySQL結構MySQL管理授權回收

歡迎來到 來到大浪濤天的部落格

一、MySQL的結構理

1. MySQL屬於C/S結構,有兩種連線方式,分別為:

* TCP/IP:mysql -uroot -poldboy123 -h 10.0.0.51 -P3306
* Socket:mysql -uroot -poldboy123 -S /tmp/mysql.sock

2. MySQL的例項構成:

mysqld:相當於老闆,是由它啟動一個mysql的例項,是主程式
master thread:相當於經理,一個mysql的例項只有一個master thread
Thread:相當於幹活的,連線的執行緒
預分配的記憶體:相當於辦公區

3. MySQL中mysqld伺服器程序結構


MySQL結構體系

3-1. SQL語句,結構化的查詢語言

  • DQL 資料查詢語言
  • DDL 資料定義語言
  • DML 資料操作語言
  • DCL 資料控制語言

3-2. 連線層

  1. 提供連線協議
  • Socket
  • TCPIP
  1. 驗證使用者名稱(root@localhost)密碼合法性,進行匹配專門的授權表。
  2. 派生一個專用連線執行緒(接收SQL,返回結果)
    mysql> show processlist;

3-3. SQL層(優化方面至關重要的)

  1. 驗證SQL語法和SQL_MODE
  2. 驗證語義
  3. 驗證許可權
  4. 解析器進行語句解析,生成執行計劃(解析樹)
  5. 優化器(各種演算法,基於執行代價),根據演算法,找到代價最低的執行計劃。代價:CPU IO MEM
  6. 執行器按照優化器選擇執行計劃,執行SQL語句,得出獲取資料的方法。
  7. 提供query cache(預設不開),一般不開,會用redis
  8. 記錄操作日誌(binlog),預設沒開

3-4. 儲存引擎層

  1. 真正和磁碟打交道的一個層次
  2. 根據SQL層提供的取資料的方法,拿到資料,返回給SQL,結構化成表,再又連線層執行緒返回給使用者。

3-5. MySQL邏輯儲存結構

----》Linux目錄
create database wordpress charset utf8mb4; ----》mkdir /wordpress
show databases; ----》ls /
use wordpress; ----》cd /wordpress
表 ----》Linux的檔案
列(欄位) 無
列屬性 無
資料行(記錄) ----》Linux資料行
表屬性(元資料) ----》Linux 檔案屬性

3-6. MySQL物理儲存結構

庫: 在作業系統上用目錄來表示
表:按不同的儲存引擎主要分為以下兩種

  1. MyISAM(ext2)
  • user.frm : 儲存的表結構(列,列屬性)
  • user.MYD : 儲存的資料記錄
  • user.MYI : 儲存索引
  1. InnoDB(XFS)
  • time_zone.frm : 儲存的表結構(列,列屬性)
  • time_zone.ibd : 儲存的資料記錄和索引
  • ibdata1 : 資料字典資訊

3-7. innodb 段 區 頁的概念

一般情況下(非分割槽表)

  • 一個表就是一個段
  • 一個段由多個區構成
  • 一個區在(16k),64個連續的頁,1M大小
  • 頁是指一個16K大小的塊,是資料庫中最小的儲存單元

4. 使用者和許可權管理

4-1. 使用者的作用

  • 登入MySQL
  • 管理MySQL

4-2. 使用者的定義

使用者名稱@'白名單'

wordpress@'%'
wordpress@'localhost'
wordpress@'127.0.0.1'
wordpress@'10.0.0.%'
wordpress@'10.0.0.5%'
wordpress@'10.0.0.0/255.255.254.0'
wordpress@'10.0.%'

4-3. 使用者的操作

4-3-1. 建使用者

mysql> create user oldboy@'10.0.0.%' identified by '123';
Query OK, 0 rows affected (0.00 sec)

說明:
8.0以前,可以自動建立使用者並授權

mysql> grant all on *.* to oldguo@'10.0.0.%' identified by '123';

4-3-2. 查詢使用者

mysql> select user,host from mysql.user;

4-3-3. 修改使用者密碼

mysql> alter user oldguo@'10.0.0.%' identified by '123456';

4-3-4. 刪除使用者

mysql> drop user oldguo@'10.0.0.%' ;

4-3-5. 許可權管理

  1. 許可權列表
ALL 
SELECT,INSERT, UPDATE, DELETE, CREATE, DROP, RELOAD, SHUTDOWN, PROCESS, FILE, REFERENCES, INDEX, ALTER, SHOW DATABASES, SUPER, CREATE TEMPORARY TABLES, LOCK TABLES, EXECUTE, REPLICATION SLAVE, REPLICATION CLIENT, CREATE VIEW, SHOW VIEW, CREATE ROUTINE, ALTER ROUTINE, CREATE USER, EVENT, TRIGGER, CREATE TABLESPACE
with grant option

4-3-6. 授權命令

grant all on *.* to oldguo@'10.0.0.%' identified by '123' with grant option;

grant 許可權  on 作用目標  to 使用者  identified by 密碼 with grant option;

grant SELECT,INSERT, UPDATE, DELETE, CREATE on wordpress.* to 

作用目標:

*.*
wordpress.* 
worpress.t1 

4-3-7. 授權需求

  1. 建立一個管理員使用者root,可以通過10網段,管理資料庫.
grant all on *.* to root@'10.0.0.%' identified by '123' with grant option;
  1. 建立一個應用使用者wordpress,可以通過10網段,wordpress庫下的所有表進行SELECT,INSERT, UPDATE, DELETE.
grant SELECT,INSERT, UPDATE, DELETE on wordpress.* to wordpress@'10.0.0.%' identified by '123';

4-3-8. 回收許可權

show  grants for wordpress@'10.0.0.%';
mysql> revoke delete on wordpress.*  from 'wordpress'@'10.0.0.%';
mysql> show  grants for wordpress@'10.0.0.%';