| この記事の要点 |
|
エラー内容
mysql -u root -p でログインしようとすると、正しいパスワードを入力しても次のエラーで弾かれます。
ERROR 1698 (28000): Access denied for user 'root'@'localhost'
phpMyAdmin や Laravel・Django などのアプリから root で接続しようとした場合も、同じ理由で接続できません。
原因: root の認証方式が auth_socket になっている
MySQL ではユーザーごとに認証プラグイン(認証方式)が設定されています。Ubuntu や Debian のパッケージ(apt)で MySQL をインストールすると、root ユーザーは auth_socket プラグインで作成されます。
auth_socket は「接続してきた OS のユーザー名と MySQL のユーザー名が一致すれば、パスワードなしでログインを許可する」方式です。逆に言えば、一般ユーザー(例: ubuntu)のシェルから -u root を指定しても、OS ユーザー名が root ではないため、パスワードが合っていても拒否されます。
| エラー | 主な原因 |
|---|---|
| ERROR 1698 (28000) | auth_socket(MariaDB では unix_socket)の root に、OS の root 以外からログインしようとした |
| ERROR 1045 (28000) | パスワードの誤り、ユーザーやホストの指定違い、権限不足 |
パスワードの入力ミスであれば通常は 1045 になります。1698 が出る場合は、まず認証方式を疑ってください。
対処法 1: sudo でログインする(最短)
OS の root 権限で mysql コマンドを実行すれば、auth_socket の条件を満たすのでログインできます。
sudo mysql
# または
sudo mysql -u root -p
-p を付けた場合もパスワードを聞かれますが、auth_socket の root では入力内容に関係なくログインできます。サーバーの管理作業だけなら、この運用で問題ありません。
対処法 2: アプリ用のユーザーを作る(推奨)
アプリや phpMyAdmin からパスワードで接続したい場合は、root を使わず専用ユーザーを作るのが安全です。sudo mysql でログインしてから実行します。
CREATE USER 'appuser'@'localhost' IDENTIFIED BY '強力なパスワード';
GRANT ALL PRIVILEGES ON mydb.* TO 'appuser'@'localhost';
付与する権限は、アプリが使うデータベース(この例では mydb)に限定するのが基本です。phpMyAdmin で全 DB を管理したい場合は ON *.* に WITH GRANT OPTION を付けた管理用ユーザーを作ります。
対処法 3: root をパスワード認証に変更する
どうしても root にパスワードでログインしたい場合は、認証プラグインを変更します。MySQL 8.0 以降では既定の caching_sha2_password を指定します。
ALTER USER 'root'@'localhost' IDENTIFIED WITH caching_sha2_password BY '新しいパスワード';
古い解説記事では mysql_native_password を指定する例が多く見られますが、このプラグインは MySQL 8.0.34 で非推奨になり、8.4 では既定で無効、9.0 で削除されています(2026 年時点)。古いクライアントライブラリとの互換性が必要な場合を除き、使わない方がよいでしょう。
MariaDB(10.4 以降)では root が unix_socket 認証になっており、ソケット認証とパスワード認証を併用する設定もできます。
ALTER USER 'root'@'localhost' IDENTIFIED VIA unix_socket OR mysql_native_password USING PASSWORD('新しいパスワード');
なお、root をパスワード認証に変えると、sudo mysql だけではログインできなくなり、OS の保守スクリプトが root でのソケット接続を前提にしている場合に影響が出ることがあります。対処法 2 で済むなら、そちらを優先してください。
確認方法
各ユーザーの認証方式は次の SQL で確認できます。
SELECT user, host, plugin FROM mysql.user;
+------------------+-----------+-----------------------+
| user | host | plugin |
+------------------+-----------+-----------------------+
| root | localhost | auth_socket |
| appuser | localhost | caching_sha2_password |
+------------------+-----------+-----------------------+
root の plugin が auth_socket なら sudo でのログインが必要です。設定を変えたあとは、一度ログアウトして一般ユーザーのシェルから mysql -u appuser -p のように接続できるか確かめます。
よくある質問
インストール直後で root のパスワードを設定した覚えがない
apt でインストールした場合、root はパスワードなしの auth_socket で作られているため、設定した覚えがないのが正常です。sudo mysql でログインしてください。mysql_secure_installation を実行しても、root の認証方式は auth_socket のまま変わらないことがあります。
Docker の MySQL でも出る?
公式の Docker イメージでは root は環境変数 MYSQL_ROOT_PASSWORD で指定したパスワード認証になるため、通常このエラーは出ません。出る場合は 1045 側の原因(パスワードやホスト指定)を確認してください。
関連
- MySQL root パスワードの変更方法(ALTER USER / mysqladmin / パスワード忘れ時の復旧)
- SQLSTATE[HY000] [1045] Access denied for user の対処
- MySQL ALTER USER 完全ガイド(パスワード変更 / 認証方式)
- MySQL root ユーザーの初期パスワード確認方法完全ガイド
子ページはありません
- 1071 Specified key was too long; max key length is 767 bytes
- ERROR 1063 (42000): Incorrect column specifier for column '~'
- mysqld: Can't change dir to '...\MySQL\MySQL Server X.X\data\' (OS errno 2 - No such file or directory)
- Install/Remove of the Service Denied!
- Datetime 型が NULL に見える
- Warning: World-writable config file '/etc/mysql/my.cnf' is ignored
- ERROR 1698 (28000): Access denied for user 'root'@'localhost'
- Exception: Wrong MySQL configuration
- [Warning] TIMESTAMP with implicit DEFAULT value is deprecated.
- ERROR 1820 (HY000): You must reset your password using ALTER USER statement before executing this statement.
- ERROR 1819 (HY000): Your password does not satisfy the current policy requirements
- Incorrect column specifier for column 'カラム名'
- BLOB/TEXT column 'description' used in key specification without a key length
- ERROR: /bin/sh: mysql_config: コマンドが見つかりません
- Host '...' is blocked because of many connection errors; unblock with 'mysqladmin flush-hosts'
- CSVエクスポート時に「ERROR 1045 (28000): Access denied for user 'username'@'localhost'」エラーが表示される
- Cannot execute statement: impossible to write to binary log since BINLOG_FORMAT = STATEMENT
- SQLSTATE[22007]: Invalid datetime format: 1366 Incorrect string value: ~
人気ページ
- 1 Eclipseで「サーバーに追加または除去できるリソースがありません。」の原因と対処法
- 2 tomcat の起動 / 停止ログと catalina.log・catalina.out の違い
- 3 JavaScript で base URL を取得する方法|window.location.origin
- 4 YouTube Data API v3 エラー一覧|403・400・404 の原因と対処
- 5 Laravel エラー一覧|500/Blade/DB 接続/ルーティングの代表エラー
- 6 3Dグラフィックスとは|モデリング/レンダリング/主要ソフトウェア (Blender / Maya)
- 7 Spring Frameworkのアノテーション一覧
- 8 【Spring】@Valueアノテーションとは
- 9 CATALINA_HOME の確認方法 (Linux / Mac)
- 10 【Spring】@Autowiredアノテーションとは
最近更新/作成されたページ
- プロジェクトをTomcatプロジェクトとして認識させる方法 2026-10-07 22:32:50
- MySQLの1366 Incorrect string value|Laravelの文字コード・絵文字エラー 2026-10-07 21:54:03
- curlの証明書ホスト名不一致|旧エラー51・現行60の確認と対処 2026-10-07 21:54:03
- LaravelのMassAssignmentException|fillableの原因と安全な対処 2026-10-07 21:54:03
- Eclipse で Tomcat の起動ログがコンソールに出ない時の確認手順 2026-10-07 21:54:02
- MySQLにおける中央値(Median)の導き方(バージョン8未満) 2026-10-07 13:49:45
- getInputForward 2026-10-07 13:41:15
- JSONから配列に変換 2026-10-07 13:41:15
- ビューから値をモデルに格納しコントローラーで受け取る方法 2026-10-07 13:23:41
- Laravelのテーブル作成と定義変更|マイグレーション・up/down・注意点 2026-10-07 13:23:41
- NumPy 配列に要素を追加する方法 (append / concatenate) 2026-10-07 13:23:41
- MariaDB・MySQLで現在日時を取得する方法|NOW・タイムゾーン・保存型 2026-10-07 13:13:36
- 【django】テンプレートで定数を使用する方法 2026-10-07 13:10:15
- Spring BootにおけるApplication.propertiesの環境依存設定の分割方法 2026-10-07 12:09:35
- Not supported for DML operations【Springエラー】 2026-10-07 11:09:38