Термін дії пароля 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.