Mysqlパスワードの有効期限が切れました。接続できません


87

Macをワイプして、ElCapitanを新規インストールしました。私は今Mysqlに接続するのに苦労しています。Webサーバーのセットアッププロセスを経て、簡単な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ですか?


私は同じ問題を抱えています。
Rohan Sanap 2016

これが原因でサービス全体がシャットダウンされる可能性があることは本当に厄介です
tofutim 2016

1
実行してみてください/usr/local/mysql/bin/mysqladmin -u root -p password
Connor Leech 2018

1
@ConnorLeechは、homebrewのMariaDBの期限切れのrootパスワードをリセットするのに何時間も費やしましたが、これで修正されました-ありがとう!
AlexHolsgrove19年

回答:


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');


これは適切に機能しましたか?今後、これらの手順を実行した後、エラーが発生しましたか?
Rohan Sanap 2016

どうもありがとう!これは私にとってもうまくいきました。たくさんの時間を節約できました。
TBJ 2016年

5
MySQLのバージョン5.7.9を使用していますが、MySQLコマンドプロンプトからのこのエラーメッセージが示すように、これは非推奨になりました。警告(コード1287): 'SET PASSWORD = PASSWORD(' <plaintext_password> ')'は非推奨であり、で削除されます。将来のリリース。代わりにSETPASSWORD = '<plaintext_password>'を使用してください
Fabiano 2016年

申し訳ありませんが、これは機能しませんでしたが、PiotrN。によって投稿されたalterユーザーは機能しました。おそらく、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構文にエラーがあります。1行目の 'USER' root '@' localhost'IDENTIFIED BY 'newPassword'、 'root' @ 'localhost'PASSWORD'の近くで使用する正しい構文については、MySQLサーバーのバージョンに対応するマニュアルを確認してください
Ketav Chotaliya

これはうまくいきました。ALTER USER'username '@'% 'IDENTIFIED BY'your_password'、 'user' @ '%' PASSWORD EXPIRE NEVER;
TheLegendaryCopyCoder 2016

1
エラーの取得: ERROR 1805 (HY000): Column count of mysql.user is wrong. Expected 45, found 46. The table is probably corrupted
PulkitPahwa18年

52

mysqladmin -u [username] -p passwordOS X ElCapitanとMySQL5.7.12 CommunityServerで私のために働いた。例:

$ /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.

これはpavansachiの回答に似ていますが、パスワードプロンプトがあります。

私のエラーは「#1862-パスワードの有効期限が切れています。ログインするには、有効期限が切れたパスワードをサポートするクライアントを使用してパスワードを変更する必要があります。」でした。phpMyAdminのログイン画面で初めて。


OS X ElCapitalとMySQL5.17.13も私のために働いた!これをありがとう!
Zeke 2016年

5
単語「パスワード」であることを言及する価値があるプレースホルダない「ルート」は、あなたが更新したいユーザーの名前であるのに対し、:mysqladmin -u [username] -p password
random_user_name

Linux(Fedora 25)で(一見)私のために働いたのはこれだけです。ありがとう。
Avinash Meetoo 2017

ハレルヤ!!ベスト。コマンド。これまで。私はいたるところを見ましたが、これが最終的にそれを解決したものです。どうもありがとうございました
Connor Leech 2017

19

MySQLパスワードの有効期限

パスワードをリセットしても、問題は一時的に解決するだけです。MySQL 5.7.4から5.7.10まで(セキュリティを強化するため-MySQL :Password Expiration Policyを参照)、デフォルトのdefault_password_lifetime変数値は360(1年っぽい)です。これらのバージョンでは、この変数(または個々のユーザーアカウント)に変更を加えないと、すべてのパスワードは360日後に期限切れになります。

そのため、スクリプトから「パスワードの有効期限が切れています。ログインするには、有効期限が切れたパスワードをサポートするクライアントを使用してパスワードを変更する必要があります」というメッセージが表示される場合があります。

パスワードの自動有効期限を停止するには、root(mysql -u root -p)としてログインし、サーバーに自動的に接続するクライアント(スクリプトなど)の場合は、パスワードの有効期限の設定を変更します。

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

またはすべてのユーザーのパスワードの自動有効期限を無効にすることができます

SET GLOBAL default_password_lifetime = 0;

コメントでMertaydinが指摘しているように、これを永続的にするには、my.cnfMySQLが起動時に読み取るファイル[mysqld]に設定のグループの下に次の行を追加します。の場所はmy.cnf、セットアップ(Windows、OS XのHomebrew、インストーラーなど)と、このユーザーごとにUnixまたはグローバルのどちらが必要かによって異なります。

[mysqld] default_password_lifetime = 0 (ここにも他の設定があるかもしれません...)

構成ファイルに関するMySQLドキュメントを参照してください。


2
すでに有効期限が切れているパスワードでは、グローバル設定のみが機能しました。
maaartinus 2017年

2
このパラメータは、mysqldの下の/etc/mysql/my.cnfに追加できます。default_password_lifetime = 0それ以外の場合、mysqlの再起動後に同じエラーが再度発生します。
mertaydin 2017年

2
@Dave Everitt&@ mertaydin、ありがとう!
WebMW 2018

11

最近、mac os xcapitanにmysqlをインストールしているときに同じ問題が発生しました。ここで正しい答えが見つからなかったので、この答えを追加します。

現在のバージョンの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

一時的にskip-grant-tablesアンダー[mysqld]インmy.cnfを追加してmysqlを再起動すると、トリックが実行されました


4

Windowsのphpmyadminで、Variables:default_password_lifetimeを確認し、(360ではなく)0に切り替えて楽しんでください。

mySQLよりも360日かかる可能性があるため、my.iniを追加します。

[mysqld]
default_password_lifetime=0

そして、mysqlを再起動します。


:default_password_lifetimeので、my.iniファイルの追加で、360日再び取るよりもその可能性
ローランZminka

4

これは私のために働いた:

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

1

--skip-grant-tablesオプションを指定してMySQLサーバーを再起動し、新しいルートパスワードを設定します

$ 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 2015年

ALTER USERを使用してパスワードをリセットする方法を知っていますか?私はMysqlが苦手です(私はNodeJS / MongoDBの人です)。
caribouCode 2015年

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

パスワードの有効期限は、MySQL5.6または5.7の新機能です。

答えは明らかです。期限切れのパスワード変更が可能なクライアントを使用してください(Sequel Proで変更できると思います)。

MySQLiライブラリは明らかに期限切れのパスワードを変更できません。

ローカルホストへのアクセスが制限されていて、コンソールクライアントしかない場合は、標準のmysqlクライアントでそれを実行できます。


2
ご返信ありがとうございます。Sequel Proをダウンロードして、ソケット経由で接続しようとしました。パスワードビーイングが期限切れについて私は...同じエラーが出る
CaribouCode

0

MySQLコンソールを開き、SET PASSWORD = 'your 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 JayLin19年

0

MySQL Workbenchを開き、[インスタンス]起動/シャットダウンを選択してサーバーの起動をクリックするだけです。それは私のために働いた

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.