Pergunta

Eu tenho um problema com o usuário root na configuração Meu MySQL, e eu simplesmente não posso para a vida de me descobrir como corrigi-lo. Parece que eu tenho alguma forma desarrumada o usuário root, e meu acesso a bancos de dados é agora muito errático.

Para referência, eu estou usando MAMP no OS X para fornecer o servidor MySQL. Eu não estou certo quanto o que importa embora - Eu acho que tudo o que eu fiz vai exigir uma correção de linha de comando para resolvê-lo

.

Eu posso iniciar o MySQL usando MAMP como de costume, e bases de dados de acesso que utilizem os usuários 'padrão' eu criei para meus aplicativos PHP. No entanto, o usuário root, que eu uso no meu cliente MySQL GUI, e também no phpMyAdmin, só pode acessar o banco de dados "information_schema", bem como dois Eu criei manualmente e, presumivelmente (e erroneamente) deixou permissões aberta para. Meus 15 ou mais outros bancos de dados não podem ser acessados ??meu usuário root. Quando eu carregar phpMyAdmin, a tela inicial diz: "Criar novo banco de dados: sem privilégios".

Eu certamente fez em algum momento alterar a senha do meu usuário root usando o diálogo MAMP. Mas eu não me lembro se eu fizesse qualquer outra coisa que poderia ter causado este problema. Eu tentei alterar a senha novamente, e não parece haver nenhuma mudança na questão.

Eu também tentei redefinir a senha root usando a linha de comando, incluindo iniciar mysql manualmente com a opção --skip-grant-tables seguida, rubor privs, mas novamente, nada parece para corrigir o problema.

Eu vim para o fim das minhas ideias, e gostaria muito que alguns conselhos e diagnóstico passo-a-passo de um dos especialistas aqui!

Muito obrigado pela sua ajuda.

Foi útil?

Solução

Isso porque MAMP ea mysql de linha de comando (e tudo o mysql, exceto MAMP) são diferentes.

MAMP tem seu próprio construído em mysql e você não pode obtê-lo através da linha de comando, somente a construção em phpmyadmin.

este tem sido minha experiência, tenho MAMP e usar o outro mysql para ruby ??on rails e outras coisas.

Outras dicas

Eu tive o mesmo problema: apenas uma conta de usuário trabalhou para acessar os bancos de dados MySQL através do console de administração ou o navegador da consulta. Quando eu usei as skip-grant-tables repente todas as contas possam se logar, incluindo raiz.

eu vi como um bug já em 2006 , mas o entrada final não há um comando que pode ser executado no modo de skip-grant-tables, então eu ainda não tinha resolvido a questão.

O que me ajudou
Essa resposta é semelhante a um descrito por Ben Bakelaar no link acima . O problema surge quando o seu my.ini tem a bandeira de resolução de nomes desabilitada (skip-name-resolve). Isso mata a capacidade do mysql para resolver 'localhost' e tabela mysql.user tem apenas uma entrada para localhost / root.

Atualize a entrada localhost da sua tabela mysql.user para ser 127.0.0.1 em vez disso, e você pode fazer login para os consoles locais, mesmo com o recurso skip-name-resolve habilitado.

Tente iniciar o servidor com a opção --skip-grant-tables e em seguida, verificar a tabela de privilégios no banco de dados mysql:

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

Você também pode tentar:

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

Uma vez em que você poderia fazer isso para tentar dar privilégios de root:

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

O seu comentário mostra seus privilégios de root atuais (sem a opção --skip-grant-tables). É bom que você não tem qualquer entrada para o 'root' @ '%', você não tem que, por padrão, e você pode considerá-lo uma medida de segurança.

Parece que você desarrumada seus privilégios 'root'@'localhost'. GRANT ALL PRIVILEGES ON . é estranho. Geralmente, você tem algo como GRANT ALL PRIVILEGES ON *.* ou GRANT ALL PRIVILEGES ON myDatabase.myTable. Seu GRANT não especifica as bases de dados e / ou tabelas para conceder os privilégios para. Eu não tenho nenhuma idéia de como o seu cliente conseguiu produzi-lo. Eu não posso reproduzi-lo com o cliente mysql de linha de comando (strings vazias tentaram, espaço em branco, qualquer tipo de aspas ...), mysql se recusa a instrução GRANT (que, é claro, é o comportamento correto). Looks como MAMP está fazendo algo realmente estranho. Já que não posso reproduzir um GRANT como a sua, eu não posso dizer como interpreta mysql isso, mas eu acho que definiu os privilégios para 'N' no nível global.

Para corrigi-lo, você precisa de um usuário com privilégios appropiate. Normalmente, você tem um 'root'@'localhost' usuário e uma 'root'@'your-hostname'. Se você tiver sorte, 'root'@'your-hostname' ainda é bom. Afair, conexões MySQL funciona da seguinte forma: Se você conectar a localhost, você conectar como 'root'@'localhost' (não tenho certeza sobre 127.0.0.1, eu acho que também é 'root'@'localhost'). Se você se conectar a your-hostname, você conectar como 'root'@'your-hostname'. Se os privilégios deste usuário ainda estão ok, você pode atualizar os privilégios para 'root'@'localhost' e está feito.

Em seu comentário, você diz que não pode se conectar via 127.0.0.1 desde a tomada está em um lugar incomum. Eu acho que você interpretar mal o erro. IIRC você se conecta através do soquete se conectar a 'localhost', mas via TCP / IP se conectar a 127.0.0.1 ou your-hostname. Se tentativas mysql para conectar através da tomada e não pode encontrar o soquete (porque você não especificou o local correto), a mensagem de erro menciona onde mysql tentou encontrar o soquete. Sua mensagem de erro não. Eu acho que o erro é um erro de rede. Talvez você já começou o mysql-servidor com a opção --skip-networking, ou sua configuração especifica um bind-endereço incorreto. É preciso corrigir esse primeiro, caso contrário você não pode se conectar como 'root'@'your-hostname'.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top