Senha de root mysql do homebrew MacOSX

116

Por alguma razão, o MySQL parou de dar acesso ao root. Desinstalado e reinstalado com o Homebrew. Nova instalação, novas tabelas, mas quando eu entro

mysql -u root -p

Eu recebo este erro:

Acesso negado para o usuário 'root' @ 'localhost' (usando senha: NÃO)

Reinstalei o MySQL cinco vezes, mas ainda está pedindo uma senha. Como faço para corrigir isso?

Alisher Ulugbekov
fonte
Há quase uma pergunta exata no superusuário. Siga estas etapas: superuser.com/a/400345
Icarus
13
Basta executar mysql_secure_installatione responder às perguntas feitas, simples
Abhinav Singh
8
O comando mysql_secure_installation solicita uma senha de root; se você configurou e esqueceu, este procedimento não ajudará.
JohnG
1
Se o brew instalou o MySQL 5.7, siga estas etapas: stackoverflow.com/a/33924648/133106
mrucci
FWIW mysql -u roottrabalhou aqui ...
rogerdpack

Respostas:

115

Basta executar este comando (onde NEWPASSestá sua senha):

$(brew --prefix mysql)/bin/mysqladmin -u root password NEWPASS

Eu tive o mesmo erro e corrigi-lo desta forma.

Egermano
fonte
16
Funcionou para mim. Obviamente (talvez), o cifrão ($) deve ser inserido como parte do comando (não é apenas um prompt de shell).
horas de
2
@BrentFoust Claro. Eu estava eliminando a ambigüidade do uso do $char no início de um comando shell de linha de comando. Outros podem ficar confusos porque o $sinal é freqüentemente usado como um marcador de prompt de shell no SO e em outros fóruns. Mas a falta de espaço entre o $e (deve indicar às pessoas também.
fogão de
3
Eu recomendaria não incluir NEWPASS no comando para evitar o armazenamento no arquivo de histórico do shell. Esse comando pedirá entrada automaticamente se você executá-lo sem o passe, então não há razão para isso. :)
Levi Figueira
4
se estiver usando mariadb:$(brew --prefix mariadb)/bin/mysqladmin -u root password NEWPASS
bryceadams
8
Não está funcionando para mim, com mariadb (mesmo com a nota @bryceadams): / usr / local / opt / mariadb / bin / mysqladmin: erro de conexão com o servidor em 'localhost': 'Acesso negado para o usuário' root '@' localhost ' '
trainoasis em
110

Nenhum desses funcionou para mim. Acho que já tinha o mysql em algum lugar do meu computador, então uma senha foi definida lá ou algo assim. Depois de passar horas tentando todas as soluções disponíveis, isto funcionou para mim:

$ brew services stop mysql
$ pkill mysqld
$ rm -rf /usr/local/var/mysql/ # NOTE: this will delete your existing database!!!
$ brew postinstall mysql
$ brew services restart mysql
$ mysql -uroot

todo o crédito para @Ghrua

stackPusher
fonte
6
os posts anteriores não funcionaram para mim, mas este, embora destrutivo, funcionou muito bem.
Clay
1
quando você estiver logado no mysql, eventualmente, use ALTER USER 'root'@'localhost' IDENTIFIED BY 'YOURNEWPASSWORD';para definir sua nova senha de root.
Martin Braun de
Isso funcionou para mim sem excluir meu banco de dados existente
Mwirabua Tim
Finalmente uma solução adequada de trabalho. @ 2020 MacOs catalina.
Mindaugas Kurlys
Isso funcionou para mim quando a solução anterior não. Obrigado!
Les Brown
65

Caso você tenha inadvertidamente configurado e esquecido a senha de root, e não queira limpar todos os seus bancos de dados e começar de novo porque você é preguiçoso e esqueceu de ter uma solução de backup e está usando uma instalação bastante recente do Homebrew (Inverno de 2013), aqui estão as etapas para redefinir sua senha do MySQL.

Pare a instância do MySQL em execução

launchctl unload -w ~/Library/LaunchAgents/homebrew.mxcl.mysql.plist

Agora inicie o mysql manualmente, pulando as tabelas de permissões e rede

$(brew --prefix mysql)/bin/mysqld_safe --skip-grant-tables --skip-networking

Observe que se quando você executar echo $ (brew --prefix mysql) e ele não responder como "/ usr / local / opt / mysql" no bash, você precisará ajustar o caminho de acordo.

Depois de fazer isso, você deve ter uma instância do MySQL em execução e desprotegida.

Faça login e defina a senha

mysql -u root

No prompt, insira o seguinte comando MySQL para definir uma nova senha para o usuário afetado.

mysql> update mysql.user set password=PASSWORD('new_password_here') WHERE user='root';

Se tudo corresse como planejado, deveria dizer:

