「Access denied for user 'root'@'localhost'」エラーの解決方法
Ubuntuの新規インストール後、「mysql」または「mariadb」にアクセスできない場合の解決策
Ubuntuに「mysql」または「mariadb」をインストール後、rootユーザーでログインしようとすると、以下のエラーメッセージが表示されます。
ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: YES)
原因:
このエラーメッセージは、rootユーザーのパスワードが正しく設定されていない、または設定ファイルに誤りがあることを示しています。
解決策:
以下のいずれかの方法で問題を解決できます。
rootユーザーのパスワードを設定する
以下のコマンドを実行して、rootユーザーのパスワードを設定します。
sudo mysql_secure_installation
設定ファイルを編集する
以下のコマンドを実行して、設定ファイルを開きます。
sudo nano /etc/mysql/mysql.conf.d/mysqld.cnf
ファイル内に以下の行があることを確認してください。
bind-address = 127.0.0.1
この行がない場合は追加してください。
サービスを再起動する
sudo service mysql restart
接続を試す
mysql -u root -p
パスワードを入力すると、接続できるはずです。
上記の方法で解決できない場合は、以下の点を確認してください。
- ユーザー名とパスワードが正しいことを確認してください。
- 設定ファイルの構文が正しいことを確認してください。
- ファイアウォールが接続を妨げていないことを確認してください。
補足:
- 上記の解決策は、Ubuntu 20.04 LTSで確認しています。他のバージョンのUbuntuでは、手順が異なる場合があります。
- 問題解決のためには、コマンドを実行する前に必ずバックアップを取るようにしてください。
# パスワード設定コマンド
sudo mysql_secure_installation
# 設定ファイルを開く
sudo nano /etc/mysql/mysql.conf.d/mysqld.cnf
# 設定ファイルに以下の行を追加
bind-address = 127.0.0.1
# ファイルを保存して閉じる
Ctrl + O
Enter
# 設定を反映させるためにサービスを再起動
sudo service mysql restart
# rootユーザーで接続
mysql -u root -p
# パスワードを入力
他の方法
パスワードをリセットする
sudo mysqld_safe --skip-grant-tables
このコマンドを実行すると、パスワードなしでrootユーザーで接続できるようになります。接続後、以下のコマンドを実行してパスワードを設定してください。
SET PASSWORD FOR root@localhost = '新しいパスワード';
ソケットファイルを使用する
mysql -u root -S /var/run/mysqld/mysqld.sock
リモート接続を許可する
デフォルトでは、リモートからの接続は許可されていません。リモートから接続できるようにするには、設定ファイルを編集する必要があります。
sudo nano /etc/mysql/mysql.conf.d/mysqld.cnf
bind-address = 0.0.0.0
権限を確認する
rootユーザーに接続できても、特定のデータベースにアクセスできない場合は、権限を確認する必要があります。
SHOW GRANTS FOR root@localhost;
問題解決のためのツールを使用する
MySQL Workbenchなどのツールを使用すると、問題を診断したり、解決したりすることができます。
- 上記の方法を試しても問題が解決しない場合は、専門家に相談することをお勧めします。
mysql mariadb