目錄
1、數據庫 和 數據庫實例的區別
數據庫是一系列文件的集合,是靜止的。而數據庫實例是運行起來的進程,是動態的,通過運行起來的數據庫實例去操作數據庫。MySQL數據庫實例是單進程的(包含多線程),一般一個實例對應一個數據庫,但是對於集羣或者分佈式,可能多個實例對應於一個數據庫。
2、啓動數據庫
安裝好MySQL後,啓動數據庫:./mysql &
& 作爲命令參數,表示將MySQL作爲後臺進程,即便我們關閉了命令行窗口,數據庫依然是運行的。
查看MySQL進程信息:ps -ef | grep mysql
ps -ef 是一個命令,表示按照一定格式輸出所有進程的信息;| 表示管道符,作用是將左邊命令的輸出作爲右邊命令的輸入; grep mysql也是一個命令,表示在輸入的內容中搜索帶有mysql信息的內容,此處就是搜索所有進程信息中包含 mysql 字符串的進程信息。
啓動的過程:mysql的啓動會根據數據庫配置文件裏的參數來初始化,linux系統版本的mysql的配置文件一般my.cnf,但是windows版本mysql的配置文件時my.ini,如果數據庫文件丟失,也可以啓動,因爲在mysql軟件的代碼裏面本身就設置了默認配置參數,所以也能啓動成功。
3、存儲引擎
什麼是存儲引擎?比如執行一條sql語句,只需要我們輸入sql指令即可,但是具體怎麼執行的呢,具體對數據庫的操作與執行就是存儲引擎做的事情了,MySQL擁有多種存儲引擎,InnoDB、MyISAM、Memory等等,沒種存儲引擎都有自己的特性、優勢和支持的服務,所以,瞭解幾個存儲引擎是有必要的,在針對特定的開發需求時,可以選擇一個合適的存儲引擎。
MySQL是開源的,定義了存儲引擎的接口,但是具體的實現可以由我們自己去做(自定義存儲引擎)。
由於InnoDB的功能非常棒,因此,它是MySQL的默認存儲引擎。
3.1、InnoDB引擎
1、支持事務,支持全文索引。
2、每張表必須有主鍵,如果用戶沒有定義主鍵,InnoDB自動生成一個6字節的ROWID字段作爲主鍵,每張表的記錄都是按照主鍵順序進行存儲的。
3、支持外鍵,有行鎖設計(寫數據的時候,要對該行記錄加鎖,避免數據出錯,但是讀取數據的時候,不會加鎖)。
4、高併發性,提供4種標準的隔離級別。
5、提供插入緩衝,二次寫,自適應哈希索引,預讀等高性能功能。
3.2、MyISAM引擎
1、支持全文索引(不支持事務)。
2、數據文件和索引文件是2種不同類型的文件,可以使用myisampack工具對數據文件進行壓縮和解壓。
3、MyISAM默認支持一張表的最大存儲爲256TB。
4、MyISAM的緩存(內存)只用於存儲索引文件(支持大於4G的緩存大小),數據文件如果需要被緩存的話,交給操作系統完成。
3.3、NDB引擎
1、它是一個針對集羣的存儲引擎。
2、將全部數據存放在內存中,也可以只將主鍵數據放在內存中,因此主鍵查詢速度非常快。
3、每臺機器的內存有限,那麼可以通過添加NDB存儲節點來線性提高數據庫性能。
感覺和redis很像哦~,在此保留一個疑問。
3.4、Memory引擎
1、將數據全部存放在內存中,如果斷電或者系統崩潰,數據將消失。
2、默認使用哈希索引。
3、只支持表鎖,併發性差(表鎖是以表爲單位)。
4、不支持TEXT 和 BLOB 類型。
5、如果Memory引擎表的容量無法存儲查詢的結果集,或者結果集中有TEXT、BLOB類型,會將其轉換爲MyISAM表存放到磁盤中,磁盤的讀取速度慢,這樣會影響性能。
感覺這個更像redis了。
3.5、Archive引擎
1、只支持插入 和 查詢操作。
2、存儲數據時會進行壓縮,壓縮比可達 1 :10。
3、適合存儲歸檔數據,支持行鎖,高併發。
4、不是事務安全的。
3.6、Federated引擎
1、不存儲數據,只是指向一臺遠程MySQL數據庫服務器上的表。
3.7、Maria引擎
1、支持緩存 數據文件 和 索引文件。
2、支持行鎖。
3、支持事務。
是MyISAM引擎的升級版本。
3.8、各種引擎的比較
每種引擎都各有特點,所以每種引擎的表格的類型是不同的,所以才常常說什麼引擎表,比如InnoDB引擎表,只是我們在開發的時候,呈現給我看的就是一張包含業務數據的關係表而已。比如在不同的引擎下,同樣創建一張空表,這些表所佔的空間大小都是不一樣的,因爲這些表還包含了不同的特有屬性。
4、連接數據庫
一種是MySQL本身提供的(連接,操作)程序,這種是本地的,就是我們用命令行的形式去操作MySQL。另一種是遠程連接,需要在用戶端有一個遠程連接進程,這個連接進程會與MySQL數據庫進程進程連接通信,以達到對數據庫的操作。進程間的通信方法有匿名管道,命名管道,TCP等等。
遠程連接一般是基於TCP的,連接命令:mysql - h IP地址 -u 用戶名 -p 。
本地連接一般用管道或者共享內存方式通信。