Query OK, 1 row affected (0.02 sec)
Rows matched: 4  Changed: 1  Warnings: 0

Saia do prompt do MySQL.

mysql> exit
Bye

Parar servidor:

mysqladmin -u root shutdown

Agora, vamos colocar de volta o daemon de inicialização para que tenhamos nosso MySQL pronto novamente:

launchctl load -w ~/Library/LaunchAgents/homebrew.mxcl.mysql.plist

Parabéns. Você acabou de redefinir sua senha de root do mysql. Sirva-se de um café e instale uma solução de reserva!

ablemike
fonte
5
Para parar o servidor MySQL desprotegido após alterar a senha:mysqladmin -u root shutdown
Vebjorn Ljosa
9
Acabei de encontrar esse problema e descobri que essa resposta é a mais próxima. Eu percebi que passwordnão era uma coluna válida no mysql 5.7.9. Em vez disso, tive que usar authentication_string. O resto das instruções funcionou perfeitamente. Obrigado!
M. Scott Ford
5
Como M. Scott Ford disse, o comando adequado é:update user set authentication_string=password('new_password_here') where user='root';
Panayotis
3
Eu tive que correr update mysql.user set authentication_string=password('none') where user='root';para que funcionasse. (Como o comentário acima de mim, mas preceder mysql.a user.)
Steve Meisner
2
A função de senha foi removida desde o mysql 8.0.11. detalhes mais
chancyWu 01 de
62

Eu tive o mesmo problema alguns dias atrás. Acontece quando você instala mysqlvia homebrewe executa o script de inicialização ( mysql_install_db) antes de iniciar omysql daemon.

Para corrigir isso, você pode excluir mysqlarquivos de dados, reiniciar o serviço e, em seguida, executar o script de inicialização:

launchctl unload -w ~/Library/LaunchAgents/homebrew.mxcl.mysql.plist
rm -r /usr/local/var/mysql/
launchctl load -w ~/Library/LaunchAgents/homebrew.mxcl.mysql.plist
unset TMPDIR
mysql_install_db --verbose --user=`whoami` --basedir="$(brew --prefix mysql)" --datadir=/usr/local/var/mysql --tmpdir=/tmp
Britto
fonte
funcionou perfeitamente para mim. Na verdade, não quero definir uma senha para minha máquina local, então as outras soluções não são realmente o que estou procurando
brad
3
mysql_install_db está obsoleto, considere usarmysqld --initialize
Brian
1
Eu só entendo No such file or directoryquando executo o primeiro comando.
Agente Zebra
1
após executar o comando mysqld --initialize, você notará na mensagem de log do console que ele definiu uma senha temporária para o usuário root .. copie e use a senha para a próxima vez que você disparar o comando "mysql -uroot -p" - Definitivamente funcionará. .e
Vikrant Labde
@VikrantLabde "Com certeza funcionará" - declaração muito ambiciosa. Tentei fazer isso, usei a senha temporária fornecida, mas ainda não concedeu acesso. Você teve que escapar de alguma pontuação com uma barra invertida?
Max Goodridge
47

Recebi este erro após instalar o mysql via home brew.

Portanto, primeiro remova a instalação. Em seguida, reinstale via Homebrew

brew update
brew doctor
brew install mysql

Em seguida, reinicie o serviço mysql

 mysql.server restart

Em seguida, execute este comando para definir sua nova senha de root.

 mysql_secure_installation

Finalmente, ele pedirá para recarregar os privilégios. Diga sim. Em seguida, faça login no mysql novamente. E use a nova senha que você definiu.

mysql -u root -p
Nirojan Selvanathan
fonte
1
Esta é a solução perfeita. Já tinha tentado correr, mysql_secure_installationmas a parte principal eramysql.server restart
Johan
mysql_secure_installation foi a peça chave
Nik
Para evitar a dor de cabeça ... basta digitar usar o comando de reinicialização como diz nirojan, e executar
mysql_secure_installation
13

Se você correr

brew install mariadb
...
brew services start mariadb
==> Successfully started `mariadb` (label: homebrew.mxcl.mariadb)

 $(brew --prefix mariadb)/bin/mysqladmin -u root password newpass
/usr/local/opt/mariadb/bin/mysqladmin: connect to server at 'localhost' failed
error: 'Access denied for user 'root'@'localhost''

também o login com conta root falha:

mariadb -u root
ERROR 1698 (28000): Access denied for user 'root'@'localhost'

então, o usuário admin padrão é criado com o mesmo nome de usuário da sua conta do MacOS , por exemplo, johnsmit .

Para fazer o login como root, emita:

mariadb -u johnsmit
Welcome to the MariaDB monitor.  Commands end with ; or \g.
Your MariaDB connection id is 17
Server version: 10.4.11-MariaDB Homebrew

Copyright (c) 2000, 2018, Oracle, MariaDB Corporation Ab and others.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

