2010-12-09 23 views
8

estoy ejecutan Linux Mint y tratando de conectarse a MySQL esta maneraqué es MySQL conectando en cualquier/todos los puertos

mysql --port=3306 -u root -p 

Entonces me lleva a mi contraseña. Esto está bien ¿Por qué es que cuando escribo algo como esto todavía funciona ....

mysql --port=1234 -u root -p 

En caso de que no falla ya que no hay servidor MySQL se ejecuta en el puerto 1234?

La razón por la que estoy preguntando esto es porque quiero crear un túnel SSH para conectarme a una base de datos en otro servidor. Digamos que el túnel SSH reenviará todo mi tráfico de localhost: 3308 a myremoteserver: 3306. Como mi servidor mySQL local está aceptando mis conexiones en todos los puertos, no puedo conectarme al puerto 3308 y presionar el servidor remoto. Todavía estoy golpeando mi servidor local ...

Incluso si mis opciones de túnel SSH podrían haber estado equivocadas, me preguntaba si alguien sabía por qué me puedo conectar al puerto 1234 y todavía golpea mi servidor mySQL local ejecutándose en 3306 ?

+0

Cuando dice "obras", Cómo que le pide la contraseña (que lo hace), o se va más allá de eso y realmente te registra en el servidor mysql? Si desea conectarse a un túnel SSH que utiliza un puerto local, sugiero también especificar el host en el indicador del cliente mysql. 'mysql --port = 3308 -hlocalhost -u root -p'. Esto evitaría que su cliente mysql use un conducto Unix para conectarse a su servidor. Además, eche un vistazo a la sección [cliente] de /etc/my.cnf. – Vic

+0

Sí, en realidad me registra en el servidor mySQL. Esta es la última vez que probé y realmente me registra en el servidor mySQL ... mysql -h localhost --port = 12312312 -u root -p –

Respuesta

10

IIRC mySQL que se conecta a una toma de Unix si se está conectando a localhost. Como no se conecta a través de TCP en este caso, no hay ningún puerto involucrado y el número de puerto que proporcione no importa.

Editar: No estoy seguro si esto es cierto en todos los sistemas, pero si uso 127.0.0.1 o el nombre de host en lugar de localhost, mysql se conecta a través de TCP y el número de puerto importa - Puedo conectarme solo con el número de puerto correcto .

+0

Perfecto gracias! Funcionó cuando usé 127.0.0.1. ¿Hay alguna forma en que pueda forzar a mysQL a usar TCP incluso si escribo en localhost? –

+1

@girdus: puede crear un [archivo de opciones] (http://dev.mysql.com/doc/refman/5.0/en/option-files.html). en la sección '[client]', agregue la línea 'host = 127.0.0.1'. Eso no cambiará lo que sucede cuando usas 'localhost', pero * obligará * a que el valor predeterminado sea' 127.0.0.1' en lugar de 'localhost'. (Consulte el enlace para obtener documentación sobre cómo se estructura el archivo y dónde debe ir). – Lee

1

Te pedirá tu contraseña antes de que intente conectarse. Si introduce su contraseña (o cualquier otra cosa para el caso), y se deja proceder, responderá con algo como:

ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/opt/local/var/run/mysql5/mysqld.sock' 
+0

Lo siento, olvidé mencionar que en realidad me conecta después Ingresé mi contraseña ... –

11

Para forzar una conexión TCP, use --protocol=TCP.

Ejemplo:

primer túnel SSH

ssh -L 4000:localhost:3306 server.ch 

y luego conectarse al servidor MySQL remoto con

mysql -h localhost --port=4000 --protocol=TCP -u root -p 
1

@titanoboa, THX para esto! Yo estaba teniendo el mismo problema. Sólo para añadir en realidad se puede forzar la conexión TCP incluso para localhost usando los siguientes

[client] 
port = 3306 
socket = /var/run/mysqld/mysqld.sock 
protocol = TCP 

Saludos