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.
Portions of this website are copyright © 2001, 2002 The PHP Group
Page generated in 0.044 sec. using MySQL 8.4.7-u6-cloud
Timestamp references displayed by the system are UTC.
Content reproduced on this site is the property of the
respective copyright holders.
It is not reviewed in advance
by Oracle and does not necessarily represent the opinion of
Oracle or any other party.