Commit graph

24 commits

Author SHA1 Message Date
mats@romeo.(none)
e12cc44ac3 Merge romeo.(none):/home/bkroot/mysql-5.1-new-rpl
into  romeo.(none):/home/bk/w3464-mysql-5.1-new-rpl
2007-03-29 21:38:03 +02:00
mats@romeo.(none)
7c187c2c9b WL#3464: Add replication event to denote gap in replication
Adding an event that can be used to denote that an incident occured
on the master. The event can be used to denote a gap in the replication
stream, but can also be used to denote other incidents.

In addition, the injector interface is extended with functions to
generate an incident event. The function will also rotate the binary
log after generating an incident event to get a fresh binary log.
2007-03-29 20:31:09 +02:00
mats@romeo.(none)
6a01170299 Merge romeo.(none):/home/bkroot/mysql-5.1-new-rpl
into  romeo.(none):/home/bk/b22583-mysql-5.1-new-rpl
2007-03-20 09:35:56 +01:00
tsmith@quadxeon.mysql.com
79191807ff Merge tsmith@bk-internal.mysql.com:/home/bk/mysql-5.1-runtime
into  quadxeon.mysql.com:/benchmarks/ext3/TOSAVE/tsmith/bk/maint/mrg0306/51
2007-03-07 07:21:24 +01:00
msvensson@pilot.blaudden
6b4a71659e Make sure tests drops objects created and restore variables to default 2007-03-01 14:16:38 +01:00
mats@romeo.(none)
3306196a7a Merging with mysql-5.1-new-rpl 2007-02-21 13:52:42 +01:00
msvensson@pilot.blaudden
cf553c4361 Use "diff_files" instead ot "exec diff" 2007-02-20 18:47:47 +01:00
mats@romeo.(none)
e61a1841a5 BUG#22583 (RBR between MyISAM and non-MyISAM tables containing BIT field
does not work): Changing packed row format to only include null bits
for those columns that are present in the row as well as writing BIT
columns in a storage engine-independent format.

The change in row format is incompatible with the previous format and a
slave will not be able to read the new events.
2007-02-12 16:46:42 +01:00
aelkin/elkin@dsl-hkibras-fe36f900-97.dhcp.inet.fi
4d815a4893 Bug #16567 binlog_format option does not show when doing ./mysqd --help --verbose
Implementing this feature connected to wl#3368 mixed binlog_format default.
  Supplied by my.cnf or explicitly in command line option gets be displayed.
  When not supplied `(No default value)' is displayed, even though --log-bin might
  be supplied. The option is different object from @@global.binlog_format variable.
  The default `mixed' for the latter is dependant on presence of `--log-bin' option,
  otherwise the value of the var is set to NULL (undefined):

   var := opt | MIXED  when binlog-in-use
   var := NULL         otherwise (no binlog, no format)

  Comments on NDB and mixed format updated, also dependency the option on --log-bin
  aka binlog-in-use is worded.
  
  Making t/rpl_switch_stm_row_mixed.test to interprete DEFAULT for binlog_format
  as MIXED.
  Comments on what the test covers are added.

  todo/fixme: turning @@global.binlog_format to be read-only when it's set to NULL (no binlog).
  todo/fixme: options dependacy (acyclic) graph, particularly to solve a task of
setting defaults values for the leaf nodes
  only when parents' nodes are set.
2007-01-15 16:01:00 +02:00
cbell/Chuck@suse.vabb.com
9f36c1c286 WL#3618 - Remove HAVE_ROW_BASED_REPLICATION from source code.
Please see worklog for details on files changed.
2006-12-07 09:18:35 -05:00
aelkin/elkin@dsl-hkigw8-fe00f800-98.dhcp.inet.fi
6055e8a9f7 Bug#22067 rpl_rbr_to_sbr and some other fail if NDB is default storage
A query SET @@GLOBAL.binlog_format = ... returns an error when NDB is the
default storage. This fails some tests invoking the set binlog_format explicitly.
because the var turns to be read-only.
  
  In the following are files and method to fix if needed.
  
  t/
  ndb_binlog_basic2.test         # here the failure is benign
  rpl_rbr_to_sbr.test            # does not check any ndb features =>           
 
  .                              # => not_ndb_default is enough
  rpl_row_basic_8partition.test  # set binlog_format can be replaced
  rpl_switch_stm_row_mixed.test  # does not check any ndb features =>
  .                              # => not_ndb_default is enough
  
  two more invoking invoke extra/rpl_truncate_helper.test
  
  rpl_truncate_2myisam           # to be fixed with not_ndb_default
  rpl_truncate_3innodb           # same as above
  .                              # because there is a dedicated to ndb .        
 
  .                              # rpl_truncate_7ndb* suit.

