hi,

If character_set in different Query_log_events changed, worker threads may 
apply them with wrong character_set. the codes leading this problem is in 
Query_log_event::do_apply_event, that is:
      if (charset_inited)
      {
        if (rli->cached_charset_compare(charset))
        {
          /* Verify that we support the charsets found in the event. */
          if (!(thd->variables.character_set_client=
                get_charset(uint2korr(charset), MYF(MY_WME))) ||
              !(thd->variables.collation_connection=
                get_charset(uint2korr(charset+2), MYF(MY_WME))) ||
              !(thd->variables.collation_server=
                get_charset(uint2korr(charset+4), MYF(MY_WME))))
          {

There is a charset[6] in rli, which cached last Query_log_event's charset in 
serial replication. But in parallel replication it would lead mistake, because 
every worker thread can read and set rli->charset[6], so rli->charset[6] isn't 
any worker threads' last Query_log_event charset. but rli->charset[6] can 
affect every worker threads' thd->variables.character_set_* setting.
2014-04-17



nanyi607rao
_______________________________________________
Mailing list: https://launchpad.net/~maria-developers
Post to     : maria-developers@lists.launchpad.net
Unsubscribe : https://launchpad.net/~maria-developers
More help   : https://help.launchpad.net/ListHelp

Reply via email to