Срок действия пароля 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?

КарибуКод
источник
У меня такая же проблема.
Рохан Санап,
это действительно раздражает, что из-за этого может быть отключен весь сервис
tofutim
1
Попробуйте бежать/usr/local/mysql/bin/mysqladmin -u root -p password
Коннор Лич
1
@ConnorLeech часами пытался сбросить пароль root с истекшим сроком действия MariaDB для homebrew, но это исправило его для меня - спасибо!
Alex Holsgrove

Ответы:

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
Я использую MySQL версии 5.7.9, и теперь она устарела, поскольку это сообщение об ошибке из командной строки MySQL сообщает нам: Предупреждение (Код 1287): 'SET PASSWORD = PASSWORD (' <plaintext_password> ')' устарело и будет удалено в будущий выпуск. Пожалуйста, используйте вместо этого SET PASSWORD = '<plaintext_password>'
Фабиано
Мне жаль, что это не сработало для меня, но работал другой пользователь, опубликованный Петром Н. Возможно, работает с другой версией MySQL.
MG Developer
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
Кетав Чоталия,
Это сработало. ALTER USER 'username' @ '%' IDENTIFIED BY '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.

Это похоже на ответ Павана Сачи, но с запросом пароля.

Моя ошибка была «# 1862 - Срок действия вашего пароля истек. Чтобы войти в систему, вы должны изменить его с помощью клиента, который поддерживает пароли с истекшим сроком действия». на экране входа в phpMyAdmin в первый раз.

Комплект
источник
У меня тоже работали OS X El Capital и MySQL 5.17.13! Спасибо за это!
Zeke
5
Стоит отметить, что слово «пароль» не является заполнителем , тогда как «root» - это имя пользователя, которого вы хотите обновить:mysqladmin -u [username] -p password
random_user_name 06
Это единственное, что (казалось бы) у меня работало в 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, чтобы войти в систему. Она предложит вам немедленно и автоматически изменить пароль.

Grassright
источник
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

ВНИМАНИЕ: это позволит любому пользователю войти в систему

Пришлось попробовать кое-что еще. Поскольку срок действия моего корневого пароля истек, его нельзя было изменить, потому что

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

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

Marius.C
источник
4

В Windows в phpmyadmin посмотрите в Variables: default_password_lifetime и переключите его на 0 (вместо 360), наслаждайтесь.

Возможно, mySQL снова займет 360 дней, поэтому добавьте в my.ini:

[mysqld]
default_password_lifetime=0

И перезапустите mysql.

Лоран Зминка
источник
Возможно, что default_password_lifetime снова займет 360 дней, поэтому в my.ini добавьте:
Laurent Zminka
4

Это сработало для меня:

ALTER USER 'root'@'localhost' IDENTIFIED BY 'yourpassword','root'@'localhost' PASSWORD EXPIRE NEVER;
Роберт Сэйлор
источник
1

перезапустите сервер MySQL с параметром --skip-grant-tables И затем установите новый пароль root

$ 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;

а потом отлично работает.

Fastorro
источник
0

Срок действия пароля - новая функция в MySQL 5.6 или 5.7.

Ответ очевиден: используйте клиент, способный изменять пароль с истекшим сроком действия (я думаю, что Sequel Pro может это сделать).

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

Если у вас ограниченный доступ к localhost и у вас есть только консольный клиент, стандартный клиент mysql может это сделать.

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

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

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

Прасант Кумар
источник
0

Я сделал что-то подобное.

UPDATE mysql.user SET authentication_string = PASSWORD(''), password_expired = 'N' WHERE User = 'root' AND Host = 'localhost';
Марсель Зебровски
источник
1
You must reset your password using ALTER USER statement before executing this statement.
Weijing Jay Lin
0

Просто откройте MySQL Workbench, выберите [Instance] Startup / Shutdown и щелкните на стартовом сервере. Это сработало для меня

Арджун
источник