ウェブサイト検索

Linux で MySQL ルートユーザーのパスワードをリセットする方法


MySQL の root ユーザーのパスワードを忘れましたか?心配ない!このガイドでは、Linux オペレーティング システムで MySQL root ユーザーのパスワードをリセットする手順を説明します。以下に示す手順は、MariaDB の root パスワードのリセットにも機能するはずです。

MySQL 5.7 などの古いバージョンの MySQL でルート (管理者) ユーザーのパスワードをリセットするためのガイドをすでに投稿しました。ただし、その方法は新しい MySQL 8 バージョンでは機能しませんでした。 MySQL 8 で root パスワードをリセットしたい場合は、以下の 2 つの回避策のいずれかに従ってください。

Linux で MySQL ルート ユーザーのパスワードをリセットする

すでに述べたように、MySQL の root パスワードは 2 つの方法でリセットできます。

  • 一般的な方法としては、
  • init_file システム変数を使用します。

1. MySQL の root パスワードをリセットする一般的な方法

この方法は、使用しているオペレーティング システムに関係なく機能します。 を使用して MySQL サーバーを起動するため、これは安全性が低い方法であることを警告します-- Skip-grant-tables オプション。これにより、 サーバーにアクセスできる人は誰でもすべてのデータベースに無制限にアクセスできるようになります。

まず、次のコマンドを使用して MySQL サービスを停止します。

sudo systemctl stop mysql

MySQL が実際に停止しているかどうかは、次のコマンドで確認できます。

sudo systemctl status mysql

サンプル出力:

● mysql.service - MySQL Community Server
      Loaded: loaded (/lib/systemd/system/mysql.service; enabled; vendor preset: enabled)
      Active: inactive (dead) since Sat 2021-05-29 11:53:08 UTC; 8s ago
     Process: 560 ExecStartPre=/usr/share/mysql/mysql-systemd-start pre (code=exited, status=0/SUCCESS)
     Process: 666 ExecStart=/usr/sbin/mysqld (code=exited, status=0/SUCCESS)
    Main PID: 666 (code=exited, status=0/SUCCESS)
      Status: "Server shutdown complete"
 May 29 10:08:33 ubunt4.localdomain systemd[1]: Starting MySQL Community Server…
 May 29 10:08:37 ubunt4.localdomain systemd[1]: Started MySQL Community Server.
 May 29 11:53:07 ubunt4.localdomain systemd[1]: Stopping MySQL Community Server…
 May 29 11:53:08 ubunt4.localdomain systemd[1]: mysql.service: Succeeded.
 May 29 11:53:08 ubunt4.localdomain systemd[1]: Stopped MySQL Community Server.

MySQL サービスが実行されていません。

ここで、次のコマンドを実行して、権限チェックを行わずに MySQL サーバーを再起動します。

sudo mysqld_safe --skip-grant-tables --skip-networking &

ここで、--skip-grant-tables オプションを使用すると、パスワードなしですべての権限で mysql データベース サーバーに接続できます。 --skip-networking オプションは、他のクライアントがデータベース サーバーに接続できないようにするために使用されます。また、アンパサンド (&) 記号はコマンドをバックグラウンドで実行するために使用されるため、後続の手順で指定される他のコマンドを入力できるようになります。上記のコマンドは危険であり、データベース サーバーの安全性が低下し、セキュリティの脅威に対して脆弱になることに注意してください。パスワードをリセットするには、このコマンドを短時間のみ実行する必要があります。

次のエラーが表示される場合があります。

2021-05-29T12:00:19.991826Z mysqld_safe Logging to '/var/log/mysql/error.log'.
2021-05-29T12:00:19.996942Z mysqld_safe Directory '/var/run/mysqld' for UNIX socket file don't exists.

このエラーが表示された場合は、不足しているディレクトリ (つまり、/var/run/mysqld) を作成し、以下のように適切な権限をそれに設定します。

sudo mkdir -p /var/run/mysqld
sudo chown -R mysql:mysql /var/run/mysqld

次に、パスワードなしで root 権限を使用して mysql サーバーを再起動してみます。

sudo mysqld_safe --skip-grant-tables --skip-networking &

次に、コマンドを使用して mysql サーバーに接続します。

mysql

mysql シェル プロンプトが表示されます。

 Welcome to the MySQL monitor.  Commands end with ; or \g.
 Your MySQL connection id is 7
 Server version: 8.0.25-0ubuntu0.20.04.1 (Ubuntu)

 Copyright (c) 2000, 2021, Oracle and/or its affiliates.

 Oracle is a registered trademark of Oracle Corporation and/or its
 affiliates. Other names may be trademarks of their respective
 owners.

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

付与テーブルをロードせずにログインしたため (--skip-grant-tables オプションを使用したため)、ALTER USER コマンドを使用してパスワードをリセットすることはできません。そこで、次のコマンドを使用して許可テーブルをロードしましょう。

mysql> FLUSH PRIVILEGES;

