# ==== Purpose ==== # # Run mysqlbinlog and filter out nondeterministic output. # # ==== Usage ==== # # --let $mysqlbinlog_parameters= "PARAMETERS" # [--let $mysqlbinlog_pipe= "| FILTER > FILE"] # --source include/mysqlbinlog.inc # # Parameters: # # $binlog_fullpath # Filename to use. # # $binlog_position # Position to use. # # $mysqlbinlog_parameters # Parameters to pass to mysqlbinlog # # $mysqlbinlog_skip_binlog_statements # Remove all BINLOG statements from the output. # This requires 'source include/have_util_sed.inc' in the main test script. # # $mysqlbinlog_only_decoded_rows # Only include decoded rows. This adds the argument -v and filters # the output so only files beginning with '###' are printed. # This requires 'source include/have_grep.inc' in the main test script. # # $mysqlbinlog_pipe # Optional redirection of output. # # $mysqlbinlog_capture_output # Instead of writing the output from the command to the result log, # save it in the mysqltest variable $result # # $mysqlbinlog_skip_replace # DEBUGGING ONLY: Print unfiltered output to the log. This should # never be used in production since output will be # nondeterministic. # # $mysqlbinlog_allow_error # If set, it is allowed for the command to fail with error 1. This # is useful in conjuction with $mysqlbinlog_only_decoded_rows, in case # no decoded rows are found. --let $include_filename= mysqlbinlog.inc --source include/begin_include_file.inc --let $mysqlbinlog_extra_parameters= if ($binlog_fullpath) { --let $mysqlbinlog_extra_parameters= $binlog_fullpath } if ($binlog_position) { --let $mysqlbinlog_extra_parameters= $mysqlbinlog_extra_parameters --start-position=$binlog_position } --let $mysqlbinlog_sed_pipe= if ($mysqlbinlog_skip_binlog_statements) { if ($SED == '') { --die !!!ERROR IN TEST: source include/have_util_sed.inc before using mysqlbinlog.inc with $mysqlbinlog_skip_binlog_statements set } --let $mysqlbinlog_sed_pipe= | $SED '/^BINLOG/,/\\/\\*!\\*\\//d' } --let $mysqlbinlog_grep_pipe= if ($mysqlbinlog_only_decoded_rows) { if ($GREP == '') { --die !!!ERROR IN TEST: source include/have_grep.inc before using mysqlbinlog.inc with $mysqlbinlog_only_decoded_rows set } --let $mysqlbinlog_grep_pipe= | $GREP '^### ' --let $mysqlbinlog_extra_parameters= $mysqlbinlog_extra_parameters -v } if ($mysqlbinlog_skip_replace) { --echo DO_NOT_CHECK_IN_THIS_LINE: printing unfiltered mysqlbinlog output. This should only be used for debugging. Never check in a result file that contains unfiltered mysqlbinlog output. } if (!$mysqlbinlog_skip_replace) { --replace_result $MYSQLTEST_VARDIR MYSQLTEST_VARDIR replace_regex /TIMESTAMP=[0-9]*/TIMESTAMP=#/ /#[0-9]*[ ]*[0-9]*:[0-9]*:[0-9]* server id [0-9]*/# # server id #/ /SQL_LOAD_MB-[a-f0-9]-[a-f0-9]/SQL_LOAD_MB-#-#/ /exec_time=[0-9]*/exec_time=#/ /last_committed=[0-9]*/last_committed=#/ /sequence_number=[0-9]*/sequence_number=#/ /original_committed_timestamp=[0-9]*.immediate_commit_timestamp=[0-9]*/original_committed_timestamp=# immediate_commit_timestamp=#/ /transaction_length=[0-9]*/transaction_length=#/ /end_log_pos [0-9]*/end_log_pos #/ /# at [0-9]*/# at #/ /Xid = [0-9]*/Xid = #/ /thread_id=[0-9]*/thread_id=#/ /table id [0-9]*/table id #/ /mapped to number [0-9]*/mapped to number #/ /server v [^ ]*/server v #/ /Start: binlog v [0-9]*/Start: binlog v #/ /created [0-9]*[ ]*[0-9]*:[0-9]*:[0-9]* at startup/created # at startup/ /(@[0-9]*=[0-9-]*[.][0-9]{1,3})[0-9e+-]*[^ ]*[ ]*(.*(FLOAT|DOUBLE).*[*].)/\1... \2/ /# immediate_commit_timestamp=[0-9]* \([0-9]*-[0-9]*-[0-9]* [0-9]*:[0-9]*:[0-9]*.[0-9]* GMT\)/# immediate_commit_timestamp= MICROSECONDS-FROM-EPOCH (YYYY-MM-DD HOURS:MINUTES:SECONDS TZ)/ /# original_commit_timestamp=[0-9]* \([0-9]*-[0-9]*-[0-9]* [0-9]*:[0-9]*:[0-9]*.[0-9]* GMT\)/# original_commit_timestamp= MICROSECONDS-FROM-EPOCH (YYYY-MM-DD HOURS:MINUTES:SECONDS TZ)/ /SET @@session.original_commit_timestamp=[0-9]*/SET @@session.original_commit_timestamp= MICROSECONDS-FROM-EPOCH/ /SET @@session.original_server_version=[0-9]*/SET @@session.original_server_version= ORIGINAL_SERVER_VERSION/ /SET @@session.immediate_server_version=[0-9]*/SET @@session.immediate_server_version= IMMEDIATE_SERVER_VERSION/ /SET @@SESSION.GTID_NEXT= '.*'/SET @@SESSION.GTID_NEXT= '#'/ /CRC32 0x[0-9a-f]{8}/CRC32 #/ /innodb_commit_seq=[0-9]*/innodb_commit_seq=#/ /Previous Consensus index=[0-9]*/Previous Consensus index=#/ /Consensus flag=[0-9]*/Consensus flag=#/ /term=[0-9]*/term=#/ /index=[0-9]*/index=#/ /PREV_CONSENSUS_INDEX: [0-9]*/PREV_CONSENSUS_INDEX: #/ /CONSENSUS FLAG: [0-9]*/CONSENSUS FLAG: #/ /TERM: [0-9]*/TERM: #/ /INDEX: [0-9]*/INDEX: #/ /LENGTH: [0-9]*/LENGTH: #/ /# [a-f0-9]{8}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{12}:/# #:/; } --let $mysqlbinlog_cmd= $MYSQL_BINLOG $mysqlbinlog_parameters $mysqlbinlog_extra_parameters $mysqlbinlog_grep_pipe $mysqlbinlog_sed_pipe $mysqlbinlog_pipe if ($rpl_debug) { --echo DEBUG: Executing '$mysqlbinlog_cmd' } if (!$mysqlbinlog_capture_output) { if ($mysqlbinlog_allow_error) { --error 0, 1 --exec $mysqlbinlog_cmd } if (!$mysqlbinlog_allow_error) { --exec $mysqlbinlog_cmd } } if ($mysqlbinlog_capture_output) { --let $command= $mysqlbinlog_cmd --source include/get_command_output.inc } --let $include_filename= mysqlbinlog.inc --source include/end_include_file.inc