前書き

WordPressは、世界で最も人気のあるオープンソースコンテンツ管理システムの1つです。 当初はブログに焦点を当てていましたが、長年にわたって、ウェブサイト全般のためのより柔軟なプラットフォームに発展してきました。 ほぼ15年間の開発の後、非常に洗練されて堅牢になりましたが、それでも問題が発生する可能性があります。

最近、WordPressを使用したWebサイトを読み込もうとして、代わりに「データベース接続の確立エラー」というメッセージが表示された場合、原因はほとんどの場合次のいずれかです。

  • 多くの場合、サーバーのメモリ不足が原因でデータベースがクラッシュしました

  • データベースのログイン認証情報がWordPress設定で間違っています

  • WordPressデータベーステーブルが破損しています

これらの問題を1つずつ確認して、それらがあなたに影響を与えているかどうか、およびそれらを修正する方法を判断しましょう。

前提条件

このチュートリアルでは、次のことを想定しています。

  • コマンドラインと「+ sudo +」アクセス権があるマシンでWordPressを実行している

  • データベースがWordPressと同じサーバーで実行されている(自己ホスト型のWordPressセットアップの典型であり、共有WordPressホスティング環境の典型的ではない)

  • データベースのユーザー名、パスワード、およびWordPress用に作成されたデータベースの名前を知っています。 この情報は、WordPressインストールの初期セットアップ中に作成されているはずです。

手順1-サーバーのメモリリソースの確認

この問題をデバッグするための適切な最初のステップは、サーバーにログインして、システムが正常でMySQLが実行されているかどうかを確認することです。

SSH経由でサーバーにログインし、以下の強調表示された部分を自分のユーザーとサーバーの詳細に置き換えることを忘れないでください。

ssh @

サーバーへのログインに関するヘルプが必要な場合は、https://www.digitalocean.com/community/tutorials/how-to-connect-to-your-droplet-with-ssh [ドロップレットへの接続方法]の記事をご覧ください。 SSH]。

ログインに成功したので、MySQLサーバーが実行されていることを確認しましょう。

sudo netstat -plt

+ netstat +`コマンドは、サーバーのネットワークシステムに関する情報を出力します。 この場合、tcpソケット( `+ -t +)で接続( + -l +)をリッスンするプログラム( + -p +)の名前が必要です。 以下で強調表示されている `+ mysqld +`をリストする行の出力を確認します。

OutputActive Internet connections (only servers)
Proto Recv-Q Send-Q Local Address           Foreign Address         State       PID/Program name

tcp        0      0 *:ssh                   *:*                     LISTEN      2205/sshd
tcp        0      0 localhost:smtp          *:*                     LISTEN      2361/master
tcp6       0      0 [::]:http               [::]:*                  LISTEN      16091/apache2
tcp6       0      0 [::]:ssh                [::]:*                  LISTEN      2205/sshd
tcp6       0      0 ip6-localhost:smtp      [::]:*                  LISTEN      2361/master

出力が似ている場合、MySQLが実行中で接続をリッスンしていることがわかります。 MySQLがリストに表示されない場合は、MySQLを手動で起動してみてください。 このように見えるほとんどのシステムでは:

sudo systemctl start

一部のLinuxディストリビューション(特にCentOS)は、サービス名にプレーンな `+ mysql `の代わりに ` mysql +`を使用します。 必要に応じて置き換えます。

MySQLが起動するはずです。 確認するには、上で使用した「+ netstat 」コマンドを再実行し、「 mysqld +」プロセスの出力を確認します。

MySQLとWordPressの両方を適切に実行するには、大量のメモリが必要です。 メモリ不足のためにMySQLが終了した場合、エラーログにその証拠が表示されます。 見てみよう:

zgrep -a "allocate memory" error.log*

`+ zgrep `は、圧縮された ` .tar.gz `ファイルとしてアーカイブされた古いログファイルを含むログファイルを検索します。 「+」ディレクトリ内の「+ error.log * 」ファイルで、「 allocate memory +」を含む行を検索しています。

Output2017-04-11T17:38:22.604644Z 0 [ERROR] InnoDB: Cannot allocate memory for the buffer pool

上記のような1つ以上の行が表示される場合、MySQLサーバーのメモリが不足して終了しています。 1行だけの場合、一時的に異常なトラフィックが発生している可能性があります。 多くのエラー行がある場合、サーバーは定期的にメモリが制限されています。 どちらの場合でも、解決策は、使用可能なメモリを増やしてサーバーに移行することです。 ほとんどのクラウドプロバイダーでは、最小限のダウンタイムで既存のサーバーをアップグレードするのは簡単です。

`+ zgrep +`コマンドの実行後に出力が表示されない場合、サーバーのメモリが不足していません。 サイトで引き続きエラーが発生する場合は、次のステップに進み、WordPressの設定を確認して、MySQLログインの詳細が正しいことを確認します。

手順2-データベースログイン資格情報の確認

WordPressインストールをサーバー間またはホスティングプロバイダー間で移動したばかりの場合は、データベース接続の詳細を更新する必要があります。 これらはサーバーの `+ wp-config.php`というPHPファイルに保存されます。

まず、 `+ wp-config.php`ファイルを見つけましょう:

