如何强制MySQL连接通过TCP而不是Unix套接字?

我想分析一下mysqlstream量。 现在,所有的mysql请求都被发送到MySQL unix套接字

 unix 2 [ ACC ] STREAM LISTENING 3734388 15304/mysqld /var/run/mysqld/mysqld.sock 

我试图禁用该套接字强制MySQL使用networking套接字,而不是在环回。 我尝试了注释my.cnfdebian.cnf文件中的所有socket指令并重新启动MySQL,但没有任何区别。

如何禁用MySQL unix套接字来强制MySQL通过networking?

附加信息:我在ubuntu 10.04上运行MySQL 5.1

关于问题的精确性
由于许多人build议启用networking套接字我想澄清我的问题,指出绑定地址已经启用bind-address = 127.0.0.1 ,并且侦听连接可用:

 tcp 0 0 127.0.0.1:3306 0.0.0.0:* LISTEN 15601/mysqld 

我仍然看不到任何连接尝试从我的webapp(Drupal网站)来的127.0.0.1:3306

更新与答案

这似乎确实是问题来自Drupal使用的mysqli连接器(在.ht_config.php为有兴趣的人)。 它被设置为: mysqli://drupal:***@localhost/drupal ,将localhost更改为127.0.0.1修复了问题(即Drupal正在连接到networking套接字)。

    使用IP绑定到127.0.0.1 。 这应该激活localhost上的侦听端口。 在客户端不要使用localhost – 使用127.0.0.1来代替。 如果将localhost指定为目标,则许多客户端都会有一个内部别名,使其连接到套接字。

    MySQL很奇怪。

    在Linux和其他* nixes中,如果连接到主机“localhost”(这将是默认的主机名),MySQL将假定您想要使用套接字。

    你可以用3种方法重写:1)指定一个不同的主机名,如127.0.0.1( mysql -h 127.0.0.1 )或者你的服务器的真实主机名2)指定你想使用TCP而不是一个套接字( mysql --protocol tcp

    你也可以很容易地使默认我编辑你的my.cnf所以它有这个([客户端]意味着任何客户端:

     [client] protocol=tcp 

    你可以看到MySQL如何决定如何连接的完整描述:

    http://dev.mysql.com/doc/refman/5.5/en/connecting.html

    这不是客户的问题吗? 如果使用mysql程序您可以使用--protocol开关。 从手册页

      --protocol={TCP|SOCKET|PIPE|MEMORY} The connection protocol to use for connecting to the server. It is useful when the other connection parameters normally would cause a protocol to be used other than the one you want. For details on the allowable values, see Section 4.2.2, “Connecting to the MySQL Server”. 

    我刚试过

     mysql --protocol=TCP -u root -p 

    同时使用tcpdump -i lo tcp port 3306监控端口3306,我可以看到stream量,而如果我只是运行

     mysql -u root -p 

    我(正确)看到端口3306上没有stream量。

    编辑:

    现在您告诉我们您正在使用DRUPAL,解决scheme相对比较简单。

    sites/<sitename>sites/default和编辑settings.php文件

    你会发现这样的结构

     $databases = array ( 'default' => array ( 'default' => array ( 'database' => 'databasename', 'username' => 'databaseuser', 'password' => 'databasepassword', 'host' => 'localhost', 'port' => '', 'driver' => 'mysql', 'prefix' => '', ), ), ); 

    'localhost'更改为'127.0.0.1'并保存该文件。

    这听起来有点疯狂

    尝试将套接字文件设置为path驻留在另一台机器上的绝对path

    http://dev.mysql.com/doc/refman/5.0/en/server-options.html#option_mysqld_socket

    否则,你不能绕过这个默认的行为,因为一个套接字文件必须存在供mysqld进行通信。

    编辑my.cnf并添加指令

     bind-address = 127.0.0.1 

    或者您的首选IP,通过networking访问。 重新启动mysql以使其工作。

    当您传入NULL值或string“localhost”( http://www.php.net/manual/en/mysqli.construct.php )时,mysqli客户端将使用unix套接字文件而不是tcpnetworking。

    看来sqlyog客户端总是使用tcpnetworking,即使在你填写“localhost”的时候也是如此

    我必须删除/etc/my.cnf(备份后),然后重新启动服务器。 然后我可以连接一个套接字,错误消失了。