MySQLまたはMariaDBのルートパスワードをリセットする方法
序章
パスワードを忘れることは私たちの最善を尽くします。 MySQLまたはMariaDBデータベースへのルートパスワードを忘れたり紛失したりした場合でも、サーバーにアクセスでき、サーバーにアクセスできれば、パスワードにアクセスしてリセットできます。 sudo
-有効なユーザーアカウント。
このチュートリアルでは、MySQLとMariaDBの古いバージョンと新しいバージョンのrootパスワードをリセットする方法について説明します。
前提条件
ルートMySQL/MariaDBパスワードを回復するには、次のものが必要です。
- sudoユーザーを使用してMySQLまたはMariaDBを実行しているLinuxサーバーにアクセスします。
ステップ1—データベースバージョンの特定
最新のLinuxディストリビューションのほとんどは、MySQLまたはMariaDBのいずれかで出荷されます。これは、MySQLと完全に互換性のある人気のあるドロップイン代替品です。 使用するデータベースとそのバージョンに応じて、rootパスワードを回復するために異なるコマンドを使用する必要があります。
次のコマンドでバージョンを確認できます。
- 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
後で使用するため、実行しているデータベースとバージョンをメモしてください。 次に、データベースに手動でアクセスできるように、データベースを停止する必要があります。
ステップ2—データベースサーバーを停止する
ルートパスワードを変更するには、事前にデータベースサーバーをシャットダウンする必要があります。
あなたはMySQLのためにそれをすることができます:
- sudo systemctl stop mysql
そしてMariaDBの場合:
- sudo systemctl stop mariadb
データベースサーバーが停止したら、手動でアクセスしてルートパスワードをリセットします。
手順3—権限チェックなしでデータベースサーバーを再起動する
ユーザー権限に関する情報をロードせずにMySQLとMariaDBを実行すると、パスワードを指定せずにroot権限でデータベースのコマンドラインにアクセスできるようになります。 これにより、知らないうちにデータベースにアクセスできるようになります。
これを行うには、データベースがユーザー特権情報を格納する付与テーブルをロードしないようにする必要があります。 これはセキュリティ上のリスクが少しあるため、他のクライアントが接続できないように、ネットワーキングもスキップする必要があります。
付与テーブルをロードしたり、ネットワーキングを有効にしたりせずに、データベースを起動します。
- sudo mysqld_safe --skip-grant-tables --skip-networking &
このコマンドの最後にあるアンパサンドにより、このプロセスがバックグラウンドで実行されるため、端末を引き続き使用できます。
これで、rootユーザーとしてデータベースに接続できます。rootユーザーはパスワードを要求しないはずです。
- mysql -u root
代わりに、データベースシェルプロンプトがすぐに表示されます。
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
mysql>
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
MariaDB [(none)]>
ルートアクセスが可能になったので、ルートパスワードを変更できます。
ステップ4—ルートパスワードの変更
MySQLの最新バージョンのルートパスワードを変更する簡単な方法の1つは、 ALTER USER
指図。 ただし、許可テーブルがロードされていないため、このコマンドは現在機能しません。
データベースサーバーに、を発行して付与テーブルをリロードするように指示しましょう。 FLUSH PRIVILEGES
指図。
- FLUSH PRIVILEGES;
これで、実際にrootパスワードを変更できます。
MySQL 5.7.6以降、および MariaDB 10.1.20以降の場合は、次のコマンドを使用します。
- ALTER USER 'root'@'localhost' IDENTIFIED BY 'new_password';
MySQL5.7.5以前およびMariaDB 10.1.20 以前の場合は、次を使用します。
- SET PASSWORD FOR 'root'@'localhost' = PASSWORD('new_password');
必ず交換してください new_password
選択した新しいパスワードを使用します。
注: ALTER 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)
パスワードが変更されたため、データベースサーバーの手動インスタンスを停止して、以前と同じように再起動できます。
ステップ5—データベースサーバーを通常どおり再起動します
まず、手順3で手動で起動したデータベースサーバーのインスタンスを停止します。 このコマンドは、MySQLまたはMariaDBプロセスのPIDまたはプロセスIDを検索し、送信します SIGTERM
クリーンアップ操作を実行した後、スムーズに終了するように指示します。 詳細については、この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サーバーへの管理アクセスが復元されました。 選択する新しいrootパスワードが強力で安全であることを確認し、安全な場所に保管してください。