Термін дії пароля Mysql закінчився. Не вдається підключитися


87

Я просто витер свій Mac і зробив нову інсталяцію El Capitan. Зараз я намагаюся підключитися до Mysql. Пройшовши процес налаштування веб-сервера, я створив простий тестовий файл PHP:

<?php
  $conn = new mysqli("127.0.0.1", "root", "xxxxxxxx");
  if ($conn->connect_error) echo "Connection failed: " . $conn->connect_error; 
  else echo "Connected successfully";
  phpinfo();
?>

Коли я запускаю його, я отримую таку помилку:

Warning: mysqli::mysqli(): (HY000/1862): Your password has expired. To log in you must change it using a client that supports expired passwords. in /Users/rich/Documents/DESIGN/test/index.php on line 3
Connection failed: Your password has expired. To log in you must change it using a client that supports expired passwords.

Я ніколи раніше не бачив такої відповіді від з'єднання. Як це виправити, якщо не вдається підключитися?

РЕДАГУВАТИ

У терміналі я ввів команду:

mysql -u root -p

Це запитало мене для мого пароля (поточного), який я ввів. Тепер я маю доступ до команд mysql, але все, що я спробую, призводить до цієї помилки:

ERROR 1820 (HY000): You must reset your password using ALTER USER statement before executing this statement.

Як скинути пароль за допомогою ALTER USER?


У мене така ж проблема.
— Рохан Санап,

це насправді дратує, що через це можна
— відключити

1
Спробуйте бігти/usr/local/mysql/bin/mysqladmin -u root -p password
— Коннор Ліч

1
@ConnorLeech годинами намагався скинути root-пароль, для якого MariaDB закінчився додому, але він це виправив - дякую!
— Алекс Холсгров

Відповіді:


179

Тож я нарешті сам знайшов рішення.

Спочатку я зайшов у термінал і набрав:

mysql -u root -p

Це запитало мій поточний пароль, який я ввів, і це дало мені доступ для надання більше команд mysql. Все, що я спробував звідси, дало цю помилку:

ERROR 1820 (HY000): You must reset your password using ALTER USER statement before executing this statement.

Це бентежить, тому що я насправді не міг побачити спосіб скидання пароля за допомогою ALTER USERоператора, але я знайшов інше просте рішення:

SET PASSWORD = PASSWORD('xxxxxxxx');


Чи правильно це працювало? Чи дало це помилку після подальшого виконання цих кроків?
— Рохан Санап,

Дуже дякую! Це спрацювало і у мене. Врятував мене багато годин.
— TBJ

5
Я використовую версію 5.7.9 MySQL, і це застаріло, оскільки це повідомлення про помилку з командного рядка MySQL повідомляє нам: Попередження (Код 1287): 'SET PASSWORD = PASSWORD (' <plaintext_password> ')' застаріло і буде видалено в майбутній випуск. Будь ласка, використовуйте SET PASSWORD = '<plaintext_password>'
— Fabiano

Мені шкода, що це не спрацювало для мене, але користувач зміни, опублікований Петром Н., працював. Можливо, працює на іншій версії MySQL.
— розробник MG

89

По-перше, я використовую:

 mysql -u root -p

Надання мого поточного пароля для 'root'. Далі:

mysql> ALTER USER `root`@`localhost` IDENTIFIED BY 'new_password',
       `root`@`localhost` PASSWORD EXPIRE NEVER;

Перейдіть 'new_password'на новий пароль для користувача "root".
Це вирішило мою проблему.


3
Помилка отримання: ПОМИЛКА 1064 (42000): у вас є помилка в синтаксисі SQL; перевірте інструкцію, яка відповідає вашій версії сервера MySQL, на правильний синтаксис для використання біля 'USER' root '@' localhost 'ІДЕНТИФІКОВАНО' newPassword ',' root '@' localhost 'PASSWORD' у рядку 1
— Ketav Chotaliya

Це добре працювало. ЗМІНИТИ КОРИСТУВАЧА 'username' @ '%' ІДЕНТИФІКОВАНО 'your_password', 'user' @ '%' ПАРОЛЬ НІКОЛИ ТЕРМІНУЄТЬСЯ;
— TheLegendaryCopyCoder

