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

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

我想分析一下mysql流量。目前,所有 mysql 请求都发送到 MySQL unix 套接字:

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

我正在尝试禁用该套接字以强制 MySQL 在环回上使用网络套接字。我尝试注释掉和文件socket中的所有指令并重新启动 MySQL,但没有任何效果。my.cnfdebian.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 网站)的连接尝试。

已更新答案

看来问题确实出在mysqliDrupal 使用的连接器上(.ht_config.php感兴趣的人可以参阅)。已将其设置为: mysqli://drupal:***@localhost/drupal,更改localhost127.0.0.1已修复该问题(即 Drupal 现在正在与网络套接字建立连接)。

答案1

在 Linux 和其他 *nix 系统中,MySQL 会假定您要使用插座(Unix 域套接字)如果您连接到主机“localhost”(这将是默认主机名)。

您可以通过 3 种方式覆盖此设置:

  1. 指定其他主机名,如 127.0.0.1 ( mysql -h 127.0.0.1) 或服务器的真实主机名
  2. 指定要使用 TCP 而不是套接字 ( mysql --protocol tcp)

您还可以轻松地将其设为默认设置,通过编辑 my.cnf 可以得到该设置([client] 表示任何客户端:

[client]
protocol=tcp

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

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

答案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 即可使其工作。

相关内容