Si usted se encuentra problemas cuando intenta conectar al servidor MySQL, los siguientes elementos explican algunas medidas que se pueden tomar para corregir el problema.
- Asegúrese de que el servidor se está ejecutando. Si no se está ejecutando, no puede conectarse a él. Por ejemplo, si intenta conectarse a el servidor y ve un mensaje como cualquiera de los siguientes, podría ser que el servidor no se esté ejecutando:shell> mysqlERROR 2003: Can't connect to MySQL server on '
host_name
' (111)shell> mysqlERROR 2002: Can't connect to local MySQL server through socket'/tmp/mysql.sock' (111)También podría ser que el servidor se esté ejecutando, pero usted se esté intentando conectar utilizando un puerto TCP/IP, named pipe, o archivo socket de Unix diferentes de aquellos a los que el servidor atiende. Para corregir esto cuando invoca a un programa cliente, especifique la opción--port
para indicar el puerto adecuado, o la opción--socket
para indicar la named pipi o el archivo socket de Unix apropiados. Para averiguar dónde se encuentra el archivo socket, puede ejecutar:shell> netstat -ln | grep mysql
- Las tablas grant deben estar correctamente configuradas para que el servidor pueda utilizarlas en el control de acceso. Para algunos tipos de distribución (como las distribuciones binarias de Windows, o las distribuciones RPM de Linux), el proceso de instalación inicializa la base de datos
mysql
que contiene las tablas grant. Para distribuciones que no hacen esto, usted debe inicializar las tablas grant manualmente ejecutando el scriptmysql_install_db. Para más detalles, consulte Sección 2.9.2, “Pasos a seguir después de la instalación en Unix”.Una manera de determinar si debe inicializar las tablas grant es buscar un directoriomysql
bajo el directorio de datos. (El directorio de datos normalmente se llamadata
ovar
y se encuentra bajo su directorio de instalación de MySQL.) Asegúrese de que tiene un archivo llamadouser.MYD
en el directoriomysql
de la base de datos. Si no, ejecute el script mysql_install_db. Tras ejecutar este script e iniciar el servidor, compruebe los privilegio siniciales ejecutando este comando:shell> mysql -u root test
El servidor debería dejarle conectar sin error. - Tras una nueva instalación, usted debería conectarse al servidor y configurar sus usuarios y sus permisos de acceso:
shell> mysql -u root mysql
El servidor debería dejarle conectar porque el usuario MySQLroot
no tiene clave de acceso inicialmente. Esto, además, es un riesgo de seguridad, así que asignar la clave de acceso para las cuentasroot
es algo que debe hacer mientras se configuran el resto de usuarios. Puede consultar las instrucciones para asignar las claves iniciales aquí Sección 2.9.3, “Hacer seguras las cuentas iniciales de MySQL”. - Si usted ha actualizado una instalación MySQL existente a una nueva versión, ¿ejecutó el scriptmysql_fix_privilege_tables? En caso negativo, hágalo. La estructura de las tablas grant cambia ocasionalmente cuando se añaden nuevas características, así que tras una actualización debería siempre asegurarse de que sus tablas tienen la estructura actual. Para más instrucciones, consulte Sección 2.10.2, “Aumentar la versión de las tablas de privilegios”.
- Si un programa cliente recibe el siguiente mensaje de error cuando intenta conectar, significa que el servidor está esperando las claves de acceso en un formato más nuevo del que el cliente es capaz de generar:shell> mysqlClient does not support authentication protocol requestedby server; consider upgrading MySQL clientPara más información sobre atajar este problema, consulte Sección 5.6.9, “Hashing de contraseñas en MySQL 4.1” y Sección A.2.3, “
Client does not support authentication protocol
”. - Si intenta conectarse como
root
y obtiene el siguiente error, significa que usted no tiene un registro en la tablauser
con un valor en la columnaUser
de'root'
y que mysqld no puede resolver el nombre de host para su cliente:Access denied for user ''@'unknown' to database mysql
En este caso, debería reiniciar el servidor con la opción--skip-grant-tables
y editar su archivo/etc/hosts
o\windows\hosts
para añadir una entrada para su host. - Recuerde que los programas cliente utilizan parámetros de conexión especificados en archivos de opciones o variables de entorno. Si un programa cliente parece estar enviando parámetros de conexión por defecto incorrectos cuando no los especifica en línea de comandos, compruebe su entorno y cualquier archivo de opciones implicado. Por ejemplo, si obtiene
Access denied
cuando intenta ejecutar un cliente sin ninguna opción, asegúrese de que no ha especificado una clave de acceso antigua en sus archivos de opciones.Puede suprimir el uso de archivos de opciones por parte de un programa cliente invocándolo con la opción--no-default
. Por ejemplo:shell> mysqladmin --no-defaults -u root version
Los archivos de opciones que los clientes utilizan están enumerados en Sección 4.3.2, “Usar ficheros de opciones”. Las variables de entorno se enumeran en Apéndice E, Variables de entorno. - Si obtiene el siguiente error, significa que está utilizando una clave de
root
incorrecta:shell> mysqladmin -u root -pxxxx
verAccess denied for user 'root'@'localhost' (using password: YES)Si este error precedente ocurre aún cuando usted no ha especificado ninguna clave de acceso, significa que tiene una clave incorrecta en algún archivo de opciones. Intente utilizar la opción--no-defaults
como se explica en el punto anterior.Para más información sobre el cambio de claves, consulte Sección 5.7.5, “Asignar contraseñas a cuentas”.Si usted ha perdido u olvidado la clave deroot
, puede reiniciar mysqld con--skip-grant-tables
para cambiar la clave. Consulte Sección A.4.1, “Cómo reiniciar la contraseña de root”. - Si usted cambia la clave utilizando
SET PASSWORD
,INSERT
, oUPDATE
, debe cifrar la clave utilizando la funciónPASSWORD()
. Si no utilizaPASSWORD()
para estas sentencias, la clave no funcionará. Por ejemplo, la siguiente sentencia asigna una clave, pero no la cifra, así que el usuario no es capaz de conectar tras ella:mysql> SET PASSWORD FOR 'abe'@'
host_name
' = 'eagle';En vez de esto, debe establecer la clave así:mysql> SET PASSWORD FOR 'abe'@'
host_name
' = PASSWORD('eagle');La funciónPASSWORD()
no es necesaria cuando se especifica la clave utilizando sentenciasGRANT
o (a partir de MySQL 5.0.2)CREATE USER
, o también con el comando mysqladmin password, los cuales utilizan automáticamentePASSWORD()
para cifrar la clave. Consulte Sección 5.7.5, “Asignar contraseñas a cuentas” ySección 13.5.1.1, “Sintaxis deCREATE USER
”. localhost
es un sinónimo para su nombre de máquina local, y también es la máquina por defecto al que los clientes se intentan conectar si no se especifica explícitamente.Para evitar este problema en sistemas como ese, puede utilizar la opción--host=127.0.0.1
para mencionar la máquina t explícitamente. Esto crea una conexión TCP/IP al servidor mysqld local. También puede utilizar TCP/IP especificando una opción--host
que utilice el nombre real de la máquina local. En este caso, el nombre de host debe ser especificado en una fila de la tablauser
del servidor, aun cuando el cliente esté corriendo en la misma máquina que el servidor.- Si obtiene un error
Access denied
cuando intenta conectarse a la base de datos conmysql- u user_name
, puede que tenga un problema con la tablauser
. Compruebe esto ejecutandomysql -u root mysql
e introduciendo esta sentencia SQL:mysql> SELECT * FROM user;
El resultado debería incluir una fila cuyas columnasHost
yUser
coincidan con el nombre de su máquina y su nombre de usuario MySQL. - El mensaje de error
Access denied
indica con qué nombre de usuario se está intentando entrar al sistema, la máquina cliente desde la que se está intentando conectar, y si se está utilizando clave de acceso o no. Normalmente, debería tener una línea en la tablauser
que concuerde exactamente con el nombre de máquina y el nombre de usuario que se ha obtenido en el mensaje de error. Por ejemplo, si obtiene un mensaje de error que contieneusing password: NO
, significa que se ha intentado entrar sin utilizar una clave de acceso. - Si el siguiente error aparece cuando se intenta conectar desde una máquina diferente a la que está ejecutando el servidor MySQL, significa que no hay ninguna fila en la tabla
user
con un valorHost
que concuerde con la máquina cliente:Host ... is not allowed to connect to this MySQL server
Puede corregir esto estableciendo una cuenta para la combinación de nombre de máquina y usuario que está utilizando cuando se intenta conectar.Si usted no conoce el número de IP o el nombre de máquina del ordenador desde el que se está conectando, debería poner una fila con un valor de'%'
en la columnaHost
de la tablauser
, y reiniciar mysqld en el servidor con la opción--log
. Tras intentar conectar desde la máquina cliente, la información en el log de MySQL indica desde donde se conectó realmente. (Entonces cambie el valor'%'
en la tablauser
para introducir el nombre real de la máquina que se muestra en el log. De otra manera obtendría un sistema inseguro, porque permitiría conexiones desde cualquier máquina para ese usuario dado.)En Linux, hay otra razón por la que este error puede ocurrir, y es que esté utilizando una versión binaria de MySQL que haya sido compilada con una versión diferente de la libreríaglibc
de la que usted está utilizando. En este caso, usted debería actualizar su sistema operativo oglibc
, o descargarse una distribución MySQL en código fuente y compilarla usted mismo. Un paquete RPM de código fuente es, normalmente, trivial de compilar e instalar, así que esto no es un gran problema. - Si especifica un nombre de máquina cuando se intenta conectar, pero obtiene un mensaje de error donde el nombre de máquina no se muestra, o es un número IP, significa que el servidor MySQL obtuvo un error al intentar resolver el número IP de el cliente a un nombre:shell> mysqladmin -u root -p
xxxx
-hsome-hostname
verAccess denied for user 'root'@'' (using password: YES)Esto indica que existe un problema con DNS. Para arreglarlo, ejecute mysqladmin flush-hosts para reestablecer la cache interna de DNS. Consulte Sección 7.5.6, “Cómo usa MySQL las DNS”.Estas son algunas soluciones permanentes:- Intente encontrar qué le ocurre a su servidor DNS y arréglelo.
- Especifique números IP en vez de nombres de máquina en las tablas grant de MySQL
- Introduzca una línea para la máquina cliente en
/etc/hosts
. - Ejecute mysqld con la opción
--skip-name-resolve
. - Ejecute mysqld con la opción
--skip-host-cache
. - En Unix, si está ejecutando el servidor y el cliente en la misma máquina, conéctese a
localhost
. Las conexiones alocalhost
en Unix utilizan un archivo socket en vez de TCP/IP. - En Windows, si está ejecutando cliente y servidor en la misma máquina, y el servidor tiene activada la característica de conexión mediante named pipe, conéctese a
.
(punto). Las conexiones a.
utilizan una named pipe en vez de TCP/IP.
- Si el comando
mysql -u root test
funciona peromysql -h
termina con unyour_hostname
-u root testAccess denied
(dondeyour_hostname
es el nombre real de su máquina local), puede que no haya especificado correctamente el nombre de su máquina en la tablauser
. Un problema común es que el valor deHost
en la fila de la tablauser
especifique un nombre de máquina incompleto, pero las rutinas de resolución de nombres de dominio de su sistema retornen un nombre de dominio completo (o viceversa). Por ejemplo, si tiene una entrada con valor'tcx'
enHost
de la tablauser
, pero sus DNS dicen que su nombre de máquina es'tcx.subnet.se'
, esta entrada no funcionará. Intente añadir una entrada a la tablauser
con un valor deHost
que contenga un comodín; por ejemplo'tcx.%'
. ¡En cualquier caso, el uso de nombres que acaben con '%
' esinseguro y no recomendado! - Si
mysql -u
funciona perouser_name
testmysql -u
no funcionado, entonces es que no tiene concedidos los permisos para acceder a la base de datosuser_name
other_db_name
other_db_name
para ese usuario dado. - Si
mysql -u
funciona cuando se ejecuta en la máquina del servidor, perouser_name
mysql -h
no lo hace cuando se ejecuta en una máquina cliente remota, entonces no tiene activado el acceso a el servidor para el usuario dado en la máquina remota.host_name
-uuser_name
- Si no es capaz de averiguar por qué obtiene el error de
Access denied
, borre de la tablauser
todos los valores que contengan comodines (que contengan caracteres '%
' o '_
'). Un error muy común es insertar un nuevo registro conHost
='%'
yUser
='
, pensando que esto permite especificar quesome_user
'localhost
se conecte desde la misma máquina. La razón por la que esto no funciona es que los privilegios por defecto incluyen un registro conHost
='localhost'
yUser
=''
. Debido a que ese registro es más específico que'%'
, se utiliza preferentemente frente al nuevo registro cuando conecta desdelocalhost
. El procedimiento correcto es insertar una segunda entrada conHost
='localhost'
yUser
='
, o borrar la entrada consome_user
'Host
='localhost'
yUser
=''
. Tras borrar la entrada, recuerde ejecutar una sentenciaFLUSH PRIVILEGES
para recargar las tablas grant. - Si obtiene el siguiente error, puede ser que tenga un problema con las tablas
db
ohost
:Access to database denied
Si la entrada seleccionada de la tabladb
contiene un valor vacio en la columnaHost
, asegúrese de que hay una o más entradas correspondientes en la tablahost
especificando a qué máquinas se aplica la entrada de la tabladb
. - Si usted puede conectar al servidor MySQL, pero obtiene un mensaje
Access denied
siempre que ejecuta una sentenciaSELECT ... INTO OUTFILE
oLOAD DATA INFILE
, su entrada en la tablauser
no tiene el privilegioFILE
activado. - Si cambia las tablas grant directamente (por ejemplo, mediante sentencias
INSERT
,UPDATE
, oDELETE
) y sus cambios parecen que son ignorados, recuerde que debe ejecutar la sentenciaFLUSH PRIVILEGES
statement or el comando mysqladmin flush-privileges para que el servidor relea las tablas de privilegios. En otro caso, los cambios no tendrán efecto hasta la próxima vez que el servidor sea reiniciado. Recuerde que tras cambiar la clave deroot
con un comandoUPDATE
, no necesita especificar la nueva clave hasta que se haga la relectura de privilegios, porque el servidor no sabrá que la clave ha cambiado hasta ese momento. - Si sus privilegios parecen haber cambiado en el medio de una sesión, podría ser que un administrador de MySQL los haya cambiado. La recarga de las tablas grant afecta a las nuevas conexiones de cliente, pero también a las ya existentes tal y como se indica en Sección 5.6.7, “Cuándo tienen efecto los camios de privilegios”.
- Si tiene problemas de acceso con un programa Perl, PHP, Python u ODBC, intente conectar al servidor con
mysql -u
ouser_name
db_name
mysql -u
. Si puede conectar utilizando el programa cliente mysql, el problema está en su programa, no en los privilegios de acceso. (No hay ningún espacio entreuser_name
-pyour_pass
db_name
-p
y la clave; también puede utilizar la sintaxis--password=
para especificar la clave. Si utiliza la opciónyour_pass
-p
sola, MySQL le preguntará por la clave.) - Para hacer comprobaciones, inicie el servidor mysqld con la opción
--skip-grant-tables
. Puede cambiar las tablas grant y utilizar el script mysqlaccess para comprobar que sus modificaciones tienen el efecto deseado. Cuando esté satisfecho con los cambios, ejecute mysqladmin flush-privileges para decirle al servidor mysqldque comience a utilizar las nuevas tablas grant. (Recargar las tablas sobresee la opción--skip-grant-tables
. Esto permite decirle al servidor que comience a utilizar las tablas sin tener que reiniciarlo.) - Si todo lo anterior falla, inicie el servidor mysqld con una opción de depuración (por ejemplo,
--debug=d,general,query
). Esto imprime la información de host y usuario sobre los intentos de conexión, así como información sobre cada comando ejecutado. Consulte Sección D.1.2, “Crear ficheros de traza”. - Si tiene cualquier otro problema con las tablas grant de MySQL y cree que debe enviar el problema a la lista de correo, proporcione siempre un volcado de las tablas grant MySQL. Puede hacer ete volcado con el comandomysqldump mysql. Como siempre, envíe su problema utilizando el script mysqlbug. Consulte Sección 1.6.1.3, “Cómo informar de bugs y problemas”. En elgunos casos, podría necesitar reiniciar mysqld con
--skip-grant-tables
para ejecutar mysqldump.
Fuente:enlace
No hay comentarios:
Publicar un comentario