我想分析一下mysql
stream量。 现在,所有的mysql请求都被发送到MySQL unix套接字:
unix 2 [ ACC ] STREAM LISTENING 3734388 15304/mysqld /var/run/mysqld/mysqld.sock
我试图禁用该套接字强制MySQL使用networking套接字,而不是在环回。 我尝试了注释my.cnf
和debian.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如何决定如何连接的完整描述:
这不是客户的问题吗? 如果使用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(备份后),然后重新启动服务器。 然后我可以连接一个套接字,错误消失了。