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 リファレンス マニュアル