前書き
パスワードを忘れるのは私たちにとって最高のことです。 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を参照してください。