前書き

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

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

前提条件

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

  • MySQLまたはMariaDBを実行しているUbuntu 18.04サーバーへのアクセス(sudoユーザー、またはルート権限でサーバーにアクセスする他の方法)。 本番サーバーに影響を与えずにこのチュートリアルの復旧方法を試すには、https://www.digitalocean.com/community/tutorials/initial-server-setup-with-ubuntu-18-04 [初期サーバー設定チュートリアル] sudo特権を持つ通常の非rootユーザーでテストサーバーを作成します。 次に、https://www.digitalocean.com/community/tutorials/how-to-install-mysql-on-ubuntu-18-04 [Ubuntu 18.04にMySQLをインストールする方法]に従ってMySQLをインストールします。

手順1-データベースバージョンの特定とサーバーの停止

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

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

mysql --version

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

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

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

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

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

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

sudo systemctl stop

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

sudo systemctl stop

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

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

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

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

付与テーブルなしで開始するためのMariaDBの構成

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

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

sudo systemctl set-environment MYSQLD_OPTS=""

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

sudo systemctl start mariadb

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

`+ sudo systemctl status mariadb +`で開始されたことを確認できます。

これで、パスワードを入力せずにMariaDB * root *ユーザーとしてデータベースに接続できるはずです。

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

このコマンドは、 `+ nano +`エディターで新しいファイルを開きます。これを使用して、MySQLの_service overrides_を編集します。 これらは、MySQLのデフォルトのサービスパラメータを変更します。 このファイルは空なので、次のコンテンツを追加します。

MySQLサービスのオーバーライド

[Service]
ExecStart=
ExecStart=/usr/sbin/mysqld --daemonize --pid-file=/run/mysqld/mysqld.pid

最初の `+ 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 *パスワードを変更できます。

手順3-ルートパスワードの変更

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

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

FLUSH PRIVILEGES;

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

MariaDBパスワードの変更

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

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

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

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

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

UPDATE mysql.user SET authentication_string = '' WHERE user = '';
UPDATE mysql.user SET plugin = '' WHERE user = '';

各ステートメントについて次の出力が表示されます。

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('') WHERE user = '';

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

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 = '';

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

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

これでパスワードが変更されました。 「+ 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

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

結論

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

ユーザー管理、認証メカニズム、またはMySQLまたはMariaDBの他のバージョンのデータベースパスワードをリセットする方法の詳細については、公式のhttps://dev.mysql.com/doc/[MySQLドキュメント]またはhttps://を参照してください。 mariadb.com/kb/en/library/documentation/[MariaDBドキュメント]。