sudo find / -name "wp-config.php"

これはルートディレクトリ( + / +)からすべてを検索し、 `+ wp-config.php +`という名前のファイルを見つけます。 そのようなファイルが存在する場合、フルパスが出力されます:

Outputwp-config.php

好みのテキストエディターを使用して、構成ファイルを開きます。 ここでは、 `+ nano`エディターを使用します。

sudo nano wp-config.php

これにより、構成変数と説明テキストで満たされたテキストファイルが開きます。 一番上にあるのは、データベース接続情報です。

wp-config.php

/** The name of the database for WordPress */
define('DB_NAME', '');

/** MySQL database username */
define('DB_USER', '');

/** MySQL database password */
define('DB_PASSWORD', '');

記録に基づいて、これら3つの変数が正しいことを確認してください。 正しく表示されない場合は、必要に応じて更新し、保存して終了します(「+ nano 」を使用している場合は「 CTRL-O 」、次に「 CTRL-X +」)。 ログイン情報が正しいように見えたとしても、念のため、コマンドラインからデータベースに接続してみる価値があります。 構成ファイルから詳細をコピーして、次のコマンドに貼り付けます。

mysqlshow -u  -p

パスワードの入力を求められます。 貼り付けて「+ ENTER」を押します。 *アクセス拒否*エラーが表示された場合、ユーザー名またはパスワードが間違っています。 それ以外の場合、 `+ mysqlshow +`コマンドは、指定されたユーザーがアクセスできるすべてのデータベースを表示します:

Output+--------------------+
|     Databases      |
+--------------------+
| information_schema |
|       |
+--------------------+

データベースの1つがWordPress構成ファイルの内容と正確に一致することを確認します。 存在する場合、設定が正しいこと、WordPressがデータベースに正常にログインできることを確認しました。 ウェブサイトをリロードして、エラーがなくなったかどうかを確認してください。

まだ動かない? 次に試すことは、データベースの修復です。

ステップ3-WordPressデータベースの修復

アップグレードの失敗、データベースのクラッシュ、またはプラグインの障害が原因で、WordPressデータベースが破損する場合があります。 この問題は、データベース接続エラーとして発生する可能性があるため、問題がMySQLサーバーまたは構成ファイルではない場合は、データベースの修復を試みてください。

WordPressには、データベースを修復するための組み込みユーティリティが用意されています。 アクセス制御がなく、セキュリティ上の問題になる可能性があるため、デフォルトでは無効になっています。 機能を有効にし、修復を実行してから無効にします。

`+ wp-config.php`ファイルを再度開きます:

sudo nano wp-config.php

空白行に次を貼り付けます。

wp-config.php

define('WP_ALLOW_REPAIR', true);

これは、WordPressが修復機能を有効にする必要があるかどうかを判断するときに検索する変数を定義します。

ファイルを保存して閉じます。 ブラウザに切り替えて、次のアドレスをロードします。強調表示された部分をサイトのドメインまたはIPアドレスに置き換えてください。

http:///wp-admin/maint/repair.php

データベース修復ページがロードされます:

image:https://assets.digitalocean.com/articles/wp-database-error/wp-db-repair.png [WordPressデータベース修復ページ]

[データベースの修復]ボタンを押すと、結果ページが表示され、リアルタイムで発生するチェックと修復を確認できます。

image:https://assets.digitalocean.com/articles/wp-database-error/wp-db-repair-results.png [WordPressデータベース修復結果ページ]

プロセスが終了したら、必ず `+ wp-config.php +`ファイルを再度開き、貼り付けた行を削除してください。

修理が行われていることに気づきましたか? サイトを再試行し、エラーがなくなったかどうかを確認してください。 修復不可能な問題が見つかった場合、使用可能なデータベースがあればバックアップからデータベースを復元する必要があります。 詳細については、チュートリアルhttps://www.digitalocean.com/community/tutorials/how-to-import-and-export-databases-in-mysql-or-mariadb[MySQLでデータベースをインポートおよびエクスポートする方法]を参照してください。その方法。

データベースに問題が見つからなかった場合、まだ問題は発見されていません。 それは、私たちが見逃している断続的な問題かもしれません。 他のいくつかの可能性を試してみましょう。

結論

「データベース接続の確立エラー」の問題の大部分は、上記の3つの手順で解決されているはずです。 それでも、このように自分自身を提示し続けるよりとらえどころのない問題がある可能性があります。 以下に、このエラーの原因を追跡して中和するのに役立つ記事をいくつか示します。

  • トラフィックが頻繁に発生する(したがってパフォーマンスとエラーが低下する)ことは、WordPressのインストールに共通するブルートフォース攻撃です。 WordPressを保護するにはXML-RPC攻撃

  • WordPressインストールにキャッシュを実装することにより、サーバーリソースを節約できます。 WordPressには多くのシンプルなキャッシュプラグインがあります。 チュートリアルhttps://www.digitalocean.com/community/tutorials/how-to-configure-redis-caching-to-speed-up-wordpress-on-ubuntu-14-04[Redisキャッシングを高速化するように設定する方法Up WordPress]は、特にパフォーマンスの高いRedis-backedキャッシュを設定する方法を示します。