Instale o MySQL para Windows a partir de .zip e redefina a senha root

8

Eu queria ter no meu PC (com Windows 8.1 x64) apenas o servidor MySQL, sem o Workbench ou algo assim. Então, eu baixei o .ziparquivo em dev.mysql.com/downloads . É um download para o Win64 no x86_64 versão 5.7.9 (MySQL Community Server (GPL)).

Instalei-o como um serviço do Windows, mas não havia mysqlbanco de dados, apenas information_schema. Então eu executei isso:

mysql_upgrade.exe --upgrade-system-tables

E mysqlbancos de dados foram criados. Mas junto com isso aconteceu algo com o usuário root, porque eu não conseguia mysqlmais acessar .

Então, eu decidi redefinir essa senha que apareceu de repente (porque eu não a tinha antes disso). Eu fundei a seguinte solução no manual oficial, iniciei o servidor assim:

mysqld.exe --skip-grant-tables --console

Então eu abri mysqlsem senha:

mysql.exe u root

E, em seguida, tentei redefinir a senha root:

SET PASSWORD FOR 'root'@'localhost' = PASSWORD(‘passhere');

Mas eu recebi este erro:

ERRO 1131 (42000): Você está usando o MySQL como usuário anônimo e usuários anônimos não têm permissão para alterar senhas ".

O que é isso? Como sou anônimo? Todos os comandos foram executados cmd.exesob o administrador.

O que devo fazer para redefinir a senha root nesta situação?

Atualização 1: tentei verificar o usuário atual:

SELECT USER(), CURRENT_USER();

Isso dá:

+--------+----------------+
| USER() | CURRENT_USER() |
+--------+----------------+
| root@  | @              |
+--------+----------------+

Isso é estranho, porque eu comecei assim mysql.exe -u root.

Então eu verifiquei a tabela de usuários:

SELECT user FROM mysql.user;

Isso dá:

+-----------+
| user      |
+-----------+
| mysql.sys |
+-----------+

Isso é ainda mais estranho. Também não há campo de senha:

SELECT user, password FROM mysql.user;

ERRO 1054 (42S22): coluna desconhecida 'senha' na 'lista de campos'

Portanto, não posso alterar sua senha.

E não consigo criar um novo usuário:

CREATE USER 'root'@'localhost' IDENTIFIED BY 'passhere';

ERRO 1290 (HY000): O servidor MySQL está sendo executado com a --skip-grant-tablesopção, portanto, não pode executar esta instrução

Agora estou perdido.

Atualização 2: Eu acho que fiz tudo errado desde o início. Aparentemente, eu perdi um mysqld.exe --initializecomando de alguma forma.

Então, é assim que eu instalei o MySQL a partir do arquivo .zip, graças a @RolandoMySQLDBA :

  1. Descompacte o arquivo, prepare my.ini.
  2. Execute mysqld.exe --initialize, obtenha a senha temporária do .errarquivo.
  3. Instale o MySQL como um serviço e execute-o

    mysqld --install MySQL --defaults-file="d:/path/to/mysql/my.ini"
  4. Conecte-se a ele mysql -u root -pcom senha temporária.

  5. Mude a senha temporária:

    ALTER USER 'root'@'localhost' IDENTIFIED BY 'NEWPASSWORD';
retif
fonte

Respostas:

6

Desde que você começou mysqldcom --skip-grant-tables , não é possível executar nenhum comando GRANT , REVOKE ou SET PASSWORD padrão . Não obstante, você pode alterar a senha da root@localhostseguinte maneira:

UPDATE mysql.user SET password=PASSWORD(‘passhere') WHERE user='root' and host='localhost';

Então, reinicie o mysqld e você estará de volta aos negócios.

Quanto ao seu anonimato, se você fizer o login agora e executar

SELECT USER() HowYouAttemptedToLogin,CURRENT_USER() HowYouWereAllowedToLogin;

Você notará que HowYouWereAllowedToLoginele terá um nome de usuário em branco e algum host.

DE UMA CHANCE !!!

ATUALIZAÇÃO 17/11/2015 16:24 EST

A coluna conhecida como passwordin mysql.userjá não existe no MySQL 5.7.

Foi renomeado authentication_string.

Abordagem adequada

O que você deveria ter feito é executar

mysqld --initialize

Isso criaria a pasta de dados para você.

A raiz @ localhost recebeu uma senha temporária, visível no arquivo de erro, começando com o seguinte datetime e string

2015-11-17T20:56:02.175980Z 1 [Note] A temporary password is generated for root@localhost:

Você pode fazer login com ele e depois executar ALTER USER

mysql> ALTER USER 'root'@'localhost' IDENTIFIED BY 'new_password';

Veja a documentação do MySQL 5.7 em SET PASSWORD

RolandoMySQLDBA
fonte
Obrigado pela resposta. Sim, estou ciente dessas restrições. Mas estas são as etapas do manual do MySQL. E tentei seguir suas instruções. Consulte minha pergunta editada.
retif 29/10/2015
Não há mais coluna de senha no mysql.user, portanto esse método nunca funcionará novamente. No entanto, atualmente também os outros métodos (via --skip-grant-tables e --init-file) estão quebrados, portanto você não pode redefinir senhas no 5.7.9 atm.
Mike Lischke
@MikeLischke Obrigado. Eu preciso excluir esta resposta
RolandoMySQLDBA
@ MikeLischke Acabei de perceber que a passwordcoluna foi renomeada authentication_string.
RolandoMySQLDBA
Bem, modificar a tabela do usuário diretamente é coisa do passado e desaparecerá, mas mesmo usando comandos padrão (como alterar usuário) não funcionam porque atualmente eles são recusados, já que você é considerado um usuário anônimo, o que não é permitido. para emitir esses comandos (se você iniciou o servidor com --skip-grant-tables ou --init-file). A opção --initialize, no entanto, é a maneira correta de redefinir o pw raiz.
Mike Lischke