MySQL架構: 採用C/S架構,即客戶端/伺服器。客戶端和伺服器區分開,通過客戶端發送請求來和伺服器交互。 過程: 用戶通過開發的應用程式來訪問資料庫(C/S),應用程式通過連接器(connecter)連接到資料庫。 連接器包含了各種開發語言的介面,連接完成後MySQL會分配一個線程提供服務,執行 ...
MySQL架構:
採用C/S架構,即客戶端/伺服器。客戶端和伺服器區分開,通過客戶端發送請求來和伺服器交互。
過程:
-
用戶通過開發的應用程式來訪問資料庫(C/S),應用程式通過連接器(connecter)連接到資料庫。
-
連接器包含了各種開發語言的介面,連接完成後MySQL會分配一個線程提供服務,執行對應操作的時候就會調用MySQL定義好的介面組件來接收請求。
-
把sql語句解析完成後,結合當前資料庫狀態來優化對應操作。
mysql利用caches和buffer來提高系統系統性能。 -
數據讀出和寫入的時候會通過存儲引擎來選擇數據的相關操作,最後寫入磁碟或記憶體。
目前主流的存儲引擎:
存儲引擎:MySQL管理數據文件的一種技術。
-
myisam
-
innodb
查看系統當前支持的存儲引擎:show engines;
myisam和innodb的區別:
-
最大支持數據量:myisam>innodb
-
事務:myisam不支持,
-
鎖:innodb支持行級鎖,myisam只支持表鎖(整張表加鎖)
-
MVCC(多版本併發控制):允許多用戶進行訪問(併發),myisam不支持,
-
聚集索引:innodb支持
-
緩存:innodb支持
-
外鍵:myisam不支持
myisam和innodb特點:
-
myisam特點:myisam功能簡單,所以數據訪問快
-
innodb:功能豐富,效率沒有myisam高
mysql5.5版本以前使用的是myisam作為預設存儲引擎,5.5以後使用的預設存儲引擎就是innodb了。
myisam和innodb對應的資料庫文件:
myisam:
- .frm文件:負責表格式定義
- .MYD文件:存放表的數據文件
- .MYI:存放表的索引文件
innodb:
- .frm:存放表的定義文件
- idb:存放表的索引和數據文件
MySQL5.5以前:
早期innodb類型的數據表只有一個frm文件,而數據文件只有一個,這個數據文件存放了innodb類型的所有表的數據。
修改方法: 啟用:innodb_file_per_table=ON (MariaDB 5.5以後版是預設值)
mysql> select @@innodb_file_per_table;
+-------------------------+
| @@innodb_file_per_table |
+-------------------------+
| 1 |
+-------------------------+
1 row in set (0.00 sec)
修改存儲引擎的方法:
方法1:
vim /etc/my.cnf
[mysqld]
default_storage_engine= InnoDB
方法2:
CREATE TABLE tb_name(... ) ENGINE=InnoDB;
ALTER TABLE tb_name ENGINE=InnoDB;
查看指定表的屬性信息:
-
show table status from tb_name\G
-
show table status like 'tb_name%'
特殊存儲引擎:
-
Performance_Schema:系統自帶的資料庫Performance_Schema使用的存儲引擎
-
Memory:數據存放在記憶體中,主要存放一些臨時數據。information_schema這個系統資料庫就是使用的memory存儲引擎。
系統資料庫:四個
-
mysql:mysql的核心資料庫,主要負責存儲資料庫的用戶、許可權設置、關鍵字等mysql自己需要使用的控制和管理信息
-
Performance_Schema:MySQL 5.5開始新增的資料庫,用於收集資料庫伺服器性能參數
-
information_schema:MySQL 5.0之後產生的,一個虛擬資料庫,物理上並不存在information_schema資料庫,存放MySQL的元數據信息。
-
sys 資料庫:MySQL5.7之後新增加的資料庫,庫中所有數據源來自performance_schema。目標是把performance_schema的把複雜度降低,讓DBA能更好的閱讀這個庫里的內容
伺服器選項:
mysql伺服器啟動的時候手動添加
要添加的選項寫入配置文件
伺服器變數:
show variables like 'var_name' --- 查看伺服器的變數信息
變數配置方法:set [global] [@@] 變數名=值
session和全局變數:
session:隻影響當前登錄的用戶
global:影響所有的MySQL用戶
區分伺服器的選項和變數:
通過官方文檔查看。
伺服器的狀態變數查看:show status\G --- 記錄資料庫系統的當前狀態
系統選項:寫入配置文件,重啟生效
系統變數:可以在環境中通過set命令修改
系統的狀態變數:不能修改,只允許查看