Як змінити MySQL 'root' пароль за допомогою 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в безпечному режимі. тоді ви можете змінити кореневий пароль
Mongrel

Для всіх, хто читає цю тему. MySQL 5.7 суттєво змінився під кришкою. Будь ласка, прочитайте про них перед оновленням.
Rui F Ribeiro

Відповіді:


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 для посилання на аутентифікацію. Я також нещодавно дізнався про це після оновлення до 5.7
Rui F Ribeiro

4
Хоча ця відповідь не спрямована повністю на цю відповідь, ще одна альтернатива для 5.7SET PASSWORD FOR 'root' = PASSWORD('new_password');
Rui F Ribeiro

1
@RuiFRibeiro спасибі, оновив мою відповідь
Рахул

1
Рахул спочатку я відредагував тему пізніше 5.7, але потім змінив її на MySQL 5.7, щоб більше дотримуватися духу питання. наприклад, @Shivu не знав, що це зміна 5.7.
Rui F Ribeiro

1
Це спосіб постановки питання. Ми не редагуємо питання та відповіді лише на користь ОП, але й для інших пізніше.
Rui F Ribeiro

2

Спосіб зміни пароля - MySQL SET PASSWORD

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

дивіться MySQL 5.7 Довідковий посібник / ... / SET PASSWORD Syntax

Оператор 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, але й заважатимуть вам помилитися (звичайно, пам’ятайте, що встановити режим sql «NO_AUTO_CREATE_USER»). Вони навіть зазвичай непогано працюють у ворожому середовищі MyISAM, як кластер Galera.

Перестаньте використовувати ПРИГОТОВКИ ПРИМІТКИ

Будь ласка , використовуйте 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, ви пропустили директиву щодо пароля.
Rui F Ribeiro

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 premium у помилці візуальної операції: Невідомий стовпець "пароль" у "Списку полів", програмне забезпечення саме використовує пароль, так що я не можу легко працювати. Тому я корінь у командний рядок бази даних, запускаю

Use mysql;

А потім змініть ім'я поля:

ALTER TABLE user CHANGE authentication_string password text;

Адже нормально.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.