この問題を修正するために多くの手順を試しました。この問題の考えられる解決策には非常に多くの情報源があり、ナンセンスからセンスを取り除くのは困難です。私は最終的にここで良い解決策を見つけました:
ステップ1:データベースのバージョンを特定する
$ mysql --version
MySQLを使用すると、次のような出力が表示されます。
$ mysql Ver 14.14 Distrib 5.7.16, for Linux (x86_64) using EditLine wrapper
または、MariaDBに対して次のように出力します。
mysql Ver 15.1 Distrib 5.5.52-MariaDB, for Linux (x86_64) using readline 5.1
後で使用するので、実行中のデータベースとバージョンをメモしてください。次に、データベースを手動でアクセスできるように停止する必要があります。
ステップ2:データベースサーバーの停止
rootパスワードを変更するには、事前にデータベースサーバーをシャットダウンする必要があります。
あなたはMySQLのためにそれをすることができます:
$ sudo systemctl stop mysql
そしてMariaDBの場合:
$ sudo systemctl stop mariadb
ステップ3:権限チェックなしでデータベースサーバーを再起動する
ユーザー権限に関する情報をロードせずにMySQLとMariaDBを実行すると、パスワードを入力せずにroot権限でデータベースコマンドラインにアクセスできます。これにより、知らないうちにデータベースにアクセスできるようになります。
これを行うには、データベースがユーザーの特権情報を格納する許可テーブルをロードしないようにする必要があります。これはセキュリティ上のリスクがあるため、他のクライアントが接続できないように、ネットワークもスキップする必要があります。
権限テーブルをロードしたり、ネットワークを有効にしたりせずにデータベースを起動します。
$ sudo mysqld_safe --skip-grant-tables --skip-networking &
このコマンドの最後のアンパサンドは、このプロセスをバックグラウンドで実行するため、引き続き端末を使用できます。
これで、パスワードを要求しないrootユーザーとしてデータベースに接続できます。
$ mysql -u root
代わりに、データベースシェルプロンプトがすぐに表示されます。
MySQLプロンプト
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
mysql>
MariaDBプロンプト
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
MariaDB [(none)]>
これでrootアクセスが可能になったので、rootパスワードを変更できます。
ステップ4:rootパスワードの変更
mysql> FLUSH PRIVILEGES;
これで、rootパスワードを実際に変更できます。
以下のためのMySQL 5.7.6以降だけでなく、MariaDB 10.1.20以降、次のコマンドを使用します。
mysql> ALTER USER 'root'@'localhost' IDENTIFIED BY 'new_password';
以下のためのMySQL 5.7.5およびそれ以前と同様にMariaDB 10.1.20歳以上の、使用:
mysql> SET PASSWORD FOR 'root'@'localhost' = PASSWORD('new_password');
new_password
選択した新しいパスワードに置き換えてください。
注:ALTER USER
コマンドが機能しない場合、通常はより大きな問題を示しています。ただし、UPDATE ... SET
代わりにrootパスワードをリセットしてみることができます。
[重要]これは、私の特定の問題を修正した特定の行です。
mysql> UPDATE mysql.user SET authentication_string = PASSWORD('new_password') WHERE User = 'root' AND Host = 'localhost';
この後、必ず許可テーブルをリロードしてください。
どちらの場合も、コマンドが正常に実行されたことの確認が表示されます。
Query OK, 0 rows affected (0.00 sec)
パスワードが変更されたため、データベースサーバーの手動インスタンスを停止して、以前と同じように再起動できます。
手順5:データベースサーバーを通常どおり再起動する
チュートリアルでは、データベースを再起動するためにさらにいくつかの手順を実行しますが、使用したのはこれだけです。
MySQLの場合、次を使用します:
$ sudo systemctl start mysql
MariaDBの場合、次を使用します。
$ sudo systemctl start mariadb
これで、次のコマンドを実行して、新しいパスワードが正しく適用されたことを確認できます。
$ mysql -u root -p
このコマンドは、新しく割り当てられたパスワードの入力を要求するはずです。入力すると、期待どおりにデータベースプロンプトにアクセスできます。
結論
MySQLまたはMariaDBサーバーへの管理アクセスが復元されました。選択した新しいrootパスワードが強力で安全であることを確認し、安全な場所に保管してください。