Bug #20633 | INSERT DELAYED RAND() or @user_var does not replicate statement-based | ||
---|---|---|---|
Submitted: | 22 Jun 2006 19:09 | Modified: | 4 Aug 2006 0:32 |
Reporter: | Guilhem Bichot | Email Updates: | |
Status: | Closed | Impact on me: | |
Category: | MySQL Server: Replication | Severity: | S3 (Non-critical) |
Version: | 5.1-bk | OS: | Linux (linux) |
Assigned to: | Guilhem Bichot | CPU Architecture: | Any |
[22 Jun 2006 19:09]
Guilhem Bichot
[3 Jul 2006 12:27]
Guilhem Bichot
Here is a proposed patch which, if the server is in mixed mode, makes the delayed_insert system thread always use RBB. The comment is not very good. sql/sql_insert.cc: @@ -1259,6 +1259,15 @@ thd.command=COM_DELAYED_INSERT; thd.lex->current_select= 0; // for my_message_sql thd.lex->sql_command= SQLCOM_INSERT; // For innodb::store_lock() +#ifdef HAVE_ROW_BASED_REPLICATION + /* + In mixed mode, using row-based for the delayed thread solves many + problems (otherwise we can have in the same bunch, some rows + statement-based and some rows row-based, and it's too late to generate + the table maps then). + */ + thd.set_current_stmt_binlog_row_based_if_mixed(); +#endif bzero((char*) &thd.net, sizeof(thd.net)); // Safety bzero((char*) &table_list, sizeof(table_list)); // Safety
[3 Jul 2006 12:29]
Guilhem Bichot
See also BUG#20649
[5 Jul 2006 18:54]
Guilhem Bichot
will be fixed only in the mixed mode (INSERT DELAYED will then always use row-based), by fix of #20649. As #20649 is approved, so is this one; simply a testcase (like the one in this bug report) will be added.
[6 Jul 2006 20:27]
Bugs System
A patch for this bug has been committed. After review, it may be pushed to the relevant source trees for release in the next version. You can access the patch from: http://lists.mysql.com/commits/8864
[11 Jul 2006 8:23]
Guilhem Bichot
Will not be fixed in 5.0. Pushed in replication team tree 5.1, will be in 5.1.12. ChangeSet guilhem@gbichot3.local|ChangeSet|20060706155404|16502 2006/07/06 17:54:04+02:00 guilhem@gbichot3.local +4 -0 Fix for BUG#20649 "mixed replication mode does not work with INSERT DELAYED". The bug was that if the server was running in mixed binlogging mode, and an INSERT DELAYED used some needing-row-based components like UUID(), the server didn't binlog this row-based but statement-based, which thus failed to insert correct data on the slave. This changeset implements that when a delayed_insert thread is created, if the server's global binlog mode is "mixed", that thread will use row-based. This also fixes BUG#20633 "INSERT DELAYED RAND() or @user_var does not replicate statement-based": we don't fix it in statement-based mode (would require bookeeping of rand seeds and user variables used by each row), but at least it will now work in mixed mode (as row-based will be used).
[11 Jul 2006 8:24]
Guilhem Bichot
By the way, patch had been approved by email by Lars (but he's on vacation now).
[4 Aug 2006 0:32]
Paul DuBois
Noted in 5.1.12 changelog.