sourcecode

mariadb에서 상태 쿼리 오류 표시

codebag 2023. 9. 25. 22:37
반응형

mariadb에서 상태 쿼리 오류 표시

로컬 mariadb 서버에 주기적으로 접속하여 복제 상태를 조회하는 jdbc 클라이언트(아래 코드 참조)가 있습니다.

    private void closeResultSet(ResultSet rs) {
            try {
                rs.close();
            } catch (Exception e) {}
        }
        private void closeStatement (Statement st) {
            try {
                st.close();
            } catch (Exception e) {}
        }
        private void closeConnection(Connection c) {
            try {
                c.close();
            } catch (Exception e) {}
        }
        public boolean getStatus() {
            boolean status = false;
            Connection conn = null;
            Statement stmt = null;
            ResultSet rs = null;
            try {
                //Class.forName("com.mysql.jdbc.Driver");
                Class.forName("org.mariadb.jdbc.Driver");
                // System.out.println("Connecting to database...");
                conn = DriverManager.getConnection(DB_URL, USER, PASS);
                stmt = conn.createStatement();
                String sql = "SHOW STATUS LIKE 'wsrep_%'";
                rs = stmt.executeQuery(sql);
                while (rs.next()) {
                    String name = rs.getString(1);
                    String value = rs.getString(2);
                    if (name != null && !name.isEmpty() && value != null && !value.isEmpty()) 
{
                        System.out.println(value);  

                    }
                }
                status = true;
            } catch (SQLException se) {
                // Handle errors for JDBC
                se.printStackTrace();
            } catch (Exception e) {
                // Handle errors for Class.forName
                e.printStackTrace();
            } finally {
                // finally block used to close resources
                closeResultSet(rs);
                closeStatement(stmt);
                closeConnection(conn);

            } // end try
            if (!status)

            return status;
        }

    public void run() 
    {
       while(true) {
       if (!getStatus())
       //failed
          break;
       else {
          sleep 60s
       }
    }
    }

~3시간 후에 봅니다.

java.sql.SQL 비일시적 연결예외: (conn:17945) 결과 집합을 읽을 수 없음: 예기치 않은 스트림 끝, 4에서 0바이트 읽기

제 코드에 무슨 문제라도 있습니까?

"(conn:17945)"가 어떻게든 지속 가능한 최대치 이상의 연결 수가 증가하고 있다는 것을 의미하는지 궁금합니다.

MariaDB에 문제가 있는 것 같습니다. 이에 대한 해결책은 당신이 그것을 유지해야 한다는 점에서 이상한 것 같습니다.wait_timeout그러한 문제를 근절하기 위해 상당히 더 긴 기간 동안!

데이터베이스 연결을 위해 더미 유효성 검사 쿼리를 넣는 것을 고려해 볼 수 있습니다.이 쿼리가 도움이 될 수도 있습니다!

validationQuery="SELECT 1"

위와 함께 상당히 유효한 값을 설정해야 할 수도 있습니다. 예를 들어 8시간 정도입니다.

set wait_timeout=57600

링크는 유사한 줄에 대한 정보를 제공하여 참고할 수 있도록 하고 관련 토론에 대한 이 질문도 제공합니다.

도움이 되길 바랍니다!

언급URL : https://stackoverflow.com/questions/41332193/show-status-query-error-in-mariadb

반응형