MySQL 1045エラーは通常、WordPressからMySQLデータベースにアクセスしようとした際に発生するものです。パスワードが正しくなかったり、必要な権限を持っていなかったりすると、サーバーはそのアクションを実行する権限がないと判断し、リクエストを拒否します。
このエラーを解決する方法は複数あり、例えばパスワードのリセット、ユーザー権限やポートの確認などで解決可能です。
以下、MySQL 1045エラーを掘り下げ、主な原因についてご説明します。その後、4つの解決方法を見ていきましょう。
MySQL 1045エラーとは
このエラーの形式はさまざまですが、今回はわかりやすく「MySQL 1045エラー」とします。時には「Error 1045 (28000) access denied for user ‘username’@’hostname’」というように表示されることもあります。

WordPressからMySQLデータベースにアクセスしようとすると、MySQLエラー1045が発生することがあります。MySQLは、SQL(構造化問い合わせ言語)を使用するデータベース管理システムで、WordPressサイトのコンテンツの保存、取得、管理などに広く利用されています。
SQLを使用する代表的なデータベース管理システムには、ほかにもPostgreSQLやSQL Server、SQLite、MariaDBなどがあります。
このエラーメッセージが表示される場合、localhostからデータベースにアクセスする権限がないことを意味します。パスワードやユーザー名に誤りがあったり、必要な権限を持っていなかったりすることが考えられます。
KinstaでホストするWordPressサイトでは、MySQLの代わりに、MySQLと互換性のあるMariaDBを使用しています。そのため、MySQLの「エラー1045」に関する説明は、MariaDBにもそのまま当てはまります。
このエラーは、データベースへのアクセス権限がないことを示しています。たとえば、ユーザー名やパスワードが間違っている、必要な権限が付与されていないといった原因が考えられます。
MySQL 1045エラーの原因
MySQL 1045エラーの原因には、以下のようなものが考えられます。
- 必要な権限が付与されていない─WordPressに必要な権限がない場合、MySQLデータベースへのアクセスは拒否されます。
- ユーザーが存在しない─ サーバーにユーザーとして登録されていないこともあります(データベースに存在を知られていない)。
- ログイン認証に誤りがある─単にパスワードやユーザー名を間違えているという可能性も。複数のホストを利用している場合は、特にパスワードを混同してしまうのはよくあることです。
- ホストが異なっている─接続するホストを指定しないと、MySQLはlocalhostに接続しようとします。あるいは、別のホストまたはポートに接続しようとしている可能性があります。
- Bashによる妨害─パスワードに含まれる特殊文字がBashによって解釈され、問題が発生することがあります。これを防ぐには、パスワードをシングルクォーテーション(’)で囲みます。
- SSLを使用していない ─データベースにアクセスするには、SSL(Secure Sockets Layer)が必要になります。有効なSSL証明書を持っていない場合は、エラーが発生します。
MySQL 1045エラーの原因を特定したら、あとは解決するのみ。エラーを速やかに解消して、作業を再開しましょう。
MySQL 1045エラーの解決策(4通り)
MySQL 1045エラーの主な原因を押さえたら、早速解決策を見ていきましょう。
1. ユーザーに必要な権限が付与されているか確認する
ユーザーの認証情報とアクセス権限は、mysqlシステムデータベース内のuserテーブルとdbテーブルで管理されています。MySQLエラー1045の主な原因の一つは、WordPressの設定ファイルに指定されているユーザー名に、WordPressが使用するMySQLデータベースへのアクセスに必要な権限が付与されていないことです。
サーバーのコマンドラインから(サーバー上で直接、またはSSH経由で)MySQLにアクセスできる場合は、以下のコマンドを使用してrootユーザーとしてMySQLにログインし、必要な権限を付与できます。
mysql -u root -p
管理者パスワードを入力してログインしたら、GRANTコマンドを実行し、WordPressデータベースの操作に必要な権限を付与します。
たとえば、ユーザー名が「wp-admin」、ローカルホスト(localhost)上のWordPressデータベース名が「companydb」の場合、以下のコマンドを実行します。
GRANT SELECT, INSERT, UPDATE, DELETE, CREATE, DROP, INDEX, ALTER, CREATE TEMPORARY TABLES, LOCK TABLES ON companydb.* TO 'wp-admin'@'localhost';
多くのサーバーサービスでは、phpMyAdminを使用してユーザーの権限を確認することもできます。
Kinstaでは、phpMyAdminからMariaDBにrootユーザーとしてアクセスすることはできませんが、WordPressの設定に必要なデータベースの接続情報は、MyKinstaからいつでも確認できます。
2. ユーザー名とパスワードを見直す
一見拍子抜けしてしまうような解決策ですが、MySQL 1045エラーは、ログイン認証情報の誤りが原因かもしれません。これは、wp-config.phpファイルを参照して確認できます。
サーバーサービスのコントロールパネルにログインし、ファイルマネージャーにアクセスするか、SFTP経由でサイトに接続します。
後者の場合、まずサイトのルートディレクトリを見つけます(通常はpublic_html)。この中にwp-config.phpファイルが格納されているはずです。