MariaDB [(none)]> exit
Bye
Arunas Bartisius
fonte
O nome da conta do MacOS fez isso por mim.
Dan
posso adicionar uma senha para o usuário de nome de conta macos?
OrigamiEye
7

Isso funcionou para mim:

sudo mysql -u root
Béatrice Cassistat
fonte
4

Acabei de notar algo comum à maioria das respostas aqui e confirmei em minha nova instalação. É realmente óbvio se você olhar as recomendações para executar mysqladmin -u rootsem-p .

Não há senha.

Brew configura o mysql com apenas um usuário root e nenhuma senha. Isso faz sentido, eu acho, mas as advertências pós-instalação nem mencionam isso.

Spyder
fonte
2
Eu tive o problema de acesso negado assumindo nenhuma senha de root, então não acho que o problema seja óbvio.
Jack Frost
Não estou dizendo que o problema é óbvio; para quem já usou o MySQL em circunstâncias normais é totalmente confuso. Mas olhando para as outras respostas, o motivo é claro.
Spyder
3

Tente sudoevitar o erro "Acesso negado":

sudo $(brew --prefix mariadb)/bin/mysqladmin -u root password NEWPASS

Matias Miranda
fonte
2
  1. vá para o ícone da apple -> preferências do sistema
  2. abrir o Mysql
  3. em alguns casos, você verá "inicializar banco de dados"
  4. clique nisso
  5. você será solicitado a definir a senha do root -> definir uma senha forte lá
  6. use essa senha para entrar no mysql da próxima vez

Espero que isto ajude.

user3325650
fonte
Maneira simples e fácil. Obrigado.
Ezequiel França
2

Como a pergunta foi feita / respondida há muito tempo, essas respostas principais não funcionam para mim. Aqui está minha solução, em 2020.

Histórico : Fresh mysql / mariadb instalado por homebrew.

Problema : a senha do root não está vazia e é desconhecida.

A correção :

  1. mysql -u SEU NOME DE USUÁRIO DO SISTEMA -p
  2. A senha está vazia (pressione Enter)
  3. ALTER USER 'root' @ 'localhost' IDENTIFICADO POR 'NEW-ROOT-PASSWORD';
  4. FLUSH PRIVILEGES;

O motivo :

  1. O Homebrew criará um usuário com privilégios de root nomeado pelo nome de usuário atual do MacOS.
  2. não tem senha
  3. Uma vez que tem todos os privilégios, apenas redefina a senha de root com esse usuário.
  4. A senha inicial para root foi gerada aleatoriamente.
Shiji.J
fonte
2020 resposta correta. Não consigo pedir uma senha para o nome de usuário do MacOS
OrigamiEye
1

Executar essas linhas no terminal funcionou para mim e para várias outras pessoas que tiveram o mesmo problema. Essas instruções são listadas no terminal após o brew instalar o mysql com sucesso.

mkdir -p ~/Library/LaunchAgents

cp /usr/local/Cellar/mysql/5.5.25a/homebrew.mxcl.mysql.plist ~/Library/LaunchAgents/

launchctl load -w ~/Library/LaunchAgents/homebrew.mxcl.mysql.plist

/usr/local/Cellar/mysql/5.5.25a/bin/mysqladmin -u root password 'YOURPASSWORD'

onde YOURPASSWORDé a senha do root.

Erin
fonte
Eu só entendo No such file or directoryquando executo esses comandos
Agente Zebra
1

Verifique se você não tem um .my.cnf escondido em seu homedir. Esse era o meu problema.

user8845989
fonte
1

Isso funcionou para mim para o MAC https://flipdazed.github.io/blog/osx%20maintenance/set-up-mysql-osx

Inicie o mysql executando

brew services iniciar mysql

Execute o script de instalação

mysql_secure_installation

Você será solicitado a definir um plugin de configuração VALIDATE PASSWORD. Digite y para fazer isso.

Selecione a validação de senha necessária (realmente não importa se é apenas você usando o banco de dados)

Agora selecione y para todas as opções restantes: Remover anon. Comercial; proibir logins de root remotos; remover banco de dados de teste; recarregar tabelas de privilégios. Agora você deve receber uma mensagem de

All done!

Katie Lee
fonte
para iniciar o mysql 5.7, use stackoverflow.com/questions/51573145/…
Adam Winnipass
1

Isso funcionou para mim. Espero que isso funcione para você também !!! Siga-os.

brew services stop mysql
pkill mysqld
# NB: the following command will REMOVE all your databases!
# Make sure you have backups or SQL dumps if you have important data in them already.
rm -rf /usr/local/var/mysql/
brew services restart mysql

mysql -uroot
UPDATE mysql.user SET authentication_string=null WHERE User='root';
FLUSH PRIVILEGES;
exit;

