MySQLでrootのパスワードを忘れたりログインできなくなった場合の対処方法

はじめに
MySQLのrootのパスワードを忘れてしまいrootでログインできなくなってしまいましたが、rootのパスワードを再設定することができたのでその手順をまとめます。
状況について
どのような状況だったかというと、以下のようにrootでMySQLにログインしようと色々と試しましたがいずれも同じエラーERROR 1045 (28000): Access denied for user 'root'@'localhost'
がでました。
このエラーはrootのパスワードが間違っていることが原因ですが、そもそもrootのパスワードを設定しなかったり、rootでのパスワードによるログインを許可していない場合にも発生します。これらはそれぞれの状況によって異なります。
特にMySQL 5.7以降では、MySQLのrootユーザでのログインはパスワードを使用できないようになっており、システムのrootユーザでログインするのがデフォルトになっています。これについてはMySQLにパスワードでログインできるように設定変更するにまとめているので、もし新しくMySQL 5.7以降をインストールしたばかりで上記のエラーがでているような場合は見てみてください。
今回私が使用していたMySQLも5.7ですが、元々はMySQL5.6を使用していてアップデートして5.7になっていました。
前提と環境
以下の環境です。
- OS : Ubuntu 18.04
- MySQL 5.7
以降の作業を行う前に、rootユーザ以外のMySQLユーザ等でできる限りMySQLのバックアップを取っておくことをお勧めします。
rootのパスワードをリセットする手順
まず、MySQLを停止します。
systemctl
を使って停止してもOKです。
MySQLを停止後、以下のコマンドでMySQLをセーフモードで起動します。
セーフモードで起動して--skip-grant-tables
オプションを使うと、どのユーザーでもパスワードなしで接続できるようになり、すべての権限が付与されます。したがって以降の作業が完了したた確実にセーフモードで起動されているMySQLを停止するよう注意してください。これについてはMySQL 5.6の公式ドキュメントですがroot のパスワードをリセットする方法の「root のパスワードのリセット: 一般的な手順」に記載されています。
もし上記のコマンドで以下のようなエラーが出た場合は、これ以降の作業を進める前に後述する方法で対応が必要です。
上記でMySQLをセーフモードで起動後、以下のようにrootユーザでMySQLにログインします。
ログイン後、以下を実行します。
上記ではユーザー情報などを含むmysql
データベースに切り替えて、rootユーザ用のパスワードを再設定しています。yourrootpassword
を各自のrootに設定したいパスワードに置き換えてください。
パスワードの再設定が完了したらMySQLからログアウトします。
MySQLからログアウト後、セーフモードで起動しているMySQLのプロセスを全て停止します。そのためにMySQLのプロセスを確認して、プロセスIDをkillします。
MySQLを起動します。
先程設定したrootのパスワードを使って以下でMySQLにログインできれば完了です。
MySQLをセーフモードで起動時にエラーがでる場合
私の環境ではMySQLをセーフモードで起動した時に以下のようなエラーが出ました。
これはエラーメッセージに書いてある通り、/var/run/mysqld
というディレクトリがないことが原因です。よってMySQLがアクセスできる形で/var/run/mysqld
を作成してあげます。
上記で完了です。再度MySQLをセーフモードで起動してみると起動できると思います。
まとめ
MySQLのrootのパスワードを忘れてしまった場合の対処方法をまとめました。各自の状況によってうまく行かない可能性もありますがわずかでも参考になれば幸いです。
関連記事
- 公開日:2019/09/09 更新日:2019/09/09
CSVファイルをMySQLにインポートするSQL文
CSVファイルをMySQLにインポートするSQL文をよく使うのでこのSQL文についてメモします。
- 公開日:2019/05/27 更新日:2019/05/27
Ubuntu18.04にMySQLをインストールする手順
UbuntuにMySQLサーバをインストールする機会が何かと多く、MySQL5.7以降で少々設定が変わっていたのでインストールと設定手順をまとめます。
- 公開日:2019/04/19 更新日:2019/04/19
MySQL Workbenchでエクスポート時にmysqldump Version Mismatchが出る場合の解決策
リモートサーバ上のMySQLデータベースの中身をちょっと確認したい時にMySQL Workbenchを使用しています。SSH経由での接続ももちろん可能で特に不満なく使えます。ただ、エクスポートする際に警告が表示されて解決に少しだけ時間かかってしまったので原因と解決手順をメモします。
- 公開日:2015/03/16 更新日:2015/03/16
Ruby on RailsでMySQLを使用する際に必要な作業手順
RailsではデータベースとしてSQLite3をデフォルトで使用しますが、SQLite3ではなくMySQLを使用したかったので、RailsでMySQLを使用するために行った作業をメモしておきます。
開発アプリ
