我想分析一下mysql
流量。目前,所有 mysql 请求都发送到 MySQL unix 套接字:
unix 2 [ ACC ] STREAM LISTENING 3734388 15304/mysqld /var/run/mysqld/mysqld.sock
我正在尝试禁用该套接字以强制 MySQL 在环回上使用网络套接字。我尝试注释掉和文件socket
中的所有指令并重新启动 MySQL,但没有任何效果。my.cnf
debian.cnf
如何禁用 MySQL unix 套接字以通过网络强制使用 MySQL?
附加信息:我正在MySQL 5.1
运行ubuntu 10.04
。
问题的精确性
由于很多人建议启用网络套接字,因此我想通过指出绑定地址已启用bind-address = 127.0.0.1
并且可以监听连接来澄清我的问题:
tcp 0 0 127.0.0.1:3306 0.0.0.0:* LISTEN 15601/mysqld
我仍然没有看到127.0.0.1:3306
来自我的 web 应用程序(Drupal 网站)的连接尝试。
已更新答案
看来问题确实出在mysqli
Drupal 使用的连接器上(.ht_config.php
感兴趣的人可以参阅)。已将其设置为: mysqli://drupal:***@localhost/drupal
,更改localhost
为127.0.0.1
已修复该问题(即 Drupal 现在正在与网络套接字建立连接)。
答案1
在 Linux 和其他 *nix 系统中,MySQL 会假定您要使用插座(Unix 域套接字)如果您连接到主机“localhost”(这将是默认主机名)。
您可以通过 3 种方式覆盖此设置:
- 指定其他主机名,如 127.0.0.1 (
mysql -h 127.0.0.1
) 或服务器的真实主机名 - 指定要使用 TCP 而不是套接字 (
mysql --protocol tcp
)
您还可以轻松地将其设为默认设置,通过编辑 my.cnf 可以得到该设置([client] 表示任何客户端:
[client]
protocol=tcp
你可以在这里看到 MySQL 如何决定如何连接的完整描述:
答案2
使用 IP 绑定127.0.0.1
。这应该会激活 上的监听端口localhost
。在客户端不要使用localhost
- 而要使用。许多客户端都有一个内部别名,如果您指定为目标,127.0.0.1
则可让它们连接到套接字。localhost
MySQL 很奇怪。
答案3
这真的不是客户端问题吗?如果使用 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
同时监控端口 3306 tcpdump -i lo tcp port 3306
,我可以看到流量,而如果我只运行
mysql -u root -p
我(正确地)看到端口 3306 上没有流量。
编辑:
既然您告诉我们您正在使用 DRUPAL,那么解决方案就相对简单了。
转到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'
并保存文件。
答案4
编辑 my.cnf 并添加指令
bind-address = 127.0.0.1
或您首选的 IP,使其可通过网络访问。之后重新启动 mysql 即可使其工作。