Como redefinir ou recuperar a senha da conta de administrador do MySQL?

14

Eu tenho um banco de dados MySQL que "herdei" e não recebi as credenciais de administrador. No entanto, tenho acesso à caixa em que é executado. Existe uma maneira de recuperar as credenciais de administrador ou criar novas?

slolife
fonte

Respostas:

15

Leia e execute o capítulo sobre redefinição da senha root no Manual de Referência do MySQL.

Este procedimento inicia o daemon mysql sem autorização, permitindo que você se conecte sem fornecer credenciais. Nesse modo, você pode conectar-se normalmente e redefinir senhas e concessões. Depois não esqueça de iniciar o mysql novamente com a devida autorização.

David Schmitt
fonte
6

Se esta é uma caixa Debian / Ubuntu, existe uma conta equivalente equivalente a raiz chamada debian-sys-maint . Você pode ler a senha em /etc/mysql/debian.cnf

Usando essa senha, você pode efetuar login no mysql como debian-sys-maint usando:

mysql --defaults-file=/etc/mysql/debian.cnf mysql

Depois de fazer login, faça o seguinte:

update user set password=password('<new password>') where user='root';
flush privileges;
quit;

o root agora deve estar acessível usando sua nova senha:

mysql -uroot -p
Brent
fonte
3

Meu usuário root não existia. Em

CREATE USER root@localhost;

Eu tenho

ERROR 1290 (HY000): The MySQL server is running with the --skip-grant-tables option so it cannot execute this statement

A solução foi

mysqld_safe  --skip-grant-tables &
mysql
INSERT INTO user (Host,User,Password) VALUES ('localhost', 'root', 'changethispassword');
UPDATE mysql.user SET Grant_priv='Y', Super_priv='Y' WHERE User='root';
FLUSH PRIVILEGES;

Depois disso, adicionei todos os privs, um por um, com uma pequena ajuda disso:

mysql mysql -e "SELECT * FROM user WHERE User='root'\G"|grep N

(e este poderia e deveria ser automatizado mais)

Nota: encontrar o número correto de 'Y's no INSERTé uma PITA.

kqw
fonte
0

Como as etapas do Manual de Referência do MySQL não são muito claras, estou tentando responder aqui em uma linguagem mais fácil. (esta resposta é relevante para usuários do MacBook OSX):

  1. Como não sabemos a senha atual, o servidor MySQL precisa executar ignorando / ignorando as credenciais de login atuais. Instrua o servidor MySQL a ignorar a tabela de concessões de acesso:
    • Pare o servidor MySQL (se já estiver em execução).
    • Encontre o seu arquivo de configuração do MySQL my.cnf,. (Para mim, foi colocado @ /Applications/XAMPP/xamppfiles/etc. Você pode pesquisar apenas se não conseguir encontrá-lo).
    • Abra o my.cnfarquivo em qualquer editor de texto.
    • Adicione "skip-grant-tables"(sem aspas) no final da [mysqld]seção e salve o arquivo.
    • Agora inicie seu servidor MySQL. Vai começar com a skip-grant-tablesopção.
  2. Aberto TerminalmysqlComando e Executar
  3. Executar comando mysql> UPDATE mysql.user SET Password=PASSWORD('MyNewPass') WHERE User='root';
  4. Executar comando mysql> FLUSH PRIVILEGES;
  5. Executar comando mysql> exit
  6. Reinicie o servidor MySQL.
Saurabh Hooda
fonte