MySQLのrootユーザーのパスワードを忘れましたか?心配ない!このガイドでは、LinuxオペレーティングシステムでMySQLrootユーザーのパスワードをリセットする手順について説明します。以下の手順は、MariaDBのrootパスワードをリセットする場合にも機能するはずです。
MySQLでroot(管理)ユーザーパスワードをリセットするガイドをすでに投稿しています。 古いバージョン、つまりMySQL5.7。しかし、その方法は新しいMySQL8バージョンでは機能しませんでした。 MySQL 8でrootパスワードをリセットする場合は、以下の2つの回避策のいずれかに従ってください。
LinuxでMySQLルートユーザーパスワードをリセット
すでに述べたように、MySQLのルートパスワードは2つの方法でリセットできます。
- 一般的な方法
-
init_file
を使用する システム変数。
1。 MySQLルートパスワードをリセットする一般的な方法
この方法は、使用しているオペレーティングシステムに関係なく機能します。 安全性が低いことを警告します --skip-grant-tables
を使用してMySQLサーバーを起動するためです。 オプション。これにより、サーバーにアクセスできるすべてのユーザーにすべてのデータベースへの無制限のアクセスが提供されます。 。
まず、コマンドを使用して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 ubuntu2004.localdomain systemd[1]: Starting MySQL Community Server… May 29 10:08:37 ubuntu2004.localdomain systemd[1]: Started MySQL Community Server. May 29 11:53:07 ubuntu2004.localdomain systemd[1]: Stopping MySQL Community Server… May 29 11:53:08 ubuntu2004.localdomain systemd[1]: mysql.service: Succeeded. May 29 11:53:08 ubuntu2004.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;
次に、次のコマンドを実行してmysqlrootユーザーのパスワードを更新します。
mysql> ALTER USER 'root'@'localhost' IDENTIFIED BY '[email protected]#@!';
上記のコマンドで、[email protected]#@!
を置き換えます 自分のパスワードで。 Validate Password
を有効にしている場合は注意してください コンポーネントの場合、強力なパスワードを使用する必要があります。
最後に、mysqlプロンプトを終了します:
mysql> exit
最後に、 --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/ubuntu2004.localdomain.pid ended [1]+ Done sudo mysqld_safe --skip-grant-tables --skip-networking
上記のコマンドが機能しない場合は、.pid file
を見つけてください サーバーのプロセスIDが含まれています。 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
を使用してMySQLpidを見つけることもできます およびgrep
以下のようなコマンド:
$ 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
出力例:
2。 MySQLルートパスワードをパスワードファイルでリセットする
mysqlルートパスワードをリセットする別の方法は、 init_file
を使用することです。 システム変数。
MySQLサービスを停止します:
$ sudo systemctl stop mysql
ostechnix.txt
などのテキストファイルを作成します :
$ vi ostechnix.txt
その中に次の行を追加します:
ALTER USER 'root'@'localhost' IDENTIFIED BY '[email protected]#@!';
[email protected]#@!
を置き換えます 上記の行に自分のパスワードを入力します。 Validate Password
を有効にしている場合 プラグインの場合、強力なパスワードを指定する必要があります。ファイルを保存して閉じます。
次に、init_file
を使用してMySQLサーバーを起動します。 ostechnix.txt
を指すシステム変数 ファイル:
$ sudo mysqld --init-file=/home/sk/ostechnix.txt &
このコマンドは、ostechnix.txt
の内容を実行します ファイルを作成して[email protected]
を更新します 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ルートパスワードをリセットするためのわずかに異なる方法を投稿しました。詳細については、次のガイドを確認してください。
>> How To Reset Root Password In MySQL 8 On Ubuntu Linux
結論
このガイドでは、Linuxオペレーティングシステムで忘れたMySQLrootユーザーパスワードをリセットする2つの異なる方法を学びました。データベース管理者アカウントのユーザーパスワードを紛失した場合は、数分で簡単にリセットできます。