著者は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パスワードを回復する必要があるため、このセクションの手順に従って、実行しているデータベースサーバーを確認してください。

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

  1. mysql --version

MariaDBを実行している場合は、出力にバージョン番号が前に付いた「MariaDB」が表示されます。

MariaDB output
mysql Ver 15.1 Distrib 10.3.25-MariaDB, for debian-linux-gnu (x86_64) using readline 5.2

MySQLを実行している場合は、次のような出力が表示されます。

MySQL output
mysql Ver 8.0.22-0ubuntu0.20.04.3 for Linux on x86_64 ((Ubuntu))

実行しているデータベースに注意してください。 これにより、このチュートリアルの残りの部分で従うべき適切なコマンドが決まります。

root パスワードを変更するには、データベースサーバーをシャットダウンする必要があります。 MariaDBを実行している場合は、次のコマンドを使用して実行できます。

  1. sudo systemctl stop mariadb

MySQLの場合、以下を実行してデータベースサーバーをシャットダウンします。

  1. sudo systemctl stop mysql

データベースを停止した状態で、セーフモードでデータベースを再起動して、rootパスワードをリセットできます。

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

権限チェックなしでMySQLとMariaDBを実行すると、有効なパスワードを指定せずにroot権限でデータベースコマンドラインにアクセスできます。 これを行うには、データベースがユーザー特権情報を格納する付与テーブルをロードしないようにする必要があります。 これはセキュリティ上のリスクが少しあるため、ネットワークを無効にして、他のクライアントが一時的に脆弱なサーバーに接続できないようにすることもできます。

インストールしたデータベースサーバーによって、グラントテーブルをロードせずにサーバーを起動する方法が異なります。

Grantテーブルなしで開始するようにMariaDBを構成する

付与テーブルなしでMariaDBサーバーを起動するには、systemdユニットファイルを使用して、MariaDBサーバーデーモンの追加パラメーターを設定します。

次のコマンドを実行します。これにより、起動時にMariaDBが使用するMYSQLD_OPTS環境変数が設定されます。 --skip-grant-tablesおよび--skip-networkingオプションは、Grantテーブルまたはネットワーク機能をロードせずに起動するようにMariaDBに指示します。

  1. sudo systemctl set-environment MYSQLD_OPTS="--skip-grant-tables --skip-networking"

次に、MariaDBサーバーを起動します。

  1. sudo systemctl start mariadb

このコマンドは出力を生成しませんが、新しい環境変数設定を考慮して、データベースサーバーを再起動します。

sudo systemctl status mariadbで開始されていることを確認できます。

これで、パスワードを入力しなくても、MariaDB rootユーザーとしてデータベースに接続できるようになります。

  1. sudo mysql -u root

データベースシェルプロンプトがすぐに表示されます。

データベースサーバーにアクセスできるようになったので、手順3に示すようにrootパスワードを変更できます。

Grantテーブルなしで開始するようにMySQLを構成する

付与テーブルなしでMySQLサーバーを起動するには、MySQLのsystemd構成を変更して、起動時に追加のコマンドラインパラメーターをサーバーに渡します。

これを行うには、次のコマンドを実行します。

  1. sudo systemctl edit mysql

このコマンドは、nanoエディターで新しいファイルを開きます。このファイルを使用して、MySQLのサービスオーバーライドを編集します。 これらは、MySQLのデフォルトのサービスパラメータを変更します。

このファイルは空になります。 次のコンテンツを追加します。

MySQLサービスのオーバーライド
[Service]
ExecStart=
ExecStart=/usr/sbin/mysqld --skip-grant-tables --skip-networking

最初のExecStartステートメントはデフォルト値をクリアし、2番目のステートメントはsystemdに、許可テーブルとネットワーク機能のロードを無効にするパラメーターを含む新しいスタートアップコマンドを提供します。

CTRL-xを押してファイルを終了し、Yを押して変更を保存し、ENTERを押してファイル名を確認します。

systemd構成を再ロードして、これらの変更を適用します。

  1. sudo systemctl daemon-reload

