Як змінити 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.