62 votos

Cómo forzar a MySQL para conectarse por TCP en lugar de un socket de Unix?

Me gustaría analizar mysql del tráfico. Ahora, todas las entregas de pedidos se envían a la base de socket de unix:

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

Estoy tratando de desactivar la toma de corriente a la fuerza de MySQL para utilizar el socket de red en lugar de en el bucle. Traté de comentar todos los socket directivas en la my.cnf y debian.cnf archivos y reiniciar MySQL pero no hizo ninguna diferencia.

¿Cómo puedo desactivar el MySQL socket de unix para forzar a MySQL a través de la red?

info adicional: me estoy quedando MySQL 5.1 a ubuntu 10.04.

Precisiones sobre la cuestión
Desde un montón de gente que sugirió la habilitación de la toma de red me gustaría aclarar mi pregunta señalando que el enlace de la dirección ya se ha habilitado con bind-address = 127.0.0.1 y el que escucha se dispone de conexión:

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

Todavía no veo las conexiones intento de 127.0.0.1:3306 de mi web (el sitio web de Drupal).

Actualizado con la respuesta

Parece en efecto que el problema viene de la mysqli conector que Drupal utiliza (en .ht_config.php para aquellos que estén interesados). Fue creado: mysqli://drupal:***@localhost/drupal, cambiando localhost a 127.0.0.1 solucionado el problema (es decir, Drupal es ahora de realizar las conexiones a la toma de red).

110voto

Jonathan Amend Puntos 261

En Linux y otros *nixes, MySQL asume que usted desea utilizar un socket si se conecta con el host "localhost" (que sería el valor por defecto nombre de host).

Puede anular este en 3 formas: 1) Especificar un nombre de equipo diferente como 127.0.0.1 (mysql -h 127.0.0.1) o el servidor del verdadero nombre de host 2) Especificar que desea utilizar TCP y no un socket (mysql --protocol tcp)

También se puede hacer fácilmente que el valor por defecto de mi edición de su mi.cnf por lo que tiene esto ([cliente] significa cualquier cliente:

[client]
protocol=tcp

Usted puede ver la descripción completa de cómo MySQL decide cómo conectar aquí:

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

62voto

Nils Puntos 5486

Utilizar una IP de unión a 127.0.0.1 que debe activar un puerto de escucha en "localhost". En el lado del cliente no utilice "localhost" uso "127.0.0.1" en su lugar. Muchos clientes han interno alias que les hace conectar a la toma de corriente si se especifica "localhost" como destino.

mySQL es extraño.

16voto

katit Puntos 130

No es esto realmente un problema de cliente ? Si el uso de mysql, el programa puede usar la --protocol del interruptor. Desde la página man

 --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".

Acabo de probar

mysql --protocol=TCP -u root -p

mientras que el monitoreo de puerto 3306 con tcpdump -i lo tcp port 3306 y puedo ver el tráfico, mientras que si sólo tengo que ejecutar

mysql  -u root -p

I (correctamente) la de no ver el tráfico en el puerto 3306.

EDITAR:

Ahora que usted nos diga que usted está usando DRUPAL, la solución es relativamente fácil.

Ir a sites/<sitename> o sites/default y editar el settings.php archivo

Usted encontrará una estructura como esta

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

Cambiar el 'localhost' a '127.0.0.1' y guarde el archivo.

1voto

RolandoMySQLDBA Puntos 10660

Esto puede sonar un poco loco

Prueba a configurar el archivo socket a una ruta de acceso absoluta, cuya ruta de acceso reside en otra máquina

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

De lo contrario, usted no puede omitir este comportamiento predeterminado debido a que un archivo socket debe existir para mysqld para comunicarse.

1voto

Chris Puntos 891

Editar el mi.cnf y añadir la directiva

bind-address = 127.0.0.1

o su IP preferida para hacerla accesible a través de la red. Reiniciar mysql después de conseguir trabajo.

EnMiMaquinaFunciona.com

EnMiMaquinaFunciona es una comunidad de administradores de sistemas en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros sysadmin, hacer tus propias preguntas o resolver las de los demás.

Powered by: