MySQLまたはMariaDBのルートパスワードをリセットする方法

前書き

パスワードを忘れるのは私たちにとって最高のことです。 MySQLまたはMariaDBデータベースのrootパスワードを忘れたり紛失したりした場合でも、サーバーとsudo対応のユーザーアカウントにアクセスできる場合は、アクセスを取得してパスワードをリセットできます。

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

前提条件

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

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

[[step-1 -—-データベースバージョンの識別]] ==ステップ1—データベースバージョンの識別

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

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

mysql --version

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

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

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

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

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

[[step-2 -—-データベースサーバーの停止]] ==ステップ2—データベースサーバーの停止

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

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

sudo systemctl stop mysql

また、MariaDBの場合:

sudo systemctl stop mariadb

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

[[step-3 -—- restarting-the-database-server-without-permission-checking]] ==ステップ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パスワードを変更できます。

[[step-4 -—- changeing-the-root-password]] ==ステップ4—ルートパスワードの変更

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

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

FLUSH PRIVILEGES;

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

MySQL 5.7.6 and newerMariaDB 10.1.20 and newerの場合は、次のコマンドを使用します。

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

MySQL 5.7.5 and olderおよびMariaDB 10.1.20以前の場合は、次を使用します。

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

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

[。注意]##

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

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

この後、必ず許可テーブルをリロードしてください。

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

OutputQuery OK, 0 rows affected (0.00 sec)

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

[[step-5 -—- restart-the-database-server-normally]] ==ステップ5—データベースサーバーを通常どおり再起動します

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

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

Related