제목에 다 적을 수 없었던 경고의 풀 메시지는 -

[Waring] Unsafe statement written to the binary log using statement format since BINLOG_FORMAT=STATEMENT. The statement is unsafe because it uses a LIMIT clause. This is unsafe because the set of rows included cannot be predicted. Statement: DELETE FROM logs_count ORDER BY L_ID LIMIT 1


위 메시지가 /var/log/mariadb/mariadb.log 안에서 계속 쌓이는 상황.

로그 문 안에 어떤 쿼리가 경고를 발생하는지 알 수 있어서 바로 조치가 가능.

관련 해결 글을 찾아보니 'binlog_format' 을 변경하라고 함.


SET SESSION binlog_format=MIXED;

DELETE FROM logs_count ORDER BY L_ID LIMIT 1;

SET SESSION binlog_format=STATEMENT;

순서로 쿼리 처리하면 될 듯 함.

※ 어느 포스트에서는 MIXED 말고 ROW 값을 줘서 해결을 했다고 하는데 ROW 값을 줘보진 않음.


실제 Java 코드에서는 참고로

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
...
    String pre_query = "SET SESSION binlog_format=MIXED";
    String post_query = "SET SESSION binlog_format=STATEMENT";
    String query = "DELETE FROM logs_count ORDER BY L_ID LIMIT 1";
 
    try {
         con = DriverManager.getConnection(url, uID, uPWD);
         pstmt = con.prepareStatement(pre_query);
         rs = pstmt.executeQuery();
 
         pstmt = con.prepareStatement(query);
         rs = pstmt.executeQuery();
 
         pstmt = con.prepareStatement(post_query);
         rs = pstmt.executeQuery();
    } catch(...) {...}
...
cs


각 설정 값들이 무엇을 의미하는지는 링크를 참조하면 될 듯.