我最初是一個Oracle DBA,在初用MySQL的時候感覺很奇怪,提出了下面三個問題:
* 為什么這個數據庫的關閉方式如此簡單?
* 為什么這個數據庫的啟動方式也是如此簡單?
* 為什么這個數據庫的用戶竟然如此復雜?
下面的內容里,我們就要著重學習一下,以解答我的三個問題。
首先說說MySQL的關閉方式。再說關閉方式之前,來回憶一下之前我們是如何啟動MySQL的:
```bash
mysqld --user=mysql --datadir=/data/mysql
```
這是以命令的方式開啟的數據庫服務,另外還可以將其注冊到系統的服務中,用服務的方式啟動。這相比Oracle來說簡單了很多,很像是一般的應用程序的啟動。對于大部分的程序員來說,這都是很容易理解和學會的方式。
Oracle相對來說就要復雜很多,要啟動監聽,要啟動數據庫,數據庫的啟動還分為NOMOUNT,MOUNT和OPEN三個階段。
MySQL的關閉方式也很簡單,可以像Oracle一樣,在客戶端中直接輸入shutdown命令關閉數據庫:
```bash
mysql -uroot -p -e "shutdown"
```
另外MySQL還提供了一個工具mysqladmin,也可以用來關閉數據庫:
```bash
mysqladmin -uroot -p shutdown
```
MySQL比較讓初學者困惑的是其連接方式,這又是一個很重要的概念,首先我們看看一個輸出:

注意紅色框中的內容,它說明了我們的這個連接,是通過Unix socket的方式連上Server的。
再看一張圖:

可以看出這個連接是通過TCP/IP方式連上Server的。
因此可以引出兩種主流的MySQL連接方式即Unix socket連接和TCP/IP連接。事實上還有別的方式,但是這兩種方式已經涵蓋了大部分的應用,只需要關注這兩種方式即可。
我之前說過MySQL的用戶管理對于初學MySQL的我來說比較復雜,這是和其連接方式息息相關的。這兩個用戶,竟然不是一個用戶:"root@localhost"和“root@192.168.150.129”。
如何理解呢?先說一個名字:羅賓-范-佩西,這是曾經阿森納和曼聯的球星,荷蘭人。這個名字是什么意思呢?很有意思的是荷蘭人似乎都姓范。其實這個名字的意思是“來自佩西的羅賓”。范是荷蘭語中from的意思,同理,“路德維希-馮-貝多芬”的本意是“來自貝多芬的路德維希”,這里“馮”是德語中的from的意思。
現在再看看上面那兩個用戶,就很簡單了,第一個是來自localhost的root,第二個是來自192.168.150.129的root,這兩個用戶只不過是名字一樣,但是確實不是一個用戶。
前者用socket方式連接,后者用TCP/IP連接。
如果對球星和音樂家不感興趣,那么這里在多舉一個例子,我們看三國的時候,趙云最喜歡吼得一句話是:“我乃常山趙子龍”。是的,趙子龍可以有很多個,但是常山趙子龍和洛陽趙子龍確實不是一個人。