1
Помилка отримання: ERROR 1805 (HY000): Column count of mysql.user is wrong. Expected 45, found 46. The table is probably corrupted
— Pulkit Pahwa

52

mysqladmin -u [username] -p passwordпрацював у мене на OS X El Capitan та MySQL 5.7.12 Community Server. Приклад:

$ /usr/local/mysql/bin/mysqladmin -u root -p password
Enter password:
New password:
Confirm new password:
Warning: Since password will be sent to server in plain text, use ssl connection to ensure password safety.

Це схоже на відповідь pavan sachi, але з підказками щодо пароля.

Моя помилка: "# 1862 - Ваш термін дії пароля закінчився. Щоб увійти, його потрібно змінити за допомогою клієнта, який підтримує термін дії паролів, термін дії якого минув" на екрані входу phpMyAdmin вперше.


Працювали і у мене, OS X El Capital та MySQL 5.17.13! Дякую за це!
— Zeke

5
Варто зазначити, що слово "пароль" не є заповнювачем , тоді як "root" - це ім'я користувача, якого ви хочете оновити:mysqladmin -u [username] -p password
— random_user_name

Це єдине, що (мабуть) працювало для мене в Linux (Fedora 25). Дякую.
— Avinash Meetoo

Алілуя !! найкраще. команди. ніколи. Я дивився скрізь, але це нарешті вирішило це. Щиро дякую
— Коннор Ліч

19

Термін дії пароля MySQL

Скидання пароля вирішить проблему лише тимчасово. З MySQL 5.7.4 до 5.7.10 (для підвищення рівня безпеки - див. MySQL: Політика закінчення терміну дії пароля ) default_password_lifetimeзначенням змінної за замовчуванням є 360 (1 рік). У цих версіях, якщо ви не внесете змін до цієї змінної (або до окремих облікових записів користувачів), усі паролі закінчуються через 360 днів.

Тож із сценарію ви можете отримати повідомлення: "Ваш пароль закінчився. Для входу ви повинні змінити його за допомогою клієнта, який підтримує прострочені паролі."

Щоб зупинити автоматичний термін дії пароля, увійдіть як root ( mysql -u root -p), а потім для клієнтів, які автоматично підключаються до сервера (наприклад, скрипти), змініть параметри закінчення терміну дії пароля:

ALTER USER 'script'@'localhost' PASSWORD EXPIRE NEVER;

АБО ви можете відключити автоматичне закінчення терміну дії пароля для всіх користувачів :

SET GLOBAL default_password_lifetime = 0;

Як зазначав Мертейдін у коментарях, щоб зробити цей постійний додайте наступний рядок до my.cnfфайлу, який MySQL читає під час запуску, під [mysqld]групою налаштувань. Розташування my.cnfзалежить від ваших налаштувань (наприклад, Windows, або Homebrew в OS X, або інсталятора), і від того, чи потрібно вам це для кожного користувача в Unix або глобально:

[mysqld] default_password_lifetime = 0 (Тут також можуть бути інші налаштування ...)

Перегляньте документи MySQL щодо конфігураційних файлів .


2
З уже простроченим паролем для мене спрацювало лише глобальне налаштування.
— maaartinus

2
Ви можете додати цей параметр до /etc/mysql/my.cnf, під mysqld; default_password_lifetime = 0, інакше після перезапуску mysql ви знову отримаєте таку ж помилку.
— mertaydin

2
Дякую @Dave Everitt & @mertaydin!
— WebMW

11

Нещодавно я проходив через ту ж проблему під час встановлення mysql на mac os x capitan. Я не знайшов тут правильної відповіді, тому додав цю відповідь.

MySql в поточних версіях генерує тимчасовий пароль при встановленні mysql. Використовуйте цей пароль, щоб встановити новий пароль за допомогою утиліти mysqladmin, як показано нижче;

/ usr / local / mysql / bin / mysqladmin -u root -p '<ваш тимчасовий пароль>' пароль '<ваш новий пароль>'

Сподіваюся, це допоможе вам та іншим.


7

Просто завантажте робочий стіл MySQL для входу. Він запропонує вам негайно та автоматично змінити пароль.


4

запустити MYSQL в безпечному режимі

mysqld_safe --skip-grant-tables &