次に、MySQLサーバーを起動します。

  1. sudo systemctl start mysql

コマンドは出力を表示しませんが、データベースサーバーは起動します。 付与テーブルとネットワークは有効になりません。

rootユーザーとしてデータベースに接続します。

  1. sudo mysql -u root

データベースシェルプロンプトがすぐに表示されます。

サーバーにアクセスできるようになったので、rootパスワードを変更できます。

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

データベースサーバーは現在、制限付きモードで実行されています。 付与テーブルはロードされておらず、ネットワークサポートは有効になっていません。 これにより、パスワードを入力せずにサーバーにアクセスできますが、データを変更するコマンドを実行することはできません。 root パスワードをリセットするには、サーバーにアクセスできるようになったので、許可テーブルをロードする必要があります。

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

  1. FLUSH PRIVILEGES;

rootパスワードを変更できるようになりました。 使用する方法は、MariaDBとMySQLのどちらを使用しているかによって異なります。

MariaDBパスワードの変更

MariaDBを使用している場合は、次のステートメントを実行して root アカウントのパスワードを設定し、new_passwordを覚えやすい強力な新しいパスワードに置き換えてください。

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

パスワードが変更されたことを示す次の出力が表示されます。

Output
Query OK, 0 rows affected (0.001 sec)

MariaDBではカスタム認証メカニズムを使用できるため、次の2つのステートメントを実行して、rootアカウントに割り当てた新しいパスワードにMariaDBがデフォルトの認証メカニズムを使用するようにします。

  1. UPDATE mysql.user SET authentication_string = '' WHERE user = 'root';
  2. UPDATE mysql.user SET plugin = '' WHERE user = 'root';

ステートメントごとに次の出力が表示されます。

Output
Query OK, 0 rows affected (0.01 sec)

パスワードが変更されました。 exitと入力してMariaDBコンソールを終了し、手順4に進んでデータベースサーバーを通常モードで再起動します。

MySQLパスワードの変更

MySQLの場合、次のステートメントを実行して root ユーザーのパスワードを変更し、new_passwordを覚えやすい強力なパスワードに置き換えます。 MySQLではカスタム認証メカニズムの使用が許可されているため、次のステートメントは、MySQLがデフォルトの認証メカニズムを使用して、新しいパスワードを使用してrootユーザーを認証することも確認します。

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

パスワードが正常に変更されたことを示す次の出力が表示されます。

Output
Query OK, 0 rows affected (0.01 sec)

パスワードが変更されました。 exitと入力して、MySQLコンソールを終了します。

通常の操作モードでデータベースを再起動してみましょう。

ステップ4—データベースサーバーを通常の設定に戻す

データベースサーバーを通常モードで再起動するには、行った変更を元に戻して、ネットワークを有効にし、許可テーブルをロードする必要があります。 繰り返しますが、使用する方法は、MariaDBとMySQLのどちらを使用したかによって異なります。

MariaDBの場合、前に設定したMYSQLD_OPTS環境変数の設定を解除します。

  1. sudo systemctl unset-environment MYSQLD_OPTS

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

  1. sudo systemctl restart mariadb

MySQLの場合、変更されたsystemd構成を削除します。

  1. sudo systemctl revert mysql

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

Output
Removed /etc/systemd/system/mysql.service.d/override.conf. Removed /etc/systemd/system/mysql.service.d.

次に、systemd構成をリロードして、変更を適用します。

  1. sudo systemctl daemon-reload

最後に、サービスを再起動します。

  1. sudo systemctl restart mysql

これでデータベースが再起動され、通常の状態に戻ります。 root ユーザーとしてパスワードを使用してログインし、新しいパスワードが機能することを確認します。

  1. mysql -u root -p

パスワードの入力を求められます。 新しいパスワードを入力すると、期待どおりにデータベースプロンプトにアクセスできるようになります。

結論

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

ユーザー管理、認証メカニズム、または他のバージョンのMySQLまたはMariaDBのデータベースパスワードをリセットする方法の詳細については、公式のMySQLドキュメントまたはMariaDBドキュメントを参照してください。