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

前書き

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

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

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

前提条件

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

  • MySQLまたはMariaDBを実行しているUbuntu 18.04サーバーへのアクセス(sudoユーザー、またはルート権限でサーバーにアクセスする他の方法)。 本番サーバーに影響を与えずにこのチュートリアルのリカバリ方法を試すには、initial server setup tutorialを使用して、sudo権限を持つ通常の非rootユーザーでテストサーバーを作成します。 次に、How to install MySQL on Ubuntu 18.04の後にMySQLをインストールします。

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

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

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

mysql --version

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

MariaDB outputmysql  Ver 15.1 Distrib 10.1.29-MariaDB, for debian-linux-gnu (x86_64) using readline 5.2

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

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

このチュートリアルの残りの部分で適切なコマンドを決定するため、どのデータベースをメモします。

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

sudo systemctl stop mariadb

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

sudo systemctl stop mysql

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

[[step-2 -—- restarting-the-database-server-without-permission-checks]] ==ステップ2—権限チェックなしでデータベースサーバーを再起動する

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

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

付与テーブルなしで開始するための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で始まっていることを確認できます。

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

sudo mysql -u root

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

MariaDB promptType 'help;' or '\h' for help. Type '\c' to clear the current input statement.

MariaDB [(none)]>

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

許可テーブルなしで起動するためのMySQLの構成

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

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

sudo systemctl edit mysql

このコマンドは、MySQLのservice overridesを編集するために使用するnanoエディターで新しいファイルを開きます。 これらは、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構成を再ロードして、これらの変更を適用します。

sudo systemctl daemon-reload

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

sudo systemctl start mysql

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

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

sudo mysql -u root

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

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

mysql>

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

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

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

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

FLUSH PRIVILEGES;

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

MariaDBパスワードの変更

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

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

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

OutputQuery OK, 1 row affected (0.00 sec)
Rows matched: 1  Changed: 1  Warnings: 0

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)
Rows matched: 1  Changed: 0  Warnings: 0

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

MySQLパスワードの変更

MySQLの場合、次のステートメントを実行してrootユーザーのパスワードを変更し、new_passwordを覚えやすい強力なパスワードに置き換えます。

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

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

OutputQuery OK, 1 row affected (0.00 sec)
Rows matched: 1  Changed: 1  Warnings: 0

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

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

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

OutputQuery OK, 1 row affected (0.00 sec)
Rows matched: 1  Changed: 1  Warnings: 0

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

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

[[step-4 -—- reverting-your-database-server-to-normal-settings]] ==ステップ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 documentationまたはMariaDB documentationを参照してください。

Related