Підключіться до сервера MYSQL

mysql -u root

запустіть команди SQL для скидання пароля:

use mysql;
SET GLOBAL default_password_lifetime = 0;
SET PASSWORD = PASSWORD('new_password');

Останній крок, перезапустіть службу MySQL


4

я зіткнувся з цією проблемою кілька днів тому. Найкраще рішення для версії MySQL 5.7; увійдіть в консоль MySQL та змініть свій пароль за допомогою наступної команди:

ALTER USER `root`@`localhost` IDENTIFIED BY 'new_password', `root`@`localhost` PASSWORD EXPIRE NEVER;

4

ПОПЕРЕДЖЕННЯ: це дозволить будь-якому користувачеві увійти в систему

Довелося спробувати щось інше. Оскільки термін дії мого пароля root закінчився, і змінити не було можливості, оскільки

Column count of mysql.user is wrong. Expected 45, found 46. The table is probably corrupted

temporarly додавання skip-grant-tablesUnder [mysqld]в my.cnfі перезапустити MySQL зробив трюк


4

У Windows у phpmyadmin загляньте у Змінні: default_password_lifetime і встановіть його на 0 (замість 360), насолоджуйтесь.

Це можливо, ніж mySQL займе знову 360 днів, тому додайте в my.ini:

[mysqld]
default_password_lifetime=0

І перезапустіть mysql.


Це можливо, ніж default_password_lifetime, займе знову 360 днів, тому в my.ini додайте:
— Лоран Змінка


1

перезапустіть сервер MySQL за допомогою параметра --skip-grant-tables А потім встановіть новий пароль користувача

$ mysql -u root
mysql> USE mysql;
mysql> UPDATE user SET password=PASSWORD("NEWPASSWORD") WHERE User='root';
mysql> FLUSH PRIVILEGES;
mysql> quit

Тепер, якщо вам потрібно, ви можете оновити таблицю mysql.user (поле password_expired = 'N'), щоб не втратити термін дії пароля.


Коли я вводжу першу команду, mysql -u rootя отримую таку помилку:ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: NO)
— CaribouCode

Для запису мені вдалося потрапити, змінивши першу команду, mysql -u root -pпісля чого вона запитала у мене пароль, який я ввів. Ваша наступна команда для мене не спрацювала, оскільки там було сказаноYou must reset your password using ALTER USER statement before executing this statement.
— CaribouCode

Чи знаєте ви, як скинути пароль за допомогою ALTER USER? Я не такий хороший з Mysql (я більше людина NodeJS / MongoDB).
— CaribouCode

1

Усі ці відповіді використовують консолі Linux для доступу до MySQL.

Якщо ви працюєте в ОС Windows і використовуєте WAMP, для початку відкрийте консоль MySQL ( click WAMP icon->MySQL->MySQL console).

Потім він попросить вас ввести ваш поточний пароль, введіть його.

А потім наберіть SET PASSWORD = PASSWORD('some_pass');


1

найкраще просте рішення:

[PATH MYSQL]/bin/mysql -u root
[Enter password]
SET GLOBAL default_password_lifetime = 0;

а потім працює нормально.



0

Термін дії пароля - це нова функція в MySQL 5.6 або 5.7.

Відповідь ясна: використовуйте клієнта, який може змінити термін дії пароля (думаю, Sequel Pro може це зробити).

Бібліотека MySQLi, очевидно, не може змінити прострочений пароль.

Якщо у вас обмежений доступ до localhost і у вас є лише консольний клієнт, це може зробити стандартний клієнт mysql.


2
Дякую за Вашу відповідь. Я завантажив Sequel Pro і спробував підключитися через сокет. Я отримую ту саму помилку про термін дії пароля, який минув ...
— CaribouCode

0

Відкрийте консоль MySQL і введіть SET PASSWORD = 'ваш пароль'; а потім натисніть клавішу ENTER, яка встановить ваш визначений пароль для кореневого користувача.

Ви можете писати лише SET PASSWORD = ''; який встановить пустий пароль для кореневого користувача.



0

Просто відкрийте MySQL Workbench і оберіть [Екземпляр] Запуск / Вимкнення та клацніть на пусковому сервері. У мене це спрацювало

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