mysql -u root 
ALTER USER 'root'@'localhost' IDENTIFIED WITH caching_sha2_password 
BY'YOUR_PASS_WORD!!!!';
heyfranksmile
fonte
2
Você tem que avisar que, a execução do rm -rf /usr/local/var/mysql/comando excluirá todos os bancos de dados e dados do Mysql em seu computador!
Lashae
0

A senha padrão quando você instala o mysql via brew é root, tente isso, funcionou para mim

mysql -uroot -proot

user3805033
fonte
1
De brew info mysql: Instalamos seu banco de dados MySQL sem uma senha de root. Para protegê-lo, execute: mysql_secure_installation
ssc
@ssc A melhor maneira de definir uma senha em uma instalação limpa.
alexventuraio
0

Terminal 1:

$ mysql_safe

Terminal 2:

$ mysql -u root
mysql> UPDATE mysql.user SET Password=PASSWORD('new-password') WHERE User='root';
mysql> FLUSH PRIVILEGES;
mysql> quit
Dnyanesh Ghadge
fonte
Isso pode ter funcionado no momento em que a resposta foi postada, mas quebrou nesse meio tempo; com o (atual) MySQL versão 5.7.21, ele falha com `Coluna desconhecida 'Senha' em 'lista de campos'`.
ssc
ATUALIZAR mysql.user SET authentication_string = PASSWORD ('xxxxxx!') WHERE Usuário = 'root';
kevinc
0

Estou usando Catalina e uso este mysql_secure_installationcomando e agora funciona para mim:

$ mysql_secure_installation
NOTE: RUNNING ALL PARTS OF THIS SCRIPT IS RECOMMENDED FOR ALL MariaDB
      SERVERS IN PRODUCTION USE!  PLEASE READ EACH STEP CAREFULLY!

In order to log into MariaDB to secure it, we'll need the current
password for the root user. If you've just installed MariaDB, and
haven't set the root password yet, you should just press enter here.

Enter current password for root (enter for none): << enter root here >>

eu entro rootcomo senha atual

OK, successfully used password, moving on...

Setting the root password or using the unix_socket ensures that nobody
can log into the MariaDB root user without the proper authorisation.

e fazer o resto

Agus Sudarmanto
fonte
0

Então, caso alguém tenha a mesma situação e configuração que eu e também esteja prestes a enlouquecer - funcionou para mim .

Depois de uma longa história, eu tinha um MariaDB instalado com o brew que reiniciava automaticamente quando eu matei seu processo (isso foi feito pelo brew), que tinha uma senha de root, o que eu fiz não conhecia.

$ brew services list

Isso mostra algo como:

mariadb started jdoe /path/to/homebrew.mxcl.mariadb.plist

Pare o servidor MySQL com:

$ brew services stop mariadb

Então comece novamente sem o usuário root (e sem usar brew):

$ mariadbd --skip-grant-tables &

Aqui, mysql_secure_installationnão funcionou para mim por causa do --skip-grant-tables, e não funcionaria sem o --skip-grant-tablesporque precisava da senha (que eu não tinha).
Tentar $(brew --prefix mysql)/bin/mysqladmin -u root password hunter2apenas retornou erros estranhos e não fez nada;$(brew --prefix mariadb)/bin/mysqladmin -u root password hunter2também não funcionou, deu erros diferentes e sugestões que não funcionaram para mim.

Mas você pode entrar no mysql agora sem credenciais:$ mysql

Aqui, o método antigo de atualização da tabela do usuário para root não funciona porque a "coluna 'Senha' não é atualizável".
O novo método usos alter userMas só funciona depois de ter feito flush privileges;de modo que fazer em primeiro lugar.
Então:
MariaDB [(none)]> alter user 'root'@'localhost' identified by 'hunter2';
( MariaDB [(none)]>é o prompt do MySQL aqui)
Então faça flush privileges;novamente.
Saia do cliente MySQL.

Agora, no que diz respeito ao brew, MariaDB ainda não está funcionando, então use $ ps aux | grep -i mariadbpara encontrar o pid e $ kill -9 <pid>ele.
Em seguida, use $ brew services start mariadbpara reiniciá-lo.

MSpreij
fonte
-1

Use o arquivo init para iniciar o mysql para alterar a senha do root.

brew services stop mysql
pkill mysqld
echo "ALTER USER 'root'@'localhost' IDENTIFIED BY 'newRootPass';" > /tmp/mysql-init
$(brew --prefix mysql)/bin/mysqld --init-file=/tmp/mysql-init

Sua senha de root foi alterada. Certifique-se de desligar o servidor corretamente para salvar a alteração da senha. Na nova janela do terminal, execute

mysqladmin -u root -p shutdown

e insira seu novo passe.

Inicie seu serviço e remova o arquivo init

brew services start mysql
rm /tmp/mysql-init

Testado no mysql versão 8.0.19

Sten
fonte