前書き

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

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

前提条件

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

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

手順1-データベースバージョンの特定

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

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

mysql --version

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

MySQL outputmysql  Ver 14.14 Distrib , for Linux (x86_64) using  EditLine wrapper

または、MariaDBに対して次のように出力します。

MariaDB outputmysql  Ver 15.1 Distrib -, for Linux (x86_64) using readline 5.1

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

手順2-データベースサーバーの停止

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

MySQLの場合は次のようにできます。

sudo systemctl stop

また、MariaDBの場合:

sudo systemctl stop

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

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

ユーザー権限に関する情報をロードせずにMySQLとMariaDBを実行すると、パスワードを入力せずにルート権限でデータベースコマンドラインにアクセスできます。 これにより、知らなくてもデータベースにアクセスできます。

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

許可テーブルをロードしたり、ネットワークを有効にせずにデータベースを起動します。

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-ルートパスワードの変更

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

`+ FLUSH PRIVILEGES +`コマンドを発行して、許可テーブルを再ロードするようデータベースサーバーに伝えましょう。

FLUSH PRIVILEGES;

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

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

ALTER USER 'root'@'localhost' IDENTIFIED BY '';
  • MySQL 5.7.5以前*および* MariaDB 10.1.20 *以前の場合、次を使用します。

SET PASSWORD FOR 'root'@'localhost' = PASSWORD('');

`+ new_password +`を選択した新しいパスワードに置き換えてください。

どちらの場合でも、コマンドが正常に実行されたことの確認が表示されます。

OutputQuery OK, 0 rows affected (0.00 sec)

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

手順5-データベースサーバーの通常の再起動

まず、手順3で手動で起動したデータベースサーバーのインスタンスを停止します。 このコマンドは、MySQLまたはMariaDBプロセスのPIDまたはプロセスIDを検索し、クリーンアップ操作を実行した後にスムーズに終了するように指示するために「+ SIGTERM +」を送信します。 詳細については、https://www.digitalocean.com/community/tutorials/how-to-use-ps-kill-and-nice-to-manage-processes-in-linux [このLinuxプロセス管理チュートリアル]をご覧ください。

MySQLの場合は、次のように使用します。

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

MariaDBの場合:

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

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

MySQLの場合は、次のように使用します。

sudo systemctl start mysql

MariaDBの場合:

sudo systemctl start mariadb

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

mysql -u root -p

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

結論

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