• unknown's avatar
    Fix for BUG#2983 "If statement was killed on master, slave errors despite replicate-wild-ignore-t" · bd6c4ef4
    unknown authored
    We introduce a new function mysql_test_parse_for_slave().
    If the slave sees that the query got a really bad error on master
    (killed e.g.), then it calls this function to know if this query
    can be ignored because of replicate-*-table rules (do not worry
    about replicate-*-db rules: they are checked so early that they have
    no bug). If the answer is yes, it skips the query and continues. If
    it's no, then it stops and say "fix your slave data manually" (like it
    did before this change).
    
    
    mysql-test/r/rpl_error_ignored_table.result:
      result update
    mysql-test/t/rpl_error_ignored_table-slave.opt:
      ignore more tables
    mysql-test/t/rpl_error_ignored_table.test:
      we test if a killed query on the master, is ignored on the slave
      if the tables it involves should be excluded because of replicate-*-table
      rules.
    sql/log_event.cc:
      If the query got a really bad error on the master (thread killed etc),
      parse it to test the table names: if the replicate-*-do|ignore-table
      rules say "this query must be ignored" then we exit gracefully;
      otherwise we warn about the bad error and tell DBA to check/fix it.
      Before this change, we always warned and stopped.
    sql/mysql_priv.h:
      new function
    sql/slave.cc:
      don't print error immediately as we need to do one more test to
      be sure.
    sql/sql_parse.cc:
      we add a function mysql_test_parse_for_slave(), to be used only
      by the slave if it wants to know if the query should be ignored or not;
      so this function only parses the query, does not execute it.
    bd6c4ef4
sql_parse.cc 110 KB