序章

パスワードを忘れることは私たちの最善を尽くします。 MySQLまたはMariaDBデータベースへのルートパスワードを忘れたり紛失したりした場合でも、サーバーにアクセスでき、サーバーにアクセスできれば、パスワードにアクセスしてリセットできます。 sudo-有効なユーザーアカウント。

このチュートリアルでは、MySQLとMariaDBの古いバージョンと新しいバージョンのrootパスワードをリセットする方法について説明します。

前提条件

ルートMySQL/MariaDBパスワードを回復するには、次のものが必要です。

  • sudoユーザーを使用してMySQLまたはMariaDBを実行しているLinuxサーバーにアクセスします。

ステップ1—データベースバージョンの特定

最新のLinuxディストリビューションのほとんどは、MySQLまたはMariaDBのいずれかで出荷されます。これは、MySQLと完全に互換性のある人気のあるドロップイン代替品です。 使用するデータベースとそのバージョンに応じて、rootパスワードを回復するために異なるコマンドを使用する必要があります。

次のコマンドでバージョンを確認できます。

  1. mysql --version

MySQLでは次のような出力が表示されます。

MySQL output
mysql Ver 14.14 Distrib 5.7.16, for Linux (x86_64) using EditLine wrapper

または、MariaDBの場合は次のように出力します。

MariaDB output
mysql Ver 15.1 Distrib 5.5.52-MariaDB, for Linux (x86_64) using readline 5.1

後で使用するため、実行しているデータベースとバージョンをメモしてください。 次に、データベースに手動でアクセスできるように、データベースを停止する必要があります。

ステップ2—データベースサーバーを停止する

ルートパスワードを変更するには、事前にデータベースサーバーをシャットダウンする必要があります。

あなたはMySQLのためにそれをすることができます:

  1. sudo systemctl stop mysql

そしてMariaDBの場合:

  1. sudo systemctl stop mariadb

データベースサーバーが停止したら、手動でアクセスしてルートパスワードをリセットします。

手順3—権限チェックなしでデータベースサーバーを再起動する

ユーザー権限に関する情報をロードせずにMySQLとMariaDBを実行すると、パスワードを指定せずにroot権限でデータベースのコマンドラインにアクセスできるようになります。 これにより、知らないうちにデータベースにアクセスできるようになります。

これを行うには、データベースがユーザー特権情報を格納する付与テーブルをロードしないようにする必要があります。 これはセキュリティ上のリスクが少しあるため、他のクライアントが接続できないように、ネットワーキングもスキップする必要があります。

付与テーブルをロードしたり、ネットワーキングを有効にしたりせずに、データベースを起動します。

  1. sudo mysqld_safe --skip-grant-tables --skip-networking &

このコマンドの最後にあるアンパサンドにより、このプロセスがバックグラウンドで実行されるため、端末を引き続き使用できます。

これで、rootユーザーとしてデータベースに接続できます。rootユーザーはパスワードを要求しないはずです。

  1. 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)]>

ルートアクセスが可能になったので、ルートパスワードを変更できます。

ステップ4—ルートパスワードの変更

MySQLの最新バージョンのルートパスワードを変更する簡単な方法の1つは、 ALTER USER 指図。 ただし、許可テーブルがロードされていないため、このコマンドは現在機能しません。

データベースサーバーに、を発行して付与テーブルをリロードするように指示しましょう。 FLUSH PRIVILEGES 指図。

  1. FLUSH PRIVILEGES;

これで、実際にrootパスワードを変更できます。

MySQL 5.7.6以降、および MariaDB 10.1.20以降の場合は、次のコマンドを使用します。

  1. ALTER USER 'root'@'localhost' IDENTIFIED BY 'new_password';

MySQL5.7.5以前およびMariaDB 10.1.20 以前の場合は、次を使用します。

  1. SET PASSWORD FOR 'root'@'localhost' = PASSWORD('new_password');

必ず交換してください new_password 選択した新しいパスワードを使用します。

ALTER USER コマンドは機能しません。通常、より大きな問題を示しています。 ただし、試すことができます UPDATE ... SET 代わりにrootパスワードをリセットします。

  1. UPDATE mysql.user SET authentication_string = PASSWORD('new_password') WHERE User = 'root' AND Host = 'localhost';

この後、許可テーブルをリロードすることを忘れないでください。

いずれの場合も、コマンドが正常に実行されたことを確認する必要があります。

Output
Query OK, 0 rows affected (0.00 sec)

パスワードが変更されたため、データベースサーバーの手動インスタンスを停止して、以前と同じように再起動できます。

ステップ5—データベースサーバーを通常どおり再起動します

まず、手順3で手動で起動したデータベースサーバーのインスタンスを停止します。 このコマンドは、MySQLまたはMariaDBプロセスのPIDまたはプロセスIDを検索し、送信します SIGTERM クリーンアップ操作を実行した後、スムーズに終了するように指示します。 詳細については、このLinuxプロセス管理チュートリアルをご覧ください。

MySQLの場合、以下を使用します。

  1. sudo kill `cat /var/run/mysqld/mysqld.pid`

MariaDBの場合、以下を使用します。

  1. sudo kill `/var/run/mariadb/mariadb.pid`

次に、を使用してサービスを再起動します systemctl.

MySQLの場合、以下を使用します。

  1. sudo systemctl start mysql

MariaDBの場合、以下を使用します。

  1. sudo systemctl start mariadb

これで、次のコマンドを実行して、新しいパスワードが正しく適用されたことを確認できます。

  1. mysql -u root -p

コマンドは、新しく割り当てられたパスワードの入力を求めるプロンプトを表示するはずです。 それを入力すると、期待どおりにデータベースプロンプトにアクセスできるはずです。

結論

これで、MySQLまたはMariaDBサーバーへの管理アクセスが復元されました。 選択する新しいrootパスワードが強力で安全であることを確認し、安全な場所に保管してください。