Slick/Tomcat/MariaDB Galera 클러스터의 잘못된 "데이터베이스가 선택되지 않음" 오류
애플리케이션을 기반으로 합니다.
- Typesafe의 Slick 데이터베이스 쿼리 라이브러리 v2.0
- BoneCP 연결 풀 v0.8.0
- tomcat7
- Galera 클러스터가 포함된 MariaDB 5.5.33
최대 48시간 동안 성공적으로 실행된 후에 던지기 시작합니다.java.sql.SQLException: No database selected
실수.그러면 일부(일부는 아니지만) 쿼리가 이 예외를 제외하고 실패하기 시작합니다.Tomcat(톰캣)을 다시 시작하여 문제를 일시적으로 "수정"할 수 있습니다.
"No database selected" 오류의 명백한 원인은 연결 설정에서 데이터베이스 스키마 이름이 지정되지 않았다는 것입니다. 그러나 DB 연결 매개변수는 시작 시 로드되는 응용프로그램 구성에서 한 번 제공되므로, 오류가 발생한 경우 즉시 이 오류가 표시됩니다.
시작 후 스키마 이름이 프로그래밍 방식으로 수정되지 않았습니다.
연결 풀 인터페이스와 독립적으로 연결을 열지 않습니다.
이러한 오류를 프로덕션 환경 외부 어디에서도 복제할 수 없었습니다.부하가 요인인 것으로 보이지만 방법은 불분명합니다.
오류와 관련된 특정 쿼리가 없으며 MariaDB 로그를 검사해도 흥미로운 내용이 나타나지 않았습니다.
시간 초과나 연결과 같은 다른 DB 연결 오류는 예기치 않게 닫히지 않습니다.
BoneCP에서 HikariCP로 전환도 시도했지만 효과가 없었습니다.
어떻게든 연결이 스키마 이름을 "분실"하거나 이 오류로 인해 다른 조건이 가려집니다.무엇 때문에 이런 일이 일어날까요?문제를 진단하기 위해 운영 환경에서 어떤 비침습적 로깅 또는 진단을 실행할 수 있습니까?
샘플 스택 추적:
java.sql.SQLException: No database selected
at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:996)
at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3887)
at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3823)
at com.mysql.jdbc.MysqlIO.sendCommand(MysqlIO.java:2435)
at com.mysql.jdbc.MysqlIO.sqlQueryDirect(MysqlIO.java:2582)
at com.mysql.jdbc.ConnectionImpl.execSQL(ConnectionImpl.java:2530)
at com.mysql.jdbc.PreparedStatement.executeInternal(PreparedStatement.java:1907)
at com.mysql.jdbc.PreparedStatement.execute(PreparedStatement.java:1199)
at com.jolbox.bonecp.PreparedStatementHandle.execute(PreparedStatementHandle.java:140)
at scala.slick.jdbc.StatementInvoker.results(StatementInvoker.scala:38)
at scala.slick.jdbc.StatementInvoker.iteratorTo(StatementInvoker.scala:22)
at scala.slick.jdbc.Invoker$class.foreach(Invoker.scala:64)
at scala.slick.jdbc.StatementInvoker.foreach(StatementInvoker.scala:16)
at scala.slick.jdbc.Invoker$class.firstOption(Invoker.scala:29)
at scala.slick.jdbc.StatementInvoker.firstOption(StatementInvoker.scala:16)
at scala.slick.jdbc.Invoker$class.first(Invoker.scala:36)
at scala.slick.jdbc.StatementInvoker.first(StatementInvoker.scala:16)
at scala.slick.driver.JdbcExecutorComponent$QueryExecutorDef.run(JdbcExecutorComponent.scala:32)
---- SNIP ----
at javax.servlet.http.HttpServlet.service(HttpServlet.java:722)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:305)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:224)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:169)
at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:472)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:168)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:98)
at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:927)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:118)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:407)
at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:987)
at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:579)
at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:309)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)
at java.lang.Thread.run(Thread.java:745)
언급URL : https://stackoverflow.com/questions/30466513/spurious-no-database-selected-errors-with-slick-tomcat-mariadb-galera-cluster
'programing' 카테고리의 다른 글
사전 증분 연산자가 r값을 C로 제공하는 이유는 무엇입니까? (0) | 2023.10.06 |
---|---|
C와 C++에서 "비어있는 루프"라는 용어는 정확히 무엇을 가리킵니다. (0) | 2023.10.06 |
5초마다 AJAX jQuery 새로 고침 div (0) | 2023.10.01 |
제출 양식에서 생성된 URL을 JavaScript로 가져옵니다. (0) | 2023.10.01 |
PowerShell 스크립트 대신 PowerShell 모듈 개발을 선택하는 경우 (0) | 2023.10.01 |