Friday, October 20, 2006

MySQL 连接 localhost

在使用 mysql 连接 localhost 时,情况并不是表面上看起来的那样子。

举个例子:
$ mysql -u root test

这里没有指定主机,所以连接的是 localhost,若你是用 yum/apt-get/urpmi 等 RPM 管理工具安装了 MySQL 的话,这里称其为数据库 A,那么应该是很顺利地连接上了。然后,再安装一个 MySQL,称之为数据库 B,使用其他端口,比如 3307,再尝试连接。
$ mysql -u root -P 3307 test

你会发现,连上的还是数据库 A,而不是 B。

为啥乜?
因为连的是 localhost。

这种情况下,mysql 是通过 unix socket 而不是 tcp/ip 连接数据库的。所以,在本地有多个数据库的时候,用 -S 参数连接能保证 DWIM。举个例子:
$ mysql -u root -S /tmp/mysql_another.sock test

当然,也可以这样:
$ mysql -u root -h 192.168.0.1 -P 3307 test

只是 unix socket 方式可以获得更高的效率,闻得一说有 30% 之多,啧啧。

No comments: