1. 17 Dec, 2007 2 commits
  2. 14 Dec, 2007 7 commits
    • sven@riska.(none)'s avatar
      Merge riska.(none):/home/sven/bkroot/5.1-new-rpl · 8b22f0a1
      sven@riska.(none) authored
      into  riska.(none):/home/sven/bk/b32407-5.1-new-rpl-mysqlbinlog_base64
      8b22f0a1
    • sven@riska.(none)'s avatar
      BUG#32407: Impossible to do point-in-time recovery from older binlog · 5cc348a6
      sven@riska.(none) authored
      Problem: it is unsafe to read base64-printed events without first
      reading the Format_description_log_event (FD).  Currently, mysqlbinlog
      cannot print the FD.
      
      As a side effect, another bug has also been fixed: When mysqlbinlog
      --start-position=X was specified, no ROLLBACK was printed. I changed
      this, so that ROLLBACK is always printed.
      
      This patch does several things:
      
       - Format_description_log_event (FD) now print themselves in base64
         format.
      
       - mysqlbinlog is now able to print FD events.  It has three modes:
          --base64-output=auto    Print row events in base64 output, and print
                                  FD event.  The FD event is printed even if
                                  it is outside the range specified with
                                  --start-position, because it would not be
                                  safe to read row events otherwise. This is
                                  the default.
      
          --base64-output=always  Like --base64-output=auto, but also print
                                  base64 output for query events.  This is
                                  like the old --base64-output flag, which
                                  is also a shorthand for
                                  --base64-output=always
      
          --base64-output=never   Never print base64 output, generate error if
                                  row events occur in binlog.  This is
                                  useful to suppress the FD event in binlogs
                                  known not to contain row events (e.g.,
                                  because BINLOG statement is unsafe,
                                  requires root privileges, is not SQL, etc)
      
       - the BINLOG statement now handles FD events correctly, by setting
         the thread's rli's relay log's description_event_for_exec to the
         loaded event.
      
         In fact, executing a BINLOG statement is almost the same as reading
         an event from a relay log.  Before my patch, the code for this was
         separated (exec_relay_log_event in slave.cc executes events from
         the relay log, mysql_client_binlog_statement in sql_binlog.cc
         executes BINLOG statements).  I needed to augment
         mysql_client_binlog_statement to do parts of what
         exec_relay_log_event does.  Hence, I did a small refactoring and
         moved parts of exec_relay_log_event to a new function, which I
         named apply_event_and_update_pos.  apply_event_and_update_pos is
         called both from exec_relay_log_event and from
         mysql_client_binlog_statement.
      
       - When a non-FD event is executed in a BINLOG statement, without
         previously executing a FD event in a BINLOG statement, it generates
         an error, because that's unsafe.  I took a new error code for that:
         ER_NO_FORMAT_DESCRIPTION_EVENT_BEFORE_BINLOG_STATEMENTS.
      
         In order to get a decent error message containing the name of the
         event, I added the class method char*
         Log_event::get_type_str(Log_event_type type), which returns a
         string name for the given Log_event_type.  This is just like the
         existing char* Log_event::get_type_str(), except it is a class
         method that takes the log event type as parameter.
      
         I also added PRE_GA_*_ROWS_LOG_EVENT to Log_event::get_type_str(),
         so that names of old rows event are properly printed.
      
       - When reading an event, I added a check that the event type is known
         by the current Format_description_log_event. Without this, it may
         crash on bad input (and I was struck by this several times).
      
       - I patched the following test cases, which all contain BINLOG
         statements for row events which must be preceded by BINLOG
         statements for FD events:
          - rpl_bug31076
      
      While I was here, I fixed some small things in log_event.cc:
      
       - replaced hard-coded 4 by EVENT_TYPE_OFFSET in 3 places
      
       - replaced return by DBUG_VOID_RETURN in one place
      
       - The name of the logfile can be '-' to indicate stdin.  Before my
         patch, the code just checked if the first character is '-'; now it
         does a full strcmp().  Probably, all arguments that begin with a -
         are already handled somewhere else as flags, but I still think it
         is better that the code reflects what it is supposed to do, with as
         little dependencies as possible on other parts of the code.  If we
         one day implement that all command line arguments after -- are
         files (as most unix tools do), then we need this.
      
      I also fixed the following in slave.cc:
      
       - next_event() was declared twice, and queue_event was not static but
         should be static (not used outside the file).
      5cc348a6
    • bar@bar.myoffice.izhnet.ru's avatar
      Merge abarkov@bk-internal.mysql.com:/home/bk/mysql-5.1-rpl · 90db4726
      bar@bar.myoffice.izhnet.ru authored
      into  mysql.com:/home/bar/mysql-work/mysql-5.1.b29562v2
      90db4726
    • bar@mysql.com/bar.myoffice.izhnet.ru's avatar
      NDB didn't like utf-8 in the last change for some reasons · 664162d1
      bar@mysql.com/bar.myoffice.izhnet.ru authored
      Changing charset to latin1.
      664162d1
    • sven@riska.(none)'s avatar
      BUG#26395: if crash during autocommit update to transactional table on master, slave fails · ab396c1d
      sven@riska.(none) authored
      Now, every transaction (including autocommit transactions) starts with
      a BEGIN and ends with a COMMIT/ROLLBACK in the binlog.
      Added a test case, and updated lots of test case result files.
      ab396c1d
    • mats@kindahl-laptop.dnsalias.net's avatar
      Merge kindahl-laptop.dnsalias.net:/home/bkroot/mysql-5.1-rpl · 45f6c038
      mats@kindahl-laptop.dnsalias.net authored
      into  kindahl-laptop.dnsalias.net:/home/bk/b31582-mysql-5.1-rpl
      45f6c038
    • bar@bar.myoffice.izhnet.ru's avatar
      Merge mysql.com:/home/bar/mysql-work/mysql-5.1.b29562 · 02ef77d8
      bar@bar.myoffice.izhnet.ru authored
      into  mysql.com:/home/bar/mysql-work/mysql-5.1.b29562v2
      02ef77d8
  3. 13 Dec, 2007 4 commits
  4. 12 Dec, 2007 5 commits
  5. 11 Dec, 2007 1 commit
  6. 06 Dec, 2007 1 commit
  7. 05 Dec, 2007 3 commits
  8. 03 Dec, 2007 2 commits
    • hezx@hezx.(none)'s avatar
      Bug#30998 Drop View breaks replication if view does not exist · 0e0f2feb
      hezx@hezx.(none) authored
      When executing drop view statement on the master, the statement is not written into bin-log if any error occurs, this could cause master slave inconsistence if any view has been dropped. 
      
      If some error occured and no view has been dropped, don't bin-log the statement, if at least one view has been dropped the query is bin-logged possible with an error.
      0e0f2feb
    • hezx@hezx.(none)'s avatar
      Bug#30998 Drop View breaks replication if view does not exist · c267a923
      hezx@hezx.(none) authored
        
      When executing drop view statement on the master, the statement is written
      into bin-log without checking for possible errors, so the statement would 
      always be bin-logged with error code cleared even if some error might occur, 
      for example, some of the views being dropped does not exist. This would cause 
      failure on the slave.
      
      Writing bin-log after check for errors, if at least one view has been dropped
      the query is bin-logged possible with an error.
      c267a923
  9. 29 Nov, 2007 1 commit
  10. 28 Nov, 2007 3 commits
  11. 27 Nov, 2007 2 commits
  12. 26 Nov, 2007 9 commits