ファイルを開き、DB_USERとDB_PASSWORDに正しい値が設定されているか確認します(通常、WordPressのインストール時に設定されています)。
設定したパスワードを忘れてしまった場合、利用中のサーバーでcPanelが提供されていれば、「Database」に移動し、「MySQL」をクリックします。
Kinstaをご利用の場合は、MyKinstaの「サイト」>(サイト名)>「情報」に移動し、下にスクロールして「データベースへの接続」セクションから接続情報を確認できます。

MyKinstaの該当するフィールドから、ユーザー名とパスワードをコピーします。
3. パスワードをリセットする
データベースのパスワードを忘れてしまった場合は、パスワードをリセットすることでMySQLにアクセスできるようになり、エラーを解消できる可能性があります。
コマンドラインからMySQLにアクセスできる場合は、rootユーザーとしてログインし、以下のコマンドでWordPressデータベースのユーザーのパスワードを変更できます。
ALTER USER 'wp-admin'@'localhost' IDENTIFIED BY 'NewStrongPassword';
上記のコマンドでは、wp-adminというユーザーに新しいパスワードを設定しています。
4. MySQLサーバーが正しいポートで接続を待ち受けているか確認する
MySQLエラー1045を解消する方法として、MySQLサーバーが正しいポートで接続を待ち受けているか確認することも有効です。その前に、まずMySQLが稼働していることを確認しましょう。
以下のコマンドを実行すると、MySQLサーバーの稼働状況を確認できます。
systemctl status mysql
サーバーが停止している場合は、以下のコマンドで起動します。
systemctl start mysql
MySQLのデフォルトのポート番号は3306です。正しいポートが使用されているか確認するには、MySQLがインストールされているサーバーでターミナルまたはコマンドプロンプトを開きます。
次に、以下のコマンドを使用してサーバーに接続します。
mysql -username -password
接続したら、以下のコマンドを実行して、MySQLサーバーが使用しているポート番号を確認します。
SHOW VARIABLES LIKE ‘port’:
ポート番号を変更する場合は、設定ファイルなどで変更し、MySQLサーバーを再起動して変更を反映します。
まとめ
サイトの重要な変更を妨げるWordPressエラーには、イライラさせられるもの。MySQL 1045エラーは、データベースにアクセスできなくなってしまうため、特に厄介です。幸い、解決方法はシンプルです。
手始めに、データベースへのアクセスに必要な権限を持っているかどうかの確認。また、単にユーザー名とパスワードに誤りがある可能性も考えられます。パスワードをリセットしたり、MySQLサーバーが正しいポートをリッスンしているかどうかをチェックしたりするのも有効です。
Kinstaのすべてのプランで、問題の迅速な解決を支援する24時間年中無休のサポートが利用できます。また、Kinstaが提供するSevallaのデータベースサーバーは、世界24のデータセンターと300以上か所以上のCDN拠点を活用し、高速かつ安全で拡張性に優れた環境を提供します。ぜひ料金プランをご覧ください。