ownCloud 10でMySQLを使用した場合に発生する「データベースへの接続に失敗しました」エラーを修正する

ownCloud 10 の「データベースへの接続に失敗しました」エラーを最も迅速に特定する方法は、ownCloud サーバー自体から同じ MySQL アカウント、データベース名、ホストを使用してテストすることです。ログインに失敗した場合は、まず MySQL の可用性、ネットワーク アクセス、認証情報、または権限を修正してください。ログインに成功した場合は、ownCloud のconfig/config.phpPHPpdo_mysql拡張機能と、PHP が意図したソケットまたは TCP 接続を使用しているかどうかを確認してください。

このガイドでは、Linux 上で MySQL または MariaDB を使用する既存の ownCloud Server 10 インストールについて説明します。サービス名とパッケージコマンドは、オペレーティングシステムとインストールタイプによって異なります。本番環境の設定を編集する前に、構成とデータベースをバックアップしてください。データベースのパスワードを問題報告に含めたり、公開のシェルログに貼り付けたりしないでください。

そのエラーは何を意味していますか?

このメッセージは症状を示すものであり、診断結果を示すものではありません。障害発生時のownCloudログとWebサーバーまたはPHPログを確認してください。根本的な例外の原因として、ドライバの欠落、接続拒否、ログイン拒否、または不明なデータベースが挙げられます。ownCloudのLinuxデータベースガイドでは、PHPのpdo_mysql拡張機能が必要であり、MySQLがローカルにある場合はソケット設定が重要であると指摘しています。また、MySQLコマンドラインクライアントを使用してアクセスをテストすることを推奨しています。

メッセージまたは手がかり確認すべき可能性のあるエリア
could not find driverまたはPDOドライバのエラーウェブPHPランタイムがpdo_mysql有効になっていません。
SQLSTATE[HY000] [2002]または「接続できません」MySQLが停止しているか、ホストまたはポートが間違っているか、ファイアウォールがTCPをブロックしているか、ソケットパスが間違っている可能性があります。
Access denied for userパスワード、アカウントホスト、またはMySQL認証設定が一致しません。
Unknown database設定されたデータベース名がスペルミスであるか、欠落しているか、またはアカウントから表示されていません。

正確なエラーコードは、PHP、MySQL、MariaDB、およびオペレーティングシステムのバージョンによって異なる場合があります。これらは手がかりとして捉え、以下のチェックで原因を確認してください。MySQLのアクセス拒否に関するドキュメントには、アカウントとホストの一致が一般的な原因であると記載されています。

ownCloudホストはMySQLにアクセスできますか?

mysqli が ownCloud サーバー、別のマシン、またはコンテナのいずれで実行されているかを確認してください。Linux の場合は、サービスを確認してください。一般的なユニット名は と ですmysql。mariadbサーバーにインストールされているものを使用してください。

sudo systemctl status mysql
sudo systemctl status mariadb

起動しない場合は、再起動する前にジャーナルまたはデータベースのエラーログを確認してください。構成エラー、ディスク容量不足、データベース復旧の失敗、またはポートの競合により起動できない場合があります。

sudo journalctl -u mariadb --since "30 minutes ago"
sudo systemctl start mariadb

サービス名を適切に置き換えてください。サービスが稼働しているだけでは、ownCloudが認証できることは証明されません。アカウントテストを続行してください。

リモートデータベースの場合、ownCloudホストからDNSと設定済みのTCPポートをテストしてください。MySQLは通常ポート3306でリッスンしますが、デプロイメントによっては別のポートを使用する場合もあります。

getent hosts db.example.net
nc -vz db.example.net 3306

チェックエラーが発生した場合は、DNS、ルーティング、ファイアウォール、またはデータベースリスナーの設定に問題がある可能性があります。可能な限り、プライベートネットワーク経由でownCloudサーバーからの接続のみを許可してください。MySQLをインターネットに公開して、接続を容易にしないでください。

ownCloudホストからデータベースアカウントは正常に動作しますか?

ownCloudが使用するデータベース名、ユーザー、および宛先ホストと同じ名前で、アプリケーションサーバー上でMySQLクライアントを実行します。この-pオプションはパスワードを非公開でプロンプト表示するため、コマンド自体にパスワードを入力する必要がありません。

mysql -u oc_app -p -h localhost owncloud

リモートデータベースの場合は、localhostホスト名に置き換えてください。ログインが成功したら、無害な検証を実行します。

SELECT DATABASE(), CURRENT_USER();
SHOW TABLES;
EXIT;

