私はちょうど私のMacを一掃し、そしてEl Capitanのフレッシュインストールをした。私は今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.
私は以前に接続からのその応答を見たことがありません。接続できない場合はどうすれば解決できますか?
EDIT
ターミナルでコマンドを入力しました:
mysql -u root -p
これは私が入れた私のパスワード(現在のもの)を私にたずねました。
ERROR 1820 (HY000): You must reset your password using ALTER USER statement before executing this statement.
ALTER USER
を使用してパスワードをリセットする方法
それで私はついに自分で解決策を見つけました。
まずターミナルに入り、次のように入力しました。
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');
まず、私が使用します:
mysql -u root -p
現在の 'root'のパスワードを教えてください。次:
mysql> ALTER USER `root`@`localhost` IDENTIFIED BY 'new_password',
`root`@`localhost` PASSWORD EXPIRE NEVER;
'new_password'
をユーザー「root」の新しいパスワードに変更します。
それは私の問題を解決しました。
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ログイン画面で。
パスワードをリセットしても一時的にしか問題が解決されません。 MySQL 5.7.4から5.7.10まで(よりよいセキュリティを促進するために MySQL:Password Expiration Policy を参照)のデフォルトのdefault_password_lifetime
変数値は360(1年)です。これらのバージョンの場合、この変数(または個々のユーザーアカウント)に変更を加えないとallパスワードは360日後に期限切れになります。
そのため、スクリプトから「あなたのパスワードは期限切れです。ログインするには、期限切れのパスワードをサポートするクライアントを使用してパスワードを変更する必要があります」というメッセージを受け取ることがあります。
自動パスワードの有効期限を停止するには、root(mysql -u root -p
)としてログインし、サーバーに自動的に接続するクライアント(スクリプトなど)の場合、パスワードの有効期限設定を変更します。
ALTER USER 'script'@'localhost' PASSWORD EXPIRE NEVER;
またはあなたは自動パスワード有効期限を無効にすることができますすべてのユーザー:
SET GLOBAL default_password_lifetime = 0;
コメントでMertaydinによって指摘されているように、この永続的なものにするためにMySQLは設定のmy.cnf
グループの下で、[mysqld]
ファイルに次の行を追加します。 my.cnf
の場所はあなたの設定(例:Windows、OS XではHomebrew、インストーラー)、そしてUnixでもグローバルでもこのユーザーごとにしたいかどうかによって異なります。
[mysqld] default_password_lifetime = 0
(ここでも他の設定があるかもしれません...)
設定ファイルに関するMySQLのドキュメント を参照してください。
私は最近Mac os x capitanにmysqlをインストールしている間に同じ問題を経験しました。私はここで正しい答えを見つけることができなかったので、この答えを追加しました。
現在のバージョンのMySqlでは、mysqlをインストールすると一時パスワードが生成されます。このパスワードを使用して、以下のようにmysqladminユーティリティを使用して新しいパスワードを設定します。
/ usr/local/mysql/bin/mysqladmin -u root -p '<一時パスワード>' password '<新しいパスワード>
それがあなたや他の人々の役に立つことを願っています。
ログインするにはMySQLワークベンチをダウンロードするだけです。パスワードを直ちに自動的に変更するように促されます。
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サービスを再起動します
私は数日前にこの問題に直面しました。 5.7バージョンのMySQLに最適なソリューションです。 mysqlコンソールにログインし、次のコマンドでパスワードを変更してください。
ALTER USER `root`@`localhost` IDENTIFIED BY 'new_password', `root`@`localhost` PASSWORD EXPIRE NEVER;
Windowsのphpmyadminで、Variables:default_password_lifetimeを調べて、(360ではなく)0に切り替えてお楽しみください。
MySQLよりも360日かかる可能性があるので、my.iniに追加します。
[mysqld]
default_password_lifetime=0
そしてmysqlを再起動してください。
警告:これはどのユーザもログインを許可します
私は他のことを試みなければなりませんでした。私のrootパスワードは期限が切れていて変更することはできないので
Column count of mysql.user is wrong. Expected 45, found 46. The table is probably corrupted
一時的にskip-grant-tables
の[mysqld]
の下にmy.cnf
を追加してmysqlを再起動するとうまくいきます
これは私のために働いた:
ALTER USER 'root' @ 'localhost' 'yourpassword'によって識別され、 'root' @ 'localhost'はパスワードを絶対に期限切れにしません。
最も簡単な解決策:
[PATH MYSQL]/bin/mysql -u root
[Enter password]
SET GLOBAL default_password_lifetime = 0;
それから正常に動作します。
これらすべての答えはMySQLにアクセスするためにLinuxコンソールを使用しています。
Windowsを使用していてWAMPを使用している場合は、MySQLコンソール(click WAMP icon->MySQL->MySQL console
)を開くことから始めることができます。
それからそれはあなたの現在のパスワードを入力するようにあなたに要求するでしょう、それを入力してください。
そしてSET PASSWORD = PASSWORD('some_pass');
と入力してください。
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コンソールを開き、SET PASSWORD = 'your password'と入力します。そしてENTERキーを押して、rootユーザー用にあなたが定義したパスワードを設定します。
SET PASSWORD = ''だけ書くことができます。これにより、rootユーザーのパスワードが空白に設定されます。
私はこのようなことをしました。
UPDATE mysql.user SET authentication_string = PASSWORD( '')、password_expired = 'N' WHERE User = 'root' AND Host = 'localhost';
パスワードの有効期限はMySQL 5.6または5.7の新機能です。
答えは明らかです。期限切れのパスワード変更が可能なクライアントを使用する(私はSequel Proがそれを行うことができると思う)。
MySQLiライブラリは明らかに期限切れのパスワードを変更することができません。
Localhostへのアクセスが制限されていて、コンソールクライアントしか持っていない場合は、標準のmysqlクライアントで実行できます。