序章

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

注: Ubuntu 18.04の新規インストールでは、通常、デフォルトのMySQLまたはMariaDB構成により、システムのから接続している限り、パスワードを指定せずにデータベースにアクセスできます(完全な管理者権限を使用)。 rootアカウント。 このシナリオでは、パスワードをリセットする必要がない場合があります。 データベースrootパスワードをリセットする前に、 sudo mysql 指図。 認証のデフォルト構成が変更され、その結果アクセス拒否エラーが発生した場合にのみ、このチュートリアルの手順に従ってください。

このチュートリアルでは、MySQLおよびMariaDBデータベースのrootパスワードをリセットする方法を示します。 apt Ubuntu18.04のパッケージマネージャー。 ルートパスワードを変更する手順は、MySQLまたはMariaDBがインストールされているかどうか、および他のベンダーのディストリビューションまたはパッケージに付属しているデフォルトのsystemd構成によって異なります。 このチュートリアルの手順は、他のシステムまたはデータベースサーバーのバージョンでも機能する可能性がありますが、Ubuntu18.04およびディストリビューション提供のパッケージで明示的にテストされています。

前提条件

MySQLまたはMariaDBroot パスワードを回復するには、次のものが必要です。

  • sudoユーザーまたはroot権限でサーバーにアクセスする他の方法でMySQLまたはMariaDBを実行しているUbuntu18.04サーバーにアクセスします。 本番サーバーに影響を与えずにこのチュートリアルのリカバリ方法を試すには、初期サーバーセットアップチュートリアルを使用して、sudo権限を持つ通常の非rootユーザーでテストサーバーを作成します。 次に、 Ubuntu18.04にMySQLをインストールする方法に従ってMySQLをインストールします。

ステップ1—データベースのバージョンを特定してサーバーを停止する

Ubuntu 18.04は、MySQLまたはMariaDBのいずれかを実行します。これは、MySQLと完全に互換性のある人気のあるドロップイン代替品です。 を回復するには、さまざまなコマンドを使用する必要があります root インストールしたデータベースに応じてパスワードを設定するため、このセクションの手順に従って、実行しているデータベースサーバーを確認してください。

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

  1. mysql --version

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

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

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

MySQL output
mysql Ver 14.14 Distrib 5.7.32, for Linux (x86_64) using EditLine wrapper

このチュートリアルの残りの部分で従うべき適切なコマンドを決定するので、どのデータベースをメモしてください。

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環境変数が設定されます。 The --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

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

MariaDB prompt
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement. MariaDB [(none)]>

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

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

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

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

  1. sudo systemctl edit mysql

このコマンドは、で新しいファイルを開きます nano これは、MySQLのサービスオーバーライドを編集するために使用します。 これらは、MySQLのデフォルトのサービスパラメータを変更します。 このファイルは空になるので、次のコンテンツを追加します。

MySQLサービスのオーバーライド
[Service]
ExecStart=
ExecStart=/usr/sbin/mysqld --daemonize --pid-file=/run/mysqld/mysqld.pid --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

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

MySQL prompt
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement. mysql>

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

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

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

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

  1. FLUSH PRIVILEGES;

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

MariaDBパスワードの変更

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

  1. UPDATE mysql.user SET password = PASSWORD('new_password') WHERE user = 'root';

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

Output
Query OK, 1 row affected (0.00 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 強力なパスワードを使用すると、次のことを覚えておくことができます。

  1. UPDATE mysql.user SET authentication_string = PASSWORD('new_password') WHERE user = 'root';

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

Output
Query OK, 1 row affected (0.00 sec)

MySQLではカスタム認証メカニズムの使用が許可されているため、次のステートメントを実行して、デフォルトの認証メカニズムを使用して新しいパスワードを使用してrootユーザーを認証するようにMySQLに指示します。

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

前のコマンドと同様の出力が表示されます。

Output
Query OK, 1 row affected (0.00 sec)

パスワードが変更されました。 次のように入力してMySQLコンソールを終了します exit.

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

ステップ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ドキュメントを参照してください。