Adapting/testing a new implement
--source include/safe_set_to_maybe_ro_var.inc
to avoid abort due to the error using binlog_format as application.
2006-09-15 17:25:13 +03:00
mats@romeo.(none)
a6461a64e4 BUG#20863 (if binlog format is changed between update and unlock of table, wrong binlog):
Post-merge fixes.
2006-08-17 09:31:46 +02:00
mats@romeo.(none)
a982db81e4 Merging with mysql-5.1-new-rpl tree 2006-08-16 15:59:41 +02:00
mats@romeo.(none)
691355b6a3 BUG#20863 (if binlog format is changed between update and unlock table, wrong binlogging):
Fix to allow the binlog format to be changed between the LOCK and
UNLOCK tables, as well as under MIXED mode.
2006-08-16 14:55:57 +02:00
guilhem@gbichot3.local
1cc3c80070 fixes after merge. Updates to test's results.
We now reset the THD members related to auto_increment+binlog in
MYSQL_LOG::write(). This is better than in THD::cleanup_after_query(),
which was not able to distinguish between SELECT myfunc1(),myfunc2()
and INSERT INTO t SELECT myfunc1(),myfunc2() from a binlogging point
of view.
Rows_log_event::exec_event() now calls lex_start() instead of
mysql_init_query() because the latter now does too much (it resets
the binlog format).
2006-07-10 18:41:03 +02:00
guilhem@gbichot3.local
17efd43b1a post-merge test/result fixes. 2006-07-09 21:39:21 +02:00
guilhem@gbichot3.local
1bfe0bdf72 Merge gbichot3.local:/home/mysql_src/mysql-5.1-new-19630
into  gbichot3.local:/home/mysql_src/mysql-5.1
2006-07-09 21:17:06 +02:00
guilhem@gbichot3.local
fdb0f85a0c * Mixed replication mode * :
1) Fix for BUG#19630 "stored function inserting into two auto_increment breaks
statement-based binlog":
a stored function inserting into two such tables may fail to replicate
(inserting wrong data in the slave's copy of the second table) if the slave's
second table had an internal auto_increment counter different from master's.
Because the auto_increment value autogenerated by master for the 2nd table
does not go into binlog, only the first does, so the slave lacks information.
To fix this, if running in mixed binlogging mode, if the stored function or
trigger plans to update two different tables both having auto_increment
columns, we switch to row-based for the whole function.
We don't have a simple solution for statement-based binlogging mode, there
the bug remains and will be documented as a known problem.
Re-enabling rpl_switch_stm_row_mixed.
2) Fix for BUG#20630 "Mixed binlogging mode does not work with stored
functions, triggers, views", which was a documented limitation (in mixed
mode, we didn't detect that a stored function's execution needed row-based
binlogging (due to some UUID() call for example); same for
triggers, same for views (a view created from a SELECT UUID(), and doing
INSERT INTO sometable SELECT theview; would not replicate row-based).
This is implemented by, after parsing a routine's body, remembering in sp_head
that this routine needs row-based binlogging. Then when this routine is used,
the caller is marked to require row-based binlogging too.
Same for views: when we parse a view and detect that its SELECT needs
row-based binary logging, we mark the calling LEX as such.
3) Fix for BUG#20499 "mixed mode with temporary table breaks binlog":
a temporary table containing e.g. UUID has its changes not binlogged,
so any query updating a permanent table with data from the temporary table
will run wrongly on slave. Solution: in mixed mode we don't switch back
from row-based to statement-based when there exists temporary tables.
4) Attempt to test mysqlbinlog on a binlog generated by mysqlbinlog;
impossible due to BUG#11312 and BUG#20329, but test is in place for when
they are fixed.
2006-07-09 17:00:47 +02:00
guilhem@gbichot3.local
6ba4d22ca2 Testcase for BUG#20633 "INSERT DELAYED RAND() or @user_var does not replicate
statement-based" (bugfix was committed today):
we verify that now it works in mixed mode. And a comment.
2006-07-06 22:03:35 +02:00
guilhem@gbichot3.local
a5f184d5c7 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).
We re-enable rpl_switch_stm_row_mixed.test (so BUG#18590
which was about re-enabling this test, will be closed) to test the fixes.
Between when it was disabled and now, some good changes to row-based
binlogging (no generation of table map events for non-changed tables)
induce changes in the test's result file.
2006-07-06 17:54:04 +02:00
guilhem@mysql.com
e485f8e12c Fixes to the replication mixed mode (patch approved by Monty):
- detect the need for row-based binlogging not at execution stage but earlier at parsing stage; needed for example for CREATE TABLE SELECT UUID().
- more tests of this mixed mode.
2006-03-13 15:34:30 +01:00
lars@mysql.com
418a8656d9 Fix to not replicate mysql.event table
Test fixes
2006-03-09 15:59:29 +01:00
guilhem@mysql.com
e5d450eeca var/tmp does not work (same fix as knielsen did for rpl_row_UUID a few days ago) 2006-02-26 21:30:39 +01:00
guilhem@mysql.com
0071749595 WL#2977 and WL#2712 global and session-level variable to set the binlog format (row/statement),
and new binlog format called "mixed" (which is statement-based except if only row-based is correct,
in this cset it means if UDF or UUID is used; more cases could be added in later 5.1 release):
SET GLOBAL|SESSION BINLOG_FORMAT=row|statement|mixed|default;
the global default is statement unless cluster is enabled (then it's row) as in 5.1-alpha.
It's not possible to use SET on this variable if a session is currently in row-based mode and has open temporary tables (because CREATE
TEMPORARY TABLE was not binlogged so temp table is not known on slave),  or if NDB is enabled (because
NDB does not support such change on-the-fly, though it will later), of if in a stored function (see below).
The added tests test the possibility or impossibility to SET, their effects, and the mixed mode,
including in prepared statements and in stored procedures and functions.
Caveats:
a) The mixed mode will not work for stored functions: in mixed mode, a stored function will
always be binlogged as one call and in a statement-based way (e.g. INSERT VALUES(myfunc()) or SELECT myfunc()).
b) for the same reason, changing the thread's binlog format inside a stored function is
refused with an error message.
c) the same problems apply to triggers; implementing b) for triggers will be done later (will ask
Dmitri).
Additionally, as the binlog format is now changeable by each user for his session, I remove the implication
which was done at startup, where row-based automatically set log-bin-trust-routine-creators to 1
(not possible anymore as a user can now switch to stmt-based and do nasty things again), and automatically
set --innodb-locks-unsafe-for-binlog to 1 (was anyway theoretically incorrect as it disabled
phantom protection).
Plus fixes for compiler warnings.
2006-02-25 22:21:03 +01:00