これは、基本認証と選択したデータベースへのアクセスを確認するものです。失敗した場合は、MySQLが報告する正確なエラーとユーザー名/ホストを確認してください。MySQLはアカウントを照合する際に、ユーザー名とホストをまとめて扱います。また、localhostLinuxでは一般的にUnixソケットが使用され、127.0.0.1強制的にTCPが使用される点にも注意してください。ownCloudの設定で使用されているのと同じ接続方法をテストしてください。

mysql -u oc_app -p -h 127.0.0.1 owncloud

ownCloudのデータベース設定は正しいですか?

config/config.phpownCloudのインストールディレクトリにあるアクティブな設定を確認してください。ownCloudの設定リファレンスには、データベースの種類、名前、ユーザー、パスワードの設定が記載されています。また、データベースガイドにはホストとテーブルのプレフィックスも示されています。一般的なMySQLの設定は次のようになります。

'dbtype' => 'mysql',
'dbname' => 'owncloud',
'dbuser' => 'oc_app',
'dbpassword' => 'REDACTED',
'dbhost' => 'localhost',
'dbtableprefix' => 'oc_',

スペルミス、意図しない空白、古いパスワード、大文字小文字が異なるデータベース名、またはホストが間違ったサーバーを指していないかを確認してください。インスタンスシークレットとデータディレクトリを含む、ファイルの残りの部分はそのまま保持してください。この例で設定全体を置き換えないでください。

編集後、インストール先のPHPバイナリを使用して、ファイルが有効なPHPファイルであることを確認してください。

php -l /var/www/owncloud/config/config.php

インストールパスは異なる場合があります。 へのアクセスを制限してくださいconfig.php。データベースの認証情報やその他の機密情報が含まれています。

PHPのMySQLドライバはWebアプリケーションで有効になっていますか?

ownCloud 10 のデータベースガイドには、pdo_mysqlPHP のバージョンとロードされたモジュールの確認が必要です。

php -v
php -m | grep -i pdo_mysql

モジュールが見つからない場合は、PHP のバージョンに対応する MySQL PDO パッケージをインストールしてから、該当する Web サーバーまたは PHP-FPM プールを再起動またはリロードしてください。パッケージ名は、Ubuntu、Debian、SUSE、Red Hat、およびコンテナ イメージによって異なります。コマンドライン PHP で有効になっているモジュールが、Apache または PHP-FPM で有効になっていない場合があるため、Web ランタイムの PHP 設定も確認してください。PHP 設定情報が公開される診断ページは残さないようにしてください。

ソケットまたはホストの設定が間違っている可能性はありますか?

Linux では、MySQL クライアントは Unix ソケットを使用するlocalhost場合があります。一方、127.0.0.1ownCloud は TCP を使用します。MySQL が同じマシン上にある場合は、PHP のmysql.default_socket設定がデータベース サーバーが実際に作成したソケット ファイルを指しているかどうかを確認してください。データベース サーバーのソケットとポートの設定を PHP の設定および ownCloud のホスト値と比較してください。

MySQLがリモートにある場合、localhostデータベースサーバーではなくownCloudマシンが対象となります。代わりに、アクセス可能なデータベースホスト名を設定し、MySQLが目的のインターフェースでリッスンしていることを確認してください。ファイアウォールやローカル専用設定によっては、bind-addressローカルデータベースコマンドが機能する場合でも、リモートアクセスが妨げられることがあります。アプリケーションサーバーのプライベートアドレスへのアクセスを制限してください。

MySQLアカウントと権限はクライアントホストと一致していますか?

MySQLアカウントにはユーザー名とホストコンポーネントが含まれます。したがって、'oc_app'@'localhost'と は'oc_app'@'10.0.0.25'異なるアカウントエントリです。管理者接続を使用して、利用可能なアカウントと、一致する必要があるアカウントの権限を確認してください。

SELECT User, Host FROM mysql.user;
SHOW GRANTS FOR 'oc_app'@'localhost';

アカウントが存在せず、データベースが既に存在する場合は、専用アカウントを作成し、ownCloudデータベースに対する権限のみを付与してください。サンプルデータベース、ホスト、パスワードを実際の値に置き換えてください。

CREATE USER 'oc_app'@'localhost' IDENTIFIED BY 'replace-with-a-strong-password';
GRANT ALL PRIVILEGES ON owncloud.* TO 'oc_app'@'localhost';

リモートデータベースの場合は、アカウント定義にアプリケーションサーバーの実際のホスト名を使用してください。一時的な解決策としてワイルドカードホストやグローバル権限を使用することは避け、ownCloudをMySQLのroot権限で実行しないでください。アカウントが既に存在する場合は、重複アカウントを作成するのではなく、権限を確認し、パスワードを意図的にリセットしてください。ownCloudサーバーからログインを再テストしてください。

修理が完了したことをどのように確認しますか?

