我最初是一个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比较让初学者困惑的是其连接方式,这又是一个很重要的概念,首先我们看看一个输出:
![](https://box.kancloud.cn/9ad53866fd44f9fe2c7108411c7d2b5c_960x331.png)
注意红色框中的内容,它说明了我们的这个连接,是通过Unix socket的方式连上Server的。
再看一张图:
![](https://box.kancloud.cn/fc7b418c10ee2c00bd007b9516d12bce_973x342.png)
可以看出这个连接是通过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连接。
如果对球星和音乐家不感兴趣,那么这里在多举一个例子,我们看三国的时候,赵云最喜欢吼得一句话是:“我乃常山赵子龙”。是的,赵子龙可以有很多个,但是常山赵子龙和洛阳赵子龙确实不是一个人。