Установите MySQL для Windows из .zip и сбросьте пароль root

8

Я хотел иметь на своем ПК (с Windows 8.1 x64) только сервер MySQL, без Workbench или чего-то еще. Поэтому я скачал .zipархив с dev.mysql.com/downloads . Это загрузка для Win64 на x86_64 версии 5.7.9 (MySQL Community Server (GPL)).

Я установил его как службу Windows, но mysqlбазы данных не было, только information_schema. Итак, я выполнил это:

mysql_upgrade.exe --upgrade-system-tables

И mysqlбазы данных были созданы. Но наряду с этим что-то случилось с пользователем root, потому что я больше не мог получить доступ mysql.

Поэтому я решил сбросить этот внезапно появившийся пароль (потому что до этого у меня его не было). В официальном руководстве я нашел следующее решение и запустил сервер следующим образом:

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

Затем я открыл mysqlбез пароля:

mysql.exe u root

А затем попытался сбросить пароль root:

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

Но я получил эту ошибку:

ОШИБКА 1131 (42000): вы используете MySQL в качестве анонимного пользователя, и анонимным пользователям запрещено изменять пароли ".

Что это? Как я аноним? Все команды были выполнены в cmd.exeрамках Администратора.

Что я должен сделать, чтобы сбросить пароль root в этой ситуации?

Обновление 1: я попытался проверить текущего пользователя:

SELECT USER(), CURRENT_USER();

Это дает:

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

Это странно, потому что я начал это так mysql.exe -u root.

Затем я проверил таблицу пользователей:

SELECT user FROM mysql.user;

Это дает:

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

Это еще более странно. Также нет поля пароля:

SELECT user, password FROM mysql.user;

ОШИБКА 1054 (42S22): неизвестный столбец «пароль» в «списке полей»

Поэтому я не могу изменить его пароль.

И я не могу создать нового пользователя:

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

ОШИБКА 1290 (HY000): Сервер MySQL работает с --skip-grant-tablesопцией, поэтому он не может выполнить этот оператор

Теперь я потерялся.

Обновление 2: я думаю, я сделал все неправильно с самого начала. Судя по всему, я как-то пропустил mysqld.exe --initializeкоманду.

Итак, вот как я установил MySQL из .zip-архива, благодаря @RolandoMySQLDBA :

  1. Распакуйте архив, подготовьте my.ini.
  2. Выполните mysqld.exe --initialize, получите временный пароль из .errфайла.
  3. Установите MySQL как сервис и запустите его

    mysqld --install MySQL --defaults-file="d:/path/to/mysql/my.ini"
  4. Подключитесь к нему mysql -u root -pс временным паролем.

  5. Изменить временный пароль:

    ALTER USER 'root'@'localhost' IDENTIFIED BY 'NEWPASSWORD';
retif
источник

Ответы:

6

Поскольку вы начали mysqldс --skip-grant-tables , вы не можете выполнять какие-либо стандартные команды GRANT , REVOKE или SET PASSWORD . Несмотря на это, вы можете изменить пароль root@localhostследующим образом:

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

Затем перезапустите mysqld, и вы снова в деле.

Что касается того, что вы анонимны, если вы войдете прямо сейчас и запустите

SELECT USER() HowYouAttemptedToLogin,CURRENT_USER() HowYouWereAllowedToLogin;

Вы заметите, что у вас HowYouWereAllowedToLoginбудет пустое имя пользователя и какой-нибудь хост.

ДАЙТЕ ЭТО ПОПРОБУЙТЕ !!!

ОБНОВЛЕНИЕ 2015-11-17 16:24 EST

Столбец, известный как passwordin, mysql.userбольше не существует в MySQL 5.7.

Это было переименовано authentication_string.

Правильный подход

То, что вы должны были сделать, это запустить

mysqld --initialize

Это создаст папку данных для вас.

Корню @ localhost был назначен временный пароль, который отображается в файле ошибок, начиная со следующей даты и времени

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

Вы можете войти с ним и затем запустить ALTER USER

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

См. Документацию по MySQL 5.7 для SET PASSWORD

RolandoMySQLDBA
источник
Спасибо за ответ. Да, я знаю о таких ограничениях. Но это шаги из руководства MySQL. И я попытался следовать вашим инструкциям, пожалуйста, смотрите мой отредактированный вопрос.
retif
В mysql.user больше нет столбца пароля, поэтому этот метод больше никогда не будет работать. Однако в настоящее время другие методы (через --skip-grant-tables и --init-file) не работают, поэтому вы не можете сбросить пароли в 5.7.9 атм.
Майк Лишке
@MikeLischke Спасибо. Мне нужно удалить этот ответ
RolandoMySQLDBA
@MikeLischke Я только что понял, что passwordколонка была переименована authentication_string.
RolandoMySQLDBA
Что ж, собственно изменение пользовательской таблицы напрямую ушло в прошлое и уйдет, но даже использование стандартных команд (таких как alter user) не работает, потому что в настоящее время им отказывают, так как считается, что вы анонимный пользователь, что запрещено выполнить эти команды (если вы запустили сервер с --skip-grant-tables или --init-file). Однако опция --initialize является правильным способом сброса корневого pw.
Майк Лишке