ここで、次のコマンドを実行して、mysql root ユーザーのパスワードを更新します。

mysql> ALTER USER 'root'@'localhost' IDENTIFIED BY 'P@ssw0rd123#@!';

上記のコマンドで、P@ssw0rd123#@! を独自のパスワードに置き換えます。 Validate Password コンポーネントを有効にしている場合は、強力なパスワードを使用する必要があることに注意してください。

最後に、mysql プロンプトを終了します。

mysql> exit

Linux で MySQL ルート ユーザーのパスワードをリセットする

最後に、--skip-grant-tables オプションを使用して以前に起動した実行中のデータベース サーバーをシャットダウンします。これを行うには、次を実行します。

sudo mysqladmin -u root -p shutdown

sudo パスワードの入力を求められ、その後に前の手順で設定した MySQL root ユーザー パスワードを入力するよう求められます。

[sudo] password for ostechnix: 
Enter password: 
2021-05-29T12:09:38.425737Z mysqld_safe mysqld from pid file /var/lib/mysql/ubunt4.localdomain.pid ended
[1]+  Done                    sudo mysqld_safe --skip-grant-tables --skip-networking

上記のコマンドが機能しない場合は、サーバーのプロセス ID を含む .pid ファイル を見つけます。 PID ファイルは通常、/var/lib/mysql/ または /var/run/mysqld/ で入手できます。 > または /usr/local/mysql/data/ ディレクトリ (ディストリビューション、ホスト名、構成に応じて異なります)。通常、ファイル名には .pid という拡張子が付き、mysqld またはシステムのホスト名のいずれかで始まります。

私の場合、それは "/var/lib/mysql/ubuntuserver.pid" です。

そこで、次のコマンドを使用してデータベースサーバーのインスタンスを停止しました。

sudo kill `/var/lib/mysql/ubuntuserver.pid`

ファイル パスを指定するにはバックティックを使用してください。

以下のような ps および grep コマンドを使用して MySQL pid を見つけることもできます。

ps ax | grep mysql

サンプル出力:

1930 pts/0 S 0:00 sudo mysqld_safe --skip-grant-tables --skip-networking
1931 pts/0 S 0:00 /bin/sh /usr/bin/mysqld_safe --skip-grant-tables --skip-networking
2091 pts/0 Sl 0:28 /usr/sbin/mysqld --basedir=/usr --datadir=/var/lib/mysql --plugin-dir=/usr/lib/mysql/plugin --user=mysql --skip-grant-tables --skip-networking --log-error=/var/log/mysql/error.log --pid-file=ubuntuserver.pid

以下のように手動で強制終了します。

sudo kill <PID>

または、すべての MySQL サービスを強制終了します。

sudo  killall mysql

次に、次のコマンドを使用して MySQL サービスを通常どおり開始します。

sudo systemctl start mysql

次に、新しいパスワードを使用して MySQL サーバーにログインします。

mysql -u root -p

サンプル出力:

新しい root パスワードを使用して MySQL サーバーに接続します

新しい root パスワードを使用して MySQL サーバーに接続します

2. パスワードファイルを使用して MySQL root パスワードをリセットする

mysql root パスワードをリセットするもう 1 つの方法は、init_file システム変数を使用することです。

MySQL サービスを停止します。

sudo systemctl stop mysql

テキスト ファイル (例: ostechnix.txt) を作成します。

vi ostechnix.txt

そこに次の行を追加します。

ALTER USER 'root'@'localhost' IDENTIFIED BY 'P@ssw0rd123#@!';

上の行の P@ssw0rd123#@! を自分のパスワードに置き換えます。 Validate Password プラグインを有効にしている場合は、強力なパスワードを指定する必要があります。ファイルを保存して閉じます。

ここで、ostechnix.txt ファイルを指す init_file システム変数を使用して MySQL サーバーを起動します。

sudo mysqld --init-file=/home/sk/ostechnix.txt &

このコマンドは、ostechnix.txt ファイルの内容を実行し、root@localhost アカウントのパスワードを ostechnix.txt ファイルに記載されている新しいパスワードで更新します。そして最後にmysqlサーバーを起動します。

次に、mysql サーバーを通常どおり停止して再起動します。

sudo systemctl stop mysql
sudo systemctl start mysql

最後に、パスワード ファイル (ostechnix.txt) を削除します。

rm /home/sk/ostechnix.txt

これで、次のコマンドを使用して、新しいパスワードで mysql サーバーにログインできるようになります。

mysql -u root -p

また、MySQL の root パスワードをリセットする少し異なる方法も掲載しました。詳細については、次のガイドを確認してください。

>> How To Reset Root Password In MySQL 8 On Ubuntu Linux

結論

このガイドでは、Linux オペレーティング システムで忘れた MySQL root ユーザーのパスワードをリセットする 2 つの異なる方法を学習しました。データベース管理アカウントのユーザー パスワードを紛失した場合は、数分で簡単にリセットできます。

リソース:

  • MySQL 8.0 リファレンス マニュアル

関連記事