MeWrite Docs

Access denied for user 'root'@'localhost'

MySQLで認証に失敗した場合のエラー

概要

Access denied は、MySQLへの接続時にユーザー認証に失敗した場合に発生するエラーです。

エラーメッセージ

ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: YES)
ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: NO)

原因

1. パスワードが間違っている

2. ユーザーが存在しない

3. ホスト制限

4. 認証プラグインの問題

解決策

1. パスワードリセット(root)

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
# MySQLを停止
sudo systemctl stop mysql

# セーフモードで起動
sudo mysqld_safe --skip-grant-tables &

# パスワードなしでログイン
mysql -u root

# パスワードをリセット(MySQL 5.7+)
ALTER USER 'root'@'localhost' IDENTIFIED BY 'new_password';
FLUSH PRIVILEGES;

# MySQL 5.6以前
UPDATE mysql.user SET Password=PASSWORD('new_password') WHERE User='root';
FLUSH PRIVILEGES;

2. ユーザーを作成

1
2
3
4
-- rootでログイン後
CREATE USER 'myuser'@'localhost' IDENTIFIED BY 'password';
GRANT ALL PRIVILEGES ON mydb.* TO 'myuser'@'localhost';
FLUSH PRIVILEGES;

3. ホスト制限を確認

1
2
3
4
5
6
7
-- ユーザーのホスト設定を確認
SELECT User, Host FROM mysql.user;

-- 任意のホストからの接続を許可
CREATE USER 'myuser'@'%' IDENTIFIED BY 'password';
GRANT ALL PRIVILEGES ON mydb.* TO 'myuser'@'%';
FLUSH PRIVILEGES;

4. 認証プラグインを変更(MySQL 8.0+)

1
2
3
-- caching_sha2_password から mysql_native_password に変更
ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'password';
FLUSH PRIVILEGES;

5. 権限を確認

1
2
3
4
5
6
-- ユーザーの権限を確認
SHOW GRANTS FOR 'myuser'@'localhost';

-- 権限を付与
GRANT SELECT, INSERT, UPDATE, DELETE ON mydb.* TO 'myuser'@'localhost';
FLUSH PRIVILEGES;

6. アプリケーション設定

1
2
3
4
5
6
// PHP
$pdo = new PDO(
    'mysql:host=localhost;dbname=mydb',
    'myuser',
    'password'
);
1
2
3
4
5
6
7
8
9
# Python
import mysql.connector

conn = mysql.connector.connect(
    host='localhost',
    user='myuser',
    password='password',
    database='mydb'
)
1
2
3
4
5
6
7
8
// Node.js
const mysql = require('mysql2');
const connection = mysql.createConnection({
  host: 'localhost',
  user: 'myuser',
  password: 'password',
  database: 'mydb'
});

Docker環境での対処

1
2
3
4
5
6
7
8
9
# docker-compose.yml
services:
  mysql:
    image: mysql:8.0
    environment:
      MYSQL_ROOT_PASSWORD: rootpassword
      MYSQL_DATABASE: mydb
      MYSQL_USER: myuser
      MYSQL_PASSWORD: userpassword
1
2
# コンテナ内でMySQLに接続
docker exec -it mysql-container mysql -u root -p

関連エラー

関連エラー

MySQL の他のエラー

最終更新: 2025-12-17