Pregunta

Tengo un problema con el usuario root de MySQL en la configuración de My MySQL, y no puedo por mi vida averiguar cómo solucionarlo. Parece que de alguna manera he confundido al usuario root, y mi acceso a las bases de datos ahora es muy errático.

Como referencia, estoy usando MAMP en OS X para proporcionar el servidor MySQL. Sin embargo, no estoy seguro de cuánto importa. Supongo que todo lo que haya hecho requerirá una solución de línea de comandos para resolverlo.

Puedo iniciar MySQL usando MAMP como de costumbre, y acceder a bases de datos usando los usuarios 'estándar' que he creado para mis aplicaciones PHP. Sin embargo, el usuario root, que utilizo en mi cliente de MySQL GUI, y también en phpMyAdmin, solo puede acceder al " information_schema " base de datos, así como dos que he creado manualmente, y presumiblemente (y erróneamente) dejé los permisos abiertos de par en par. No se puede acceder a mis 15 bases de datos más o menos mi usuario root. Cuando cargo phpMyAdmin, la pantalla de inicio dice: "Crear nueva base de datos: Sin privilegios".

Ciertamente en algún momento cambié la contraseña de mi usuario root usando el cuadro de diálogo MAMP. Pero no recuerdo si hice algo más que pudiera haber causado este problema. Intenté cambiar la contraseña nuevamente, y parece que no hay cambios en el problema.

También he intentado restablecer la contraseña de root utilizando la línea de comando, incluido el inicio de mysql manualmente con --skip-grant-tables y luego enjuagar privs, pero de nuevo, nada parece solucionar el problema.

¡He llegado al final de mis ideas, y agradecería mucho los consejos y diagnósticos paso a paso de uno de los expertos aquí!

Muchas gracias por su ayuda.

¿Fue útil?

Solución

Eso es porque MAMP y la línea de comando mysql (y mysql todo excepto MAMP) son diferentes.

MAMP tiene su propio mysql integrado y no puede acceder a él a través de la línea de comando, solo el compilado en phpmyadmin.

esta ha sido mi experiencia, tengo MAMP y uso el otro mysql para ruby ??on rails y otras cosas.

Otros consejos

Tuve el mismo problema: solo una cuenta de usuario trabajó para acceder a las bases de datos mysql a través de la consola de administración o el navegador de consultas. Cuando usé skip-grant-tables de repente, todas las cuentas podían iniciar sesión, incluida la raíz.

Lo vi como un error ya en 2006 , pero el entrada final no hay un comando que se pueda ejecutar cuando se está en el modo de omitir tablas de concesión, por lo que todavía no había resuelto el problema.

Lo que me ayudó
Esta respuesta es similar a la descrita por Ben Bakelaar en el enlace anterior . El problema surge cuando su my.ini tiene el indicador de resolución de nombre deshabilitado (skip-name-resolve). Esto mata la capacidad de mysql para resolver 'localhost' y la tabla mysql.user solo tiene una entrada para localhost / root.

Actualice la entrada localhost de su tabla mysql.user para que sea 127.0.0.1 en su lugar, y puede iniciar sesión en las consolas locales incluso con la función skip-name-resolve habilitada.

Intente iniciar el servidor con --skip-grant-tables y luego verifique las tablas de privilegios en la base de datos mysql:

select * from user where User='root';
select * from tables_priv where User='root';
select * from db where User='root';

También puedes probar:

show grants for root@localhost;
show grants for root@'%';
show grants for root@'hostname';

Una vez dentro, puede hacer esto para intentar otorgar privilegios completos de root:

grant all privileges on *.* to root@localhost identified by 'password' with grant option;

Su comentario muestra sus privilegios de root actuales (sin --skip-grant-tables). Está bien que no tenga ninguna entrada para 'root' @ '%', no la tiene por defecto y puede considerarla una medida de seguridad.

Parece que has estropeado tus privilegios de 'root' @ 'localhost' . OTORGAR TODOS LOS PRIVILEGIOS. es raro. Por lo general, tiene algo como OTORGAR TODOS LOS PRIVILEGIOS EN *. * o OTORGAR TODOS LOS PRIVILEGIOS EN myDatabase.myTable . Su GRANT no especifica las bases de datos y / o tablas para otorgar los privilegios. No tengo idea de cómo su cliente logró producirlo. No puedo reproducirlo con el cliente de línea de comandos mysql (probé cadenas vacías, espacios en blanco, cualquier tipo de comillas ...), mysql rechaza la declaración GRANT (que, por supuesto, es el comportamiento correcto). Parece que MAMP está haciendo algo realmente extraño. Como no puedo reproducir un GRANT como el tuyo, no puedo decir cómo mysql interpreta eso, pero supongo que ha establecido los privilegios para 'N' en el nivel global.

Para solucionarlo, necesita un usuario con privilegios apropiados. Por lo general, tiene un usuario 'root' @ 'localhost' y un 'root' @ 'your-hostname' . Si tiene suerte, 'root' @ 'your-hostname' todavía está bien. De acuerdo, las conexiones mysql funcionan de la siguiente manera: si se conecta a localhost , se conecta como 'root' @ 'localhost' (no está seguro acerca de 127.0.0.1 , supongo que también es 'root' @ 'localhost' ). Si se conecta a your-hostname , se conecta como 'root' @ 'your-hostname' . Si los privilegios de este usuario todavía están bien, puede actualizar los privilegios para 'root' @ 'localhost' y ya está.

En su comentario, dice que no puede conectarse a través de 127.0.0.1 ya que el socket está en un lugar inusual. Supongo que malinterpretas el error. IIRC se conecta a través de un socket si se conecta a 'localhost' , pero a través de TCP / IP si se conecta a 127.0.0.1 o your-hostname . Si mysql intenta conectarse a través del socket y no puede encontrar el socket (porque no especificó la ubicación correcta), el mensaje de error menciona dónde mysql intentó encontrar el socket. Su mensaje de error no lo hace. Supongo que tu error es un error de red. Tal vez ha iniciado el servidor mysql con la opción --skip-networking , o su configuración especifica una dirección de enlace incorrecta. Primero debe solucionarlo, de lo contrario no podrá conectarse como 'root' @ 'your-hostname' .

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top