天天看點

mysql資料庫分析

作者:lT點工小橙子

使用docker安裝mysql 資料庫

拉取鏡像:docker pull mysql:5.7 指定5.7 版本,也可以根據直接需求填寫版本号

mysql資料庫分析

docker images 可以看到下載下傳好鏡像

建立好三個需要挂載docker的目錄

mkdir -p /var/mysql/data /var/mysql/logs /var/mysql/conf           
mysql資料庫分析

建立好的目錄

挂載啟動mysql 服務

docker run -p 3306:3336 --name mysql5.7 \
-v /var/mysql/logs:/var/log/mysql \
-v /var/mysql/data:/var/lib/mysql \
-v /var/mysql/conf:/etc/mysql \
-e MYSQL_ROOT_PASSWORD=123456 \
-d mysql:5.7           

啟動失敗!!報端口被綁定,莫慌我們來排查一下。

mysql資料庫分析

使用netstat 檢視是哪個pid 占用了3306 ,發現是1445 的pid ,使用 kill 1445殺掉該程序

mysql資料庫分析

執行又報了這個錯 大機率是因為之前的服務沒有退出導緻

mysql資料庫分析

使用docker ps -a 得到對應容器id後再使用 docker rm id 删除容器。

mysql資料庫分析

再次執行 發現執行成功

mysql資料庫分析

使用 docker logs --tail=100 mysql5.7 檢視一下日志,發現啟動成功,挂載的目錄已經有對應檔案

mysql資料庫分析

總結下建立需要的幾個步驟:

docker pull mysql:5.7 #拉取服務 1
mkdir -p /var/mysql/data /var/mysql/logs /var/mysql/conf #建立mysql挂載的目錄 2
#挂載啟動服務3
docker run -p 3306:3306 --name mysql \ #将容器的3306端口映射到主機的3306端口,'\'指換行符
-v /var/mysql/logs:/var/log/mysql \ #左邊為Linux的目錄結構,右邊為docker内部
-v /var/mysql/data:/var/lib/mysql \
-v /var/mysql/conf:/etc/mysql \
-e MYSQL_ROOT_PASSWORD=123456 \ #初始化root使用者的密碼為:123456
-d mysql:5.7           

資料庫存儲引擎

資料庫存儲引擎是資料庫底層軟體元件,資料庫管理系統使用資料引擎進行建立、查詢、更新和删除資料操作。簡而言之,存儲引擎就是表的類型。資料庫的存儲引擎決定了表在計算機中的存儲方式。不同的存儲引擎提供不同的存儲機制、索引技巧、鎖定水準等功能,使用不同的存儲引擎還可以獲得特定的功能。

show ENGINES 檢視引擎

mysql資料庫分析

show ENGINES 所有的存儲引擎

  • ARCHIVE :用于資料存檔的引擎,資料被插入後就不能在修改了,且不支援索引,行鎖,占用磁盤少;常用于日志系統,大量的裝置資料采集
  • CSV:在存儲資料時,會以逗号作為資料項之間的分隔符,常用于資料庫的快速導出導入,表格轉換為CSV
  • BLACKHOLE:會丢棄寫操作,該操作會傳回空内容。
  • FEDERATED:将資料存儲在遠端資料庫中,用來通路遠端表的存儲引擎
  • InnoDB:預設,5.5版本後新增,具備外鍵支援功能的事務處理引擎,事務優先,行鎖,支援B樹索引
  • MEMORY:置于記憶體的表,速度快,值查找熱度較高的資料但安全沒保障,隻有16M,不支援大資料存儲類型,表鎖,常用于等
  • MRG_MYISAM:用來管理由多個MyISAM 表構成的表集合
  • MYISAM:5.5版本之前預設引擎,主要的非事務處理存儲引擎,性能優先,表鎖,支援B樹、哈希索引
  • NDB:MySQL叢集專用存儲引擎
mysql資料庫分析

主流引擎的比對

預設的存儲引擎是Innodb

mysql資料庫分析

資料庫索引

索引是對資料庫表中一列或多列的值進行排序的一種結構,如字典目錄提高檢索性能 B+Tree 索引是大多數 MySQL 存儲引擎的預設索引類型。

優點:

  1. 降低IO、CPU使用率
  2. 索引列,可以保證行的唯一性
  3. 有效縮短資料檢索時間
  4. 加快表與表之間的連接配接

缺點:

  • 占用空間,索引(保持主鍵和索引記錄)
  • 降低了更新表的速度
  • 索引的長度,需要時間維護

索引的種類

主鍵索引 :是大多數 MySQL 存儲引擎的預設索引類型。設定為主鍵後資料庫會自動建立索引,innodb為聚簇索引 又被稱為B+Tree 建立語句 create index 索引名稱 on table(col);

單值索引:即一個索引隻包含單個列,一個表可以有多個單列索引

mysql資料庫分析

複合索引:一個索引包含多個列在資料庫操作期間,複合索引比單值索引所需要的開銷更小(對于相同的多個列建索引)當表的行數遠大于索引列的數目時可以使用複合索引 建立語句:create index 索引名稱 on table(col,col.....)

mysql資料庫分析

id 和name 組成的複合索引

資料庫的檔案 ibd為表結構檔案 frm表結構檔案

Innodb

  • ibd檔案,這個表是InnoDB存儲引擎時, 資料檔案
  • frm檔案,就是表結構檔案

MyISAM

  • frm檔案,表結構檔案
  • MYD檔案,資料檔案
  • MYI檔案,索引檔案
mysql資料庫分析

sql語句種類

DDL(data definition language)資料定義語言

CREATE ALTER DROP 用來定義或改變表結構、資料類型、表之間的連結和限制,用在建表上

DML(data manipulation language)資料操控語言

SELECT,UPDATE,INSERT,DELETE 用來對資料庫的資料進行操作的語言

DQL(data querylanguage)資料查詢語言

SELECT FROM WHERE 用來查詢表資料

DCL(data controllanguage)資料控制語言

GRANT DENY REVOKE 用于設定、更改資料庫使用者或角色權限的語句,預設狀态下,隻有

sysadmin、dbcreator、db owner、db securityadmin才有擁有權限執行DCL

SQL語句的執行過程

mysql資料庫分析

步驟1:連接配接層:連接配接管理

步驟2:服務層:權限驗證,查詢緩存:命中直接傳回, 文法分析,優化sql

步驟3:引擎層:操作引擎,傳回結果

步驟4:存儲層:把腳本轉換為日志,在日志回放進行一個sql回放,資料庫對應磁盤的操作都是通過日志進行

SQL語句查詢的執行過程

  1. 執行 from 表,檢視來源表
  2. where 條件 過濾資料 ===== 條件,影響性能
  3. group by 查詢結果條件來分組 ==== 列沒有變化
  4. select 字段 ====== 這一步的時候,列的數量才會變化
  5. order by 字段 ===== 排序 可能産生臨時表
  6. limit 數量

繼續閱讀