• Sujatha's avatar
    MDEV-23108: Point in time recovery of binary log fails when sql_mode=ORACLE · c86accc7
    Sujatha authored
    Problem:
    ========
    During point in time recovery of binary log syntax error is reported for
    BEGIN statement and recovery fails.
    
    Analysis:
    =========
    In MariaDB 10.3 and later, setting the sql_mode system variable to Oracle
    allows the server to understand a subset of Oracle's PL/SQL language. When
    sql_mode=ORACLE is set, it switches the parser from the MariaDB parser to
    Oracle compatible parser. With this change 'BEGIN' is not considered as
    'START TRANSACTION'. Hence the syntax error is reported.
    
    Fix:
    ===
    At preset 'BEGIN' query is generated from 'Gtid_log_event::print'. The current
    session specific 'sql_mode' information is not present as part of
    'Gtid_log_event'. If it was available then, mysqlbinlog tool can make use of
    'sql_mode == ORACLE' and can output "START TRANSACTION" in this particular
    mode and for other sql_modes it will write "BEGIN" as part of output. Since it
    is not available 'mysqlbinlog' tool will output all 'BEGIN' statements as
    'START TRANSACTION' irrespective of 'sql_mode'.
    c86accc7
binlog_row_mysqlbinlog_options.result 17.9 KB