Centos にプロジェクトをデプロイするときに奇妙な問題が見つかりました。データベース接続で例外が繰り返し発生していました。そこで私は 2 時間かけてデータベース接続異常のさまざまな原因を探し、ようやく問題は解決しました。同時に、解決プロセス中に収集された異常な情報を要約して、同様の問題に遭遇したときにアイデアを提供します。必需品です。 問題現象 まず最初に私が遭遇した問題についてお話しします。プロジェクトで発生した問題は非常に奇妙です。Mysql データベースは Centos にインストールされており、プロジェクトでは Spring Boot を使用しています。 プロジェクトはローカルで起動し、通常どおりサーバー データベースに接続し、ローカル データベース クライアントは通常どおりサーバー データベースに接続し、サーバー ローカル接続クライアントは通常どおりデータベースに接続します。スローされる唯一の例外は、プロジェクトがサーバーにデプロイされ、開始されたときです。 例外情報は次のとおりです(その時点では例外情報は保持されていませんでした)。
異常な原因 インターネット上のほぼすべての解決策を試しましたが、効果はありませんでした。次第に、JDK に原因があるのではないかと疑い始めました。ローカルで使用されている JDK バージョンは 1.8.0_151 で、サーバーでは 1.8.0.242 が使用されています。理論的には影響はありません。 そこで、サーバー上のjdkをアンインストールし、公式サイトからインストールパッケージをダウンロードして、1.8.0_241を再インストールしました。データベース接続の問題は解消されました。 後でよく考えてみると、マイナーバージョン番号の問題ではなく、インストールされている JDK バージョンの問題であることがわかりました。このマシンにインストールされている JDK は、Oracle 公式サイトからダウンロードし、サーバー上のストレージは便宜上 yum コマンドを使用して直接インストールしました。 OpenJDK は CentOS にデフォルトでインストールされます。 jdk7 以降、JDK と OpenJDK はライセンス契約が異なる 2 つのバージョンに属し、OpenJDK ソース コードは不完全であり、OpenIDK には最も合理化された JDK のみが含まれていることがわかっています。 以下では、上記の例外を検索中に見つかった、同様の例外につながるその他の理由とその解決策を紹介します。 ソックパス問題 問題現象は上記と同じです。サーバーにデプロイされたアプリケーションがサーバーに接続できないことを除いて、他の方法ではデータベースに接続できます。 問題の原因は、サーバーに 2 つのディスクがあり、データベースのストレージ コンテンツを移動するために途中で mv コマンドが実行され、同時に datadir が新しいディレクトリを指すように変更されたことです。 結果: JAVA プログラムを使用したローカル接続が失敗し、org.apache.commons.dbcp.SQLNestedException: PoolableConnectionFactory を作成できません (通信リンク障害例外がスローされました。 解決策: 対応する datadir 設定を変更した後、mysql.sock ファイル パスの構成を確認します。デフォルトでは、/var/lib/mysql/mysql.sock または /temp/mysql.sock にあります。次に、すべてのターミナル ([client]、[mysql]、[mysqld] など) が同じパスを使用するように変更します。 SSL接続の問題 メッセージに次の異常な情報が表示された場合:
SSL 接続に問題がある可能性があります。インターネット上の友人が、jdk1.8 にアップグレードした後に上記の例外に遭遇しました。 解決策: SSLv3 を削除します。 JAVA_HOME/jre/lib/security/java.security ファイルで jdk.tls.disabledAlgorithns=SSLv3,... に関連する構成を見つけて、SSLv3 の部分を削除します。 SSLv3 を削除すると SSL 呼び出しが可能になります。 SSL 接続の問題に関しては、Mysql が SSL 接続を使用する別の状況があります。設定方法については、こちらの記事を参照してください:https://www.jb51.net/article/100432.htm。 データベース接続タイムアウト この状況はインターネット上の主流の情報であり、多数の記事がありますが、多くの場合、具体的なシナリオは説明されていません。アプリケーションの使用中に上記と同様の例外が発生します。これは起動時ではなく、使用中であることに注意してください。 使用中に例外が発生する理由は、MySQL サーバーのデフォルトの「wait_timeout」が 8 時間 (28800 秒) であるためです。つまり、接続が 8 時間以上アイドル状態 (非アクティブ) になると、MySQL は自動的に接続を切断します。ただし、接続プールは接続がまだ有効であると信じています (接続の有効性が検証されていないため)。アプリケーションが接続の使用を申請すると、上記のエラーが発生します。 解決策: my.ini 設定を変更し、タイムアウト期間を長くするか、接続 URL に「&autoReconnect=true」を追加します。 port=3306 の下に次の構成を追加します。
次に、MySQL を再起動します。 この状況は、データベース接続プールの maxIdleTime 構成によっても発生する可能性があります。 <!-- 最大アイドル時間。60 秒以内に使用されない場合、接続は破棄されます。 0 の場合は破棄されません。デフォルト: 0 --> <プロパティ名="maxIdleTime" 値="0"></プロパティ> MySQL 接続は 8 時間以上アイドル状態になると閉じられますが、接続プールは接続を破棄せず、接続を有効と見なすため (接続の有効性が検証されないため)、アプリケーションが接続の使用を申請すると、上記のエラーが発生します。 解決策: 値を 20 に設定します。 その他の原因 もちろん、MySQL 接続で同様の例外が発生する理由は他にもたくさんあります。
上記は、MySQL データベース接続例外の詳細な概要です。MySQL データベース接続例外の詳細については、123WORDPRESS.COM の他の関連記事に注目してください。 以下もご興味があるかもしれません:
|
<<: Centos7 への MySQL8 のインストールチュートリアル
>>: シンプルなドラッグ効果を実現するJavaScript
データベースはスロークエリログを有効にします設定ファイルを変更する設定ファイルmy.iniに次の2つ...
導入react-i18next は、 i18nextをベースにした強力な国際化フレームワークです。 ...
リンクを使用する必要がある場合もありますが、リンクする必要はありません。onclick イベントを処...
目次1. はじめに2. 解決策2.1 ファイアウォールを設定してポートを開く2.3 ポートを確認し、...
1. div css マウスの手の形は cursor:pointer; です。 2. HTML の相...
序文Node は新しいプログラミング言語ではなく、JavaScript のランタイムに過ぎないとよく...
目次1. プロジェクトの説明1.1 背景1.2 実装設計1.2.1 従来の方法1.2.2 最適化され...
目次1. プロセスの基本的な概要2. プロセスの構成要素3. プロセス環境4. プロセスステータス5...
目次1. 問題2. 解決策1. オブジェクトをanyとして宣言する2. オブジェクトのインターフェー...
Dockerfile は Docker イメージを構築するために使用されるファイルです。コマンドパラ...
目次1. 集計クエリ1. COUNT関数2. SUM関数3. AVG関数4. MAX関数とMIN関数...
目次索引- 総合索引- ユニークなインデックス- 主キーインデックス- 複合インデックス- 全文索引...
おそらく、この問題にまだ遭遇していない人もいるでしょうから、まずは適応高さとは何かを説明しましょう。...
導入簡単に言えば、tcpdump は、ネットワーク上のトラフィックをダンプし、ユーザーの定義に従って...
現象:イメージを実行します (例: ubuntu14.04)。 docker run -it --r...