Ubuntu20.04でMySQLまたはMariaDBのルートパスワードをリセットする方法
著者はCOVID-19救済基金を選択し、 Write forDOnationsプログラムの一環として寄付を受け取りました。
序章
データベースのパスワードを忘れましたか? それは私たちの最善に起こります。 MySQLまたはMariaDBデータベースのrootパスワードを忘れた、または紛失した場合でも、サーバーとsudo
のユーザーアカウントにアクセスできる場合は、アクセスを取得してパスワードをリセットできます。特権。
このチュートリアルでは、Ubuntu20.04のapt
パッケージマネージャーとともにインストールされたMySQLおよびMariaDBデータベースのrootパスワードをリセットする方法を示します。 ルートパスワードを変更する手順は、MySQLまたはMariaDBがインストールされているかどうか、および他のベンダーのディストリビューションまたはパッケージに付属しているデフォルトのsystemd構成によって異なります。 このチュートリアルの手順は、他のシステムまたはデータベースサーバーのバージョンでも機能する可能性がありますが、Ubuntu20.04およびディストリビューション提供のパッケージでテストされています。
注: Ubuntu 20.04の新規インストールでは、通常、デフォルトのMySQLまたはMariaDB構成により、システムのから接続している限り、パスワードを指定せずにデータベースにアクセスできます(完全な管理者権限を使用)。 rootアカウント。 このシナリオでは、パスワードをリセットする必要がない場合があります。 データベースのrootパスワードのリセットに進む前に、sudo mysql
コマンドを使用してデータベースにアクセスしてみてください。 認証のデフォルト構成が変更され、その結果アクセス拒否エラーが発生した場合にのみ、このチュートリアルの手順に従ってください。
前提条件
MySQLまたはMariaDBroot パスワードを回復するには、次のものが必要です。
-
MySQLまたはMariaDBを実行しているUbuntu20.04サーバーにsudoユーザーを使用してアクセスするか、root権限を使用してサーバーにアクセスするその他の方法。
-
本番サーバーに影響を与えずにこのチュートリアルのリカバリ方法をテストするには、テストサーバーを作成してから、初期サーバーセットアップチュートリアルに従います。 sudo権限を持つ通常の非rootユーザーを作成してください。 次に、 Ubuntu 20.04にMySQLをインストールする方法のガイドに従ってMySQLをインストールするか、 Ubuntu20.04にMariaDBをインストールする方法に従ってMariaDBをインストールします。
注:両方のデータベースインストールガイドは、システムの root にアクセスできる限り、認証にパスワードが不要なデータベースrootアカウントのデフォルト構成を保持します。 ] アカウント。 このガイドに従って、新しいパスワードを設定および確認することもできます。
ステップ1—データベースのバージョンを特定してサーバーを停止する
Ubuntu 20.04は、MySQLまたはMariaDBのいずれかを実行します。これは、MySQLと完全に互換性のある人気のあるドロップイン代替品です。 インストールしたパスワードに応じて、さまざまなコマンドを使用してroot
パスワードを回復する必要があるため、このセクションの手順に従って、実行しているデータベースサーバーを確認してください。
次のコマンドでバージョンを確認します。
- mysql --version
MariaDBを実行している場合は、出力にバージョン番号が前に付いた「MariaDB」が表示されます。
MariaDB outputmysql Ver 15.1 Distrib 10.3.25-MariaDB, for debian-linux-gnu (x86_64) using readline 5.2
MySQLを実行している場合は、次のような出力が表示されます。
MySQL outputmysql Ver 8.0.22-0ubuntu0.20.04.3 for Linux on x86_64 ((Ubuntu))
実行しているデータベースに注意してください。 これにより、このチュートリアルの残りの部分で従うべき適切なコマンドが決まります。
root パスワードを変更するには、データベースサーバーをシャットダウンする必要があります。 MariaDBを実行している場合は、次のコマンドを使用して実行できます。
- sudo systemctl stop mariadb
MySQLの場合、以下を実行してデータベースサーバーをシャットダウンします。
- sudo systemctl stop mysql
データベースを停止した状態で、セーフモードでデータベースを再起動して、rootパスワードをリセットできます。
手順2—権限チェックなしでデータベースサーバーを再起動する
権限チェックなしでMySQLとMariaDBを実行すると、有効なパスワードを指定せずにroot権限でデータベースコマンドラインにアクセスできます。 これを行うには、データベースがユーザー特権情報を格納する付与テーブルをロードしないようにする必要があります。 これはセキュリティ上のリスクが少しあるため、ネットワークを無効にして、他のクライアントが一時的に脆弱なサーバーに接続できないようにすることもできます。
インストールしたデータベースサーバーによって、グラントテーブルをロードせずにサーバーを起動する方法が異なります。
Grantテーブルなしで開始するようにMariaDBを構成する
付与テーブルなしでMariaDBサーバーを起動するには、systemd
ユニットファイルを使用して、MariaDBサーバーデーモンの追加パラメーターを設定します。
次のコマンドを実行します。これにより、起動時にMariaDBが使用するMYSQLD_OPTS環境変数が設定されます。 --skip-grant-tables
および--skip-networking
オプションは、Grantテーブルまたはネットワーク機能をロードせずに起動するようにMariaDBに指示します。
- sudo systemctl set-environment MYSQLD_OPTS="--skip-grant-tables --skip-networking"
次に、MariaDBサーバーを起動します。
- sudo systemctl start mariadb
このコマンドは出力を生成しませんが、新しい環境変数設定を考慮して、データベースサーバーを再起動します。
sudo systemctl status mariadb
で開始されていることを確認できます。
これで、パスワードを入力しなくても、MariaDB rootユーザーとしてデータベースに接続できるようになります。
- sudo mysql -u root
データベースシェルプロンプトがすぐに表示されます。
-
データベースサーバーにアクセスできるようになったので、手順3に示すようにrootパスワードを変更できます。
Grantテーブルなしで開始するようにMySQLを構成する
付与テーブルなしでMySQLサーバーを起動するには、MySQLのsystemd構成を変更して、起動時に追加のコマンドラインパラメーターをサーバーに渡します。
これを行うには、次のコマンドを実行します。
- sudo systemctl edit mysql
このコマンドは、nano
エディターで新しいファイルを開きます。このファイルを使用して、MySQLのサービスオーバーライドを編集します。 これらは、MySQLのデフォルトのサービスパラメータを変更します。
このファイルは空になります。 次のコンテンツを追加します。
[Service]
ExecStart=
ExecStart=/usr/sbin/mysqld --skip-grant-tables --skip-networking
最初のExecStart
ステートメントはデフォルト値をクリアし、2番目のステートメントはsystemd
に、許可テーブルとネットワーク機能のロードを無効にするパラメーターを含む新しいスタートアップコマンドを提供します。
CTRL-x
を押してファイルを終了し、Y
を押して変更を保存し、ENTER
を押してファイル名を確認します。
systemd
構成を再ロードして、これらの変更を適用します。
- sudo systemctl daemon-reload
次に、MySQLサーバーを起動します。
- sudo systemctl start mysql
コマンドは出力を表示しませんが、データベースサーバーは起動します。 付与テーブルとネットワークは有効になりません。
rootユーザーとしてデータベースに接続します。
- sudo mysql -u root
データベースシェルプロンプトがすぐに表示されます。
-
サーバーにアクセスできるようになったので、rootパスワードを変更できます。
ステップ3—ルートパスワードの変更
データベースサーバーは現在、制限付きモードで実行されています。 付与テーブルはロードされておらず、ネットワークサポートは有効になっていません。 これにより、パスワードを入力せずにサーバーにアクセスできますが、データを変更するコマンドを実行することはできません。 root パスワードをリセットするには、サーバーにアクセスできるようになったので、許可テーブルをロードする必要があります。
FLUSH PRIVILEGES
コマンドを発行して、データベースサーバーに許可テーブルを再ロードするように指示します。
- FLUSH PRIVILEGES;
rootパスワードを変更できるようになりました。 使用する方法は、MariaDBとMySQLのどちらを使用しているかによって異なります。
MariaDBパスワードの変更
MariaDBを使用している場合は、次のステートメントを実行して root アカウントのパスワードを設定し、new_password
を覚えやすい強力な新しいパスワードに置き換えてください。
- ALTER USER 'root'@'localhost' IDENTIFIED BY 'new_password';
パスワードが変更されたことを示す次の出力が表示されます。
OutputQuery OK, 0 rows affected (0.001 sec)
MariaDBではカスタム認証メカニズムを使用できるため、次の2つのステートメントを実行して、rootアカウントに割り当てた新しいパスワードにMariaDBがデフォルトの認証メカニズムを使用するようにします。
- UPDATE mysql.user SET authentication_string = '' WHERE user = 'root';
- UPDATE mysql.user SET plugin = '' WHERE user = 'root';
ステートメントごとに次の出力が表示されます。
OutputQuery OK, 0 rows affected (0.01 sec)
パスワードが変更されました。 exit
と入力してMariaDBコンソールを終了し、手順4に進んでデータベースサーバーを通常モードで再起動します。
MySQLパスワードの変更
MySQLの場合、次のステートメントを実行して root ユーザーのパスワードを変更し、new_password
を覚えやすい強力なパスワードに置き換えます。 MySQLではカスタム認証メカニズムの使用が許可されているため、次のステートメントは、MySQLがデフォルトの認証メカニズムを使用して、新しいパスワードを使用してrootユーザーを認証することも確認します。
- ALTER USER 'root'@'localhost' IDENTIFIED WITH caching_sha2_password BY 'new_password';
パスワードが正常に変更されたことを示す次の出力が表示されます。
OutputQuery OK, 0 rows affected (0.01 sec)
パスワードが変更されました。 exit
と入力して、MySQLコンソールを終了します。
通常の操作モードでデータベースを再起動してみましょう。
ステップ4—データベースサーバーを通常の設定に戻す
データベースサーバーを通常モードで再起動するには、行った変更を元に戻して、ネットワークを有効にし、許可テーブルをロードする必要があります。 繰り返しますが、使用する方法は、MariaDBとMySQLのどちらを使用したかによって異なります。
MariaDBの場合、前に設定したMYSQLD_OPTS
環境変数の設定を解除します。
- sudo systemctl unset-environment MYSQLD_OPTS
次に、systemctl
を使用してサービスを再起動します。
- sudo systemctl restart mariadb
MySQLの場合、変更されたsystemd構成を削除します。
- sudo systemctl revert mysql
次のような出力が表示されます。
OutputRemoved /etc/systemd/system/mysql.service.d/override.conf.
Removed /etc/systemd/system/mysql.service.d.
次に、systemd構成をリロードして、変更を適用します。
- sudo systemctl daemon-reload
最後に、サービスを再起動します。
- sudo systemctl restart mysql
これでデータベースが再起動され、通常の状態に戻ります。 root ユーザーとしてパスワードを使用してログインし、新しいパスワードが機能することを確認します。
- mysql -u root -p
パスワードの入力を求められます。 新しいパスワードを入力すると、期待どおりにデータベースプロンプトにアクセスできるようになります。
結論
MySQLまたはMariaDBサーバーへの管理アクセスを復元しました。 選択した新しいパスワードが強力で安全であることを確認し、安全な場所に保管してください。
ユーザー管理、認証メカニズム、または他のバージョンのMySQLまたはMariaDBのデータベースパスワードをリセットする方法の詳細については、公式のMySQLドキュメントまたはMariaDBドキュメントを参照してください。