## **MySQL的客戶端/服務器架構**
以我們平時使用的微信為例,它其實是由兩部分組成的,一部分是客戶端程序,一部分是服務器程序。客戶端可能有很多種形式,比如手機APP,電腦軟件或者是網頁版微信,每個客戶端都有一個唯一的用戶名,就是你的微信號,另一方面,騰訊公司在他們的機房里運行著一個服務器軟件,我們平時操作微信其實都是用客戶端來和這個服務器來打交道。比如狗哥用微信給貓爺發了一條消息的過程其實是這樣的:
1.
消息被客戶端包裝了一下,添加了發送者和接收者信息,然后從狗哥的微信客戶端傳送給微信服務器;
2.微信服務器從消息里獲取到它的發送者和接收者,根據消息的接收者信息把這條消息送達到貓爺的微信客戶端,貓爺的微信客戶端里就顯示出狗哥給他發了一條消息。
MySQL的使用過程跟這個是一樣的,它的服務器程序直接和我們存儲的數據打交道,然后可以有好多客戶端程序連接到這個服務器程序,發送增刪改查的請求,然后服務器就響應這些請求,從而操作它維護的數據。和微信一樣,MySQL的每個客戶端都需要提供用戶名密碼才能登錄,登錄之后才能給服務器發請求來操作某些數據。我們日常使用MySQL的情景一般是這樣的:
1.啟動MySQL服務器程序。
2.啟動MySQL客戶端程序并連接到服務器程序。
3.在客戶端程序中輸入一些命令語句作為請求發送到服務器程序,服務器程序收到這些請求后,會根據請求的內容來操作具體的數據并向客戶端返回操作結果。
我們知道計算機很牛逼,在一臺計算機上可以同時運行多個程序,比如微信、QQ、音樂播放器、文本編輯器啥的,每一個運行著的程序也被稱為一個進程。我們的MySQL服務器程序和客戶端程序本質上都算是計算機上的一個進程,這個代表著MySQL服務器程序的進程也被稱為MySQL數據庫實例,簡稱數據庫實例。
每個進程都有一個唯一的編號,稱為進程ID,英文名叫PID,這個編號是在我們啟動程序的時候由操作系統隨機分配的,操作系統會保證在某一時刻同一臺機器上的進程號不重復。比如你打開了計算機中的QQ程序,那么操作系統會為它分配一個唯一的進程號,如果你把這個程序關掉了,那操作系統就會把這個進程號回收,之后可能會重新分配給別的進程。當我們下一次再啟動 QQ程序的時候分配的就可能是另一個編號。每個進程都有一個名稱,這個名稱是編寫程序的人自己定義的,比如我們啟動的MySQL服務器進程的默認名稱為mysqld, 而我們常用的MySQL客戶端進程的默認名稱為mysql。