項目を一つずつ変更した後、ownCloudホストから同じMySQLコマンドラインログインが機能すること、Web PHPランタイムが動作していることpdo_mysql、ownCloudログに接続例外が記録されていないことを確認してください。サイトをリロードし、インスタンスが再び利用可能になった後にのみ、基本的な読み書き操作を実行してください。

コマンドラインログインは成功してもownCloudが起動しない場合は、Webプロセスで使用されているホスト形式、アカウント、データベース名、PHPランタイムを、正常に動作しているテスト環境と比較してください。リクエスト時のWebサーバーまたはPHP-FPMのログを確認してください。既にサーバーがインストールされている場合は、既存の設定を慎重に修復してください。トラブルシューティングの手っ取り早い方法として、データベースを削除したり、インストールをやり直したりしないでください。

詳細については、ownCloud Server 10.16 のデータベース構成およびトラブルシューティングガイド、ownCloud 10.15 の構成リファレンス、および MySQL の公式接続トラブルシューティングとアクセス拒否エラーに関するガイドを参照してください。サービス名、パッケージコマンド、および正確な設定は、オペレーティングシステムとデプロイメントによって異なります。

コメントを残す

クライアントブラウザでのJitsi MeetにおけるCPU使用率の高さを修正する

クライアントブラウザでのJitsi MeetにおけるCPU使用率の高さを修正する

Jitsi MeetブラウザのCPUスパイクを診断し、ビデオタイル、カメラエフェクト、ブラウザグラフィック、ホスト設定をチェックすることで、クライアントの負荷を軽減します。

PrometheusとGrafanaを使用してJitsi Videobridgeのメトリクスを監視する方法

PrometheusとGrafanaを使用してJitsi Videobridgeのメトリクスを監視する方法

Jitsi Videobridgeに内蔵されたPrometheusエンドポイントを使用して、Jitsi Videobridgeの状態、会議の負荷、トラフィックを追跡し、Grafanaでデータを探索およびグラフ化できます。

Jitsi Meet Docker のカスタムドメイン名の設定方法

Jitsi Meet Docker のカスタムドメイン名の設定方法

Jitsi Meet Docker 用のカスタムドメインを、DNS、PUBLIC_URL、HTTPS、Let's Encrypt、ファイアウォールポート、NAT 設定、エンドツーエンド検証とともに構成します。

SSL更新後にZimbra管理コンソールで発生する404 Not Foundエラーを修正する

SSL更新後にZimbra管理コンソールで発生する404 Not Foundエラーを修正する

SSL更新後に発生するZimbra管理コンソールの404エラーを修正するには、正しいURLとポート、プロキシルーティング、サービスステータス、デプロイ済みの証明書、およびログを確認してください。

Nextcloudの「PHP OPcacheが正しく設定されていません」という警告を修正する

Nextcloudの「PHP OPcacheが正しく設定されていません」という警告を修正する

アクティブなPHP SAPI、サイズ制限、コメント、および再検証設定を確認することで、NextcloudのPHP OPcache構成警告を診断および修正する方法を学びましょう。

MySQLバージョンアップグレード後のKopanoデータベース移行エラーを修正する

MySQLバージョンアップグレード後のKopanoデータベース移行エラーを修正する

MySQLまたはMariaDBのアップグレード後にKopanoデータベースの移行が失敗した場合は、バックアップ、サーバーバージョン、SQLモード、文字セット、スキーマ状態、およびログを確認してトラブルシューティングを行います。

NextcloudでLDAPとActive Directory認証を設定する方法

NextcloudでLDAPとActive Directory認証を設定する方法

セキュアなトランスポート、ユーザーおよびグループフィルタ、ログイン属性、そしてテスト済みの展開機能を使用して、NextcloudをLDAPまたはActive Directoryに接続します。

GoogleサービスなしでElement Android通知を修正する方法:UnifiedPushガイド

GoogleサービスなしでElement Android通知を修正する方法:UnifiedPushガイド

UnifiedPush、Androidの権限設定、バッテリー設定、および信頼性の高い検証テストを設定することで、Googleサービスを削除した端末におけるElement Android通知の問題を修正します。

Nextcloudの「データベースに一部のインデックスが欠落しています」という警告を修正する

Nextcloudの「データベースに一部のインデックスが欠落しています」という警告を修正する

Nextcloudのデータベースインデックス不足警告を、公式のoccコマンドでクリアします。まずバックアップを作成し、変更内容をプレビューしてから修復を実行し、結果を確認してください。

Element WebでKeycloakを使用してシングルサインオン(SSO)を設定する方法

Element WebでKeycloakを使用してシングルサインオン(SSO)を設定する方法

Element Web 用の Keycloak SSO を設定するには、OIDC を Synapse に接続し、正確なコールバック URL を設定し、ユーザー クレームをマッピングし、ログアウトをテストします。