Un cliente MySQL en Unix puede conectarse al servidor
mysqld de dos maneras diferentes: Utilizando
un archivo socket de Unix para conectarse a través de un
archivo en el sistema de ficheros (por defecto
/tmp/mysql.sock
), o utilizando TCP/IP, que
se conecta a través de un número de puerto. Una conexión a
través de archivo socket de Unix es más rápida que a través
de TCP/IP, pero solo puede ser utilizada cuando se conecta a un
servidor en la misma máquina. Se utiliza un archivo de socket
Unix siempre que no se especifique un nombre de servidor o si se
especifica el nombre de servidor especial
localhost
.
Si el servidor MySQL está ejecutándose en Windows 9x o Me,
puede conectarse únicamente a través de TCP/IP. Si el servidor
se está ejecutando sobre Windows NT, 2000, XP, o 2003 y ha sido
iniciado con la opción --enable-named-pipe
,
puede también conectarse a través de named pipes si el cliente
se está ejecutando en la misma máquina que el servidor. El
nombre de la named pipe es por defecto MySQL
.
Si no se especifica un nombre de servidor al conectar a
mysqld, un cliente MySQL intenta primero
conectarse a la named pipe. Si esto no funciona, se conecta al
puerto TCP/IP. Usted puede forzar la utilizaciónde named pipes
en windows utilizando .
como el nombre de
servidor. hostname.
El error (2002) Can't connect to ...
normalmente significa que no hay un servidor MySQL ejecutándose
en el sistema o que usted está especificando un archivo de
socket Unix o número de puerto TCP/IP al intentar conectarse al
servidor.
Comience por comprobar si hay un proceso llamado mysqld ejecutándose en el servidor. (Utilice ps xa | grep mysqld en Unix o el Administrador de tareas en Windows). Si no existe ese proceso, debería iniciar el servidor. Consulte Sección 2.9.2.3, “Arrancar y resolver problemas del servidor MySQL”.
Si hay un proceso mysqld ejecutándose, puede
comprobarlo ejecutando los siguientes comandos. El número de
puerto o nombre del archivo socket de Unix pueden ser diferentes
en su configuración. host_ip
representa el
número de IP de la máquina donde se está ejecutando el
servidor.represents the IP number of the machine where the
server is running.
shell> mysqladmin version shell> mysqladmin variables shell> mysqladmin -h `hostname` version variables shell> mysqladmin -h `hostname` --port=3306 version shell> mysqladmin -h host_ip version shell> mysqladmin --protocol=socket --socket=/tmp/mysql.sock version
Tenga en cuenta la utilización de acentos abiertos en vez de
comillas en el comando hostname
; esto provoca
que la salida de hostname
(es decir, el
nombre de máquina actual) sea sustituida en el comando
mysqladmin. Si no tiene ningún comando
hostname
o está ejecutando sobre Windows,
puede escribir manualmente el nombre de su máquina (sin acentos
abiertos) tra la opción -h
. También puede
intentarlo con -h 127.0.0.1
para conectarse
con TCP/IP a la máquina local.
Aquí hay algunas razones por las que el error Can't
connect to local MySQL server
podría ocurrir:
mysqld no se está ejecutando. Compruebe la lista de procesos de sus sistema operativo para asegurarse de que el proceso mysqld está presente.
Usted está ejecutando un sistema que utiliza hilos tipo MIT-pthreads. Si está ejecutando un sistema que no tiene hilos antivos, mysqld utiliza el paquete de MIT-pthreads package. Consulte Sección 2.1.1, “Sistemas operativos que MySQL soporta”. Aún así, no todas las versiones de MIT-pthreads soportan los archivos socket de Unix. En un sistema sin soporte para archivos socket, siempre debe especificar el nombre de máquina explícitamente cuando se conecte al servidor. Intente utilizar este comando para comprobar la conexión con el servidor:
shell> mysqladmin -h `hostname` version
Alguien ha borrado el archivo socket de Unix que
mysqld utiliza
(/tmp/mysql.sock
por defecto). Por
ejemplo, usted podría tener un trabajo de
cron que elimine los archivos antiguos
del directorio /tmp
. Siempre puede
ejecutar mysqladmin version para
comprobar si el archivo socket de Unix que to check whether
the Unix socket file that mysqladmin
está intentando utilizar existe realmente. La solución en
este caso es cambiar el trabajo de cron
para que no elimine mysql.sock
o
colocar el archivo socket en algún otro lugar. Consulte
Sección A.4.5, “Cómo proteger o cambiar el fichero socket de MySQL
/tmp/mysql.sock
”.
Usted ha iniciado el servidor mysqld con
la opción --socket=/path/to/socket
, pero
ha olvidado decirle al programa cliente el nuevo nombre del
archivo socket. Si cambia la ruta del socket en el servidor,
también tiene que notificárselo a los programas cliente.
Puede hacer esto proporcionándole al cliente la misma
opción --socket
al ejecutarlo. También
debe asegurarse de que los programas cliente tienen permiso
para acceder al archivo mysql.sock
.
Para averiguar donde está almacenado el archivo, puede
hacer:
shell> netstat -ln | grep mysql
Consulte Sección A.4.5, “Cómo proteger o cambiar el fichero socket de MySQL
/tmp/mysql.sock
”.
Usted está ejecutando Linux y un hilo del servidor ha
muerto (volcado de memoria). En este caso, usted debe matar
el resto de hilos de mysqld (por ejemplo,
con kill
o con el script
mysql_zap
) antes de que pueda reiniciar
el servidor MySQL. Consulte Sección A.4.2, “Qué hacer si MySQL sigue fallando (crashing)”.
El servidor o el programa cliente podrían no tener los
privilegios de acceso adecuados para el directorio que
almacena el archivo socket de Unix, o para el archivo mismo.
En este caso, usted debe cambiar los privilegios del
directorio o los del archivo mismo para que el servidor y
los clientes puedan acceder a ellos, o reiniciar
mysqld con una opción
--socket
que especifique un nombre de
archivo de socket en un directorio donde el servidor pueda
crearlo y los programas cliente puedan acceder a él.
Si usted obtiene el mensaje de error Can't connect to
MySQL server on some_host
, puede intentar los
siguientes procedimientos para averiguar cual es el problema:
Compruebe si el servidor se está ejecutando en esa máquina
mediante la ejecución de telnet some_host
3306
y presionando la tecla Enter unas cuantas
veces. (3306 es el puerto por defecto de MySQL. Cambie el
valor si su servidor está escuchando en un puerto
diferente.) Si hay un servidor MySQL ejecutándose y
escuchando al puerto, debería obtener una respuesta que
incluyera el número de versión del servidor. Si obtiene un
error como telnet: Unable to connect to remote
host: Connection refused
, entonces no hay ningún
servidor ejecutándose en el puerto dado.
Si el servidor está ejecutándose en la máquina local,
intente utilizar mysqladmin -h localhost
variables para conectar utilizando el archivo
socket de Unix. Colmpruebe el número de puerto TCP/IP al
que el servidor está configurado para escuchar (es el valor
de la variable port
.)
Asegúrese de que su servidor mysqld no
fue iniciado utilizando la opción
--skip-networking
. Si lo fue no puede
conectarse a él utilizando TCP/IP.
Compruebe que no hay un cortafuegos bloqueando el acceso a MySQL. Aplicaciones como ZoneAlarm o el cortafuegos personal de Windows XP podría necesitar ser configurados para permitir el acceso externo a un servidor MySQL.
Ésta es una traducción del manual de referencia de MySQL, que puede encontrarse en dev.mysql.com. El manual de referencia original de MySQL está escrito en inglés, y esta traducción no necesariamente está tan actualizada como la versión original. Para cualquier sugerencia sobre la traducción y para señalar errores de cualquier tipo, no dude en dirigirse a mysql-es@vespito.com.