Ubuntu18.04でMySQLまたはMariaDBのルートパスワードをリセットする方法
序章
パスワードを忘れることは私たちの最善を尽くします。 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
インストールしたデータベースに応じてパスワードを設定するため、このセクションの手順に従って、実行しているデータベースサーバーを確認してください。
次のコマンドでバージョンを確認します。
- mysql --version
MariaDBを実行している場合は、出力にバージョン番号が前に付いた「MariaDB」が表示されます。
MariaDB outputmysql Ver 15.1 Distrib 10.1.47-MariaDB, for debian-linux-gnu (x86_64) using readline 5.2
MySQLを実行している場合は、次のような出力が表示されます。
MySQL outputmysql Ver 14.14 Distrib 5.7.32, for Linux (x86_64) using EditLine wrapper
このチュートリアルの残りの部分で従うべき適切なコマンドを決定するので、どのデータベースをメモしてください。
root パスワードを変更するには、データベースサーバーをシャットダウンする必要があります。 MariaDBを実行している場合は、次のコマンドを使用して実行できます。
- sudo systemctl stop mariadb
MySQLの場合、以下を実行してデータベースサーバーをシャットダウンします。
- 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に指示します。
- 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
データベースシェルプロンプトがすぐに表示されます。
MariaDB promptType 'help;' or '\h' for help. Type '\c' to clear the current input statement.
MariaDB [(none)]>
データベースサーバーにアクセスできるようになったので、手順3に示すようにrootパスワードを変更できます。
Grantテーブルなしで開始するようにMySQLを構成する
付与テーブルなしでMySQLサーバーを起動するには、MySQLのsystemd構成を変更して、起動時に追加のコマンドラインパラメーターをサーバーに渡します。
これを行うには、次のコマンドを実行します。
- sudo systemctl edit mysql
このコマンドは、で新しいファイルを開きます 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パスワードを変更できます。
ステップ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)
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
強力なパスワードを使用すると、次のことを覚えておくことができます。
- UPDATE mysql.user SET authentication_string = PASSWORD('new_password') WHERE user = 'root';
パスワードが正常に変更されたことを示す次の出力が表示されます。
OutputQuery OK, 1 row affected (0.00 sec)
MySQLではカスタム認証メカニズムの使用が許可されているため、次のステートメントを実行して、デフォルトの認証メカニズムを使用して新しいパスワードを使用してrootユーザーを認証するようにMySQLに指示します。
- UPDATE mysql.user SET plugin = 'mysql_native_password' WHERE user = 'root';
前のコマンドと同様の出力が表示されます。
OutputQuery OK, 1 row affected (0.00 sec)
パスワードが変更されました。 次のように入力してMySQLコンソールを終了します exit
.
通常の操作モードでデータベースを再起動してみましょう。
ステップ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ドキュメントを参照してください。