Как изменить «root» пароль MySQL с помощью MySQL v5.7?

14

Текущая среда:

mysql> show variables like "%version%";
+-------------------------+------------------------------+
| Variable_name           | Value                        |
+-------------------------+------------------------------+
| innodb_version          | 5.7.13                       |
| protocol_version        | 10                           |
| slave_type_conversions  |                              |
| tls_version             | TLSv1,TLSv1.1                |
| version                 | 5.7.13                       |
| version_comment         | MySQL Community Server (GPL) |
| version_compile_machine | x86_64                       |
| version_compile_os      | Linux                        |
+-------------------------+------------------------------+
8 rows in set (0.01 sec)

Пароль Изменить команду пользователя:

mysql> update user set password=PASSWORD("XXXX") where user="root";
ERROR 1054 (42S22): Unknown column 'password' in 'field list'

Я что-то пропустил?

Шиву Р.Х.
источник
попробуйте запустить mysqlв безопасном режиме. тогда вы можете изменить пароль root
Mongrel
Всем, кто читает эту ветку. MySQL 5.7 имеет существенные изменения под капотом. Пожалуйста, прочитайте о них перед обновлением.
Руи Ф Рибейро

Ответы:

24

В MySQL 5.7 passwordполе в поле mysql.userтаблицы было удалено, теперь имя поля authentication_string.

Сначала выберите базу данных:

mysql> use mysql;

А затем покажите таблицы:

mysql> show tables;

Вы найдете userтаблицу и увидите ее поля:

mysql> describe user;

Вы поймете, что нет названного поля password, поле пароля названо authentication_string. Итак, просто сделайте это:

update user set authentication_string=password('XXXX') where user='root';

Как предлагает @Rui F Ribeiro, вы также можете запустить:

mysql> SET PASSWORD FOR 'root' = PASSWORD('new_password');
Рахул
источник
1
+1 для ссылки authentication_string. Я также недавно узнал об этом после обновления до 5.7
Руи Ф. Рибейро
4
Хотя он не направлен полностью на этот ответ, другой вариант для 5.7SET PASSWORD FOR 'root' = PASSWORD('new_password');
Руи Ф. Рибейро
1
@RuiFRibeiro спасибо, обновил мой ответ
Рахул
1
Rahul Первоначально я отредактировал поток до более поздней версии, чем 5.7, но затем изменил его на использование MySQL 5.7, чтобы больше соответствовать духу вопроса. например, @Shivu не знал, что это изменение в 5.7.
Руи Ф Рибейру
1
Это способ сформулировать вопрос. Мы не редактируем вопросы и ответы только для пользы ОП, но и для других позже.
Руи Ф Рибейро
2

MySQL способ изменить пароль SET PASSWORD

SET PASSWORD FOR 'root' = PASSWORD('new_password');

см. Справочное руководство по MySQL 5.7 / ... / Синтаксис SET PASSWORD

Инструкция SET PASSWORD назначает пароль для учетной записи пользователя MySQL, указанный в виде открытого текста (незашифрованного) или зашифрованного значения:

'auth_string' represents a cleartext password.

'hash_string' represents an encrypted password.

Принятый ответ от Рахула показывает, как обновить пароль с DMLзаявлением.

update user set authentication_string=password('XXXX') where user='root';

Предупреждение: это не официальный и поддерживаемый способ. Это может вызвать проблемы, если вы не знаете, что делаете. Не стоит забывать FLUSH PRIVILEGES.

Для большинства операций, таких как создание пользователя, изменение его привилегий или изменение его пароля, вы захотите использовать высокоуровневые операторы. Они не только более просты в использовании и совместимы с большим количеством версий MySQL, но они также предотвратят ваши ошибки (конечно, не забудьте установить режим «NO_AUTO_CREATE_USER» sql). Они даже обычно хорошо работают в среде, враждебной MyISAM, такой как кластер Galera.

Прекратите использовать FLUSH PRIVILEGES

Пожалуйста , используйте GRANT, REVOKE, SET PASSWORD, или , RENAME USERа не прямые заявления DML.

Обновление: синтаксис SET PASSWORD ... = PASSWORD ('auth_string') устарел с MySQL 5.7.6 и будет удален в следующем выпуске MySQL.

Иванов
источник
1

mysqladmin -u user-name password -p "oldpassword" "newpass"

если вы можете войти, попробуйте это не ""будет работать попробуйте ''одинарную цитату

update user set password=PASSWORD("newpass") where User='ENTER-USER-NAME-HERE';

дворняжка
источник
Хотя я предпочитаю ответ mysqladmin, см. Ответ Рахула. Ваш SQL-запрос устарел. Я исправил mysqladmin, вы пропустили директиву пароля.
Руи Ф Рибейро
1
Спасибо Рибейро. Я пропустилauthentication_string
дворняга
0

В моем случае

mysql.server start
$ mysql -uroot
mysql> update user set authentication_string=password('123456') where User='root';
mysql> exit;
mysql.server restart (if you not restart , connection will not work.)

Поэтому я думаю, что ваша команда обновления верна, но вам нужно перезапустить сервер MySQL.

Джек Л.И.
источник
-1

Для этой проблемы я использовал простой и грубый метод, переименуйте имя поля в пароль, причина в том, что я использую премиум-программное обеспечение mac navicat при визуальной ошибке операции: Неизвестный столбец «пароль» в поле «Список», Само программное обеспечение использует пароль, поэтому я не могу легко работать. Поэтому я рутаюсь в командную строку базы данных, запускаю

Use mysql;

А затем измените имя поля:

ALTER TABLE user CHANGE authentication_string password text;

Ведь нормально.

luyishisi
источник