質問: ### 問題 localhostにてMySQL、phpMyAdminの環境構築中の初心者です。Apacheも含めて、一通りのインストールを終えたところです。 MySQLにログインしようとして、コマンド「mysql -u root -p」を入力をしてもエラーが起きるため(パスワードは正しいはずなのですが...)、こちらのサイトを見ながらrootのパスワードを再設定を試みています。 ・エラー文: ``` ERROR 1045 (28000): Access denied for user 'ODBC'@'localhost' (using password: NO) ``` しかし、上記サイト上の項目(2)「パスワード無しでログイン出来るようにMySQLを起動」内の「mysqld-nt --skip-grant-tables」というコマンドを入れても、 ``` 'mysqld-nt' は、内部コマンドまたは外部コマンド、操作可能なプログラムまたはバッチ ファイルとして認識されていません。 ``` というエラーが出てくるため、立ち止まっています。 そもそも、MySQLにログインしようとしている理由が、phpMyAdminにrootでログインできないためなのですが、その解決法としてMySQLのパスワード再設定が正解なのかもわかりません。 ・エラー文: ``` mysqli_real_connect(): (HY000/1045): Access denied for user 'root'@'localhost' (using password: YES)) ``` どのようにすれば解決できるでしょうか。どなたかご教示頂けると助かります。 ### 環境 OS:Windows10 ソフトウェア:Apache2.4、php7.3.5、phpMyAdmin4.8.5、MySQL8.0 Apacheとphpは【初心者向け】0から導入するPHPの環境構築 Windows10版を参考にインストールしました。「It Works!」と「」が問題なく作動します。 MySQLはDBOnline MySQLインストールを見ながら、DL、install、my.iniの配置、Windowsサービスの登録まで行いました。起動・停止はできる状態です。 phpMyAdminは解凍後、Apacheのhtdocsフォルダに展開してあります。
回答: 質問を読みましたが、やりたい事は 「phpMyAdminからrootユーザでログインできないのをなんとかしたい」であって、 「MySQLのrootユーザのパスワードをリセットしたい」は主目的ではないですよね? **インストール時のAuthentication Methodで「Use Strong Password Encryption for Authentication」を選択されたかと思いますが、 現在のPHPではこれはサポートされていないようなので、MySQL側の設定を変更する必要があります。** ※ 最近のPHPでは環境によっては利用できるものもあるようですので、サポートされていないよう、と記載変更しました。曖昧ですみません。 mysqli mysqlnd 拡張まわりに関しての関連性と最近のPHPのサポートについては、正確な情報はすぐにわかりませんでした。 まず rootでのログインが可能かどうかを再度確認してください。 インストール時にも入力しているはずなので、変更していなければログイン可能なはずです。 ``` mysql -u root -p ``` 質問にかかれていますメッセージ ``` ERROR 1045 (28000): Access denied for user 'ODBC'@'localhost' (using password: NO) ``` これはODBCユーザがホスト名としてlocalhostを指定し、DBにアクセスを試みましたが拒否しました、という内容なので、rootユーザでのログインができていない可能性があります。 どうしてもrootのパスワードが変更そうであれば、下記のコマンドで変更してみたあと、再度ログインを試みてください。 ``` mysqladmin -u root password 新しいパスワード ``` ログイン成功しましたら、mysqlのコマンド入力画面が表示されますので、 下記コマンドで旧形式のパスワードを設定してください ('password' の部分は自身で設定したいものに置き換えてください) ``` mysql> ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'password'; ``` ここまでの操作でphpMyAdminでrootユーザログインが可能になるはずです。 ### 補足 ユーザを追加した場合、これも新しい方式の認証になってしまうので、 デフォルトパスワードが旧形式になるよう、 my.ini を変更しておいたほうが良いかもしれません。 ``` default_authentication_plugin=mysql_native_password ``` データがまだ何も入ってなくて、セットアップが大変でなければMySQLを一度アンインストールして、 Authentication Method を選択する際に「Use Legacy Authentication Method」の方でインストールし直したほうが早いかもしれません。