1
0
mirror of https://github.com/MariaDB/server.git synced 2025-12-12 08:01:43 +03:00
Commit Graph

3088 Commits

Author SHA1 Message Date
sven@riska.(none)
5cc348a6a6 BUG#32407: Impossible to do point-in-time recovery from older binlog
Problem: it is unsafe to read base64-printed events without first
reading the Format_description_log_event (FD).  Currently, mysqlbinlog
cannot print the FD.

As a side effect, another bug has also been fixed: When mysqlbinlog
--start-position=X was specified, no ROLLBACK was printed. I changed
this, so that ROLLBACK is always printed.

This patch does several things:

 - Format_description_log_event (FD) now print themselves in base64
   format.

 - mysqlbinlog is now able to print FD events.  It has three modes:
    --base64-output=auto    Print row events in base64 output, and print
                            FD event.  The FD event is printed even if
                            it is outside the range specified with
                            --start-position, because it would not be
                            safe to read row events otherwise. This is
                            the default.

    --base64-output=always  Like --base64-output=auto, but also print
                            base64 output for query events.  This is
                            like the old --base64-output flag, which
                            is also a shorthand for
                            --base64-output=always

    --base64-output=never   Never print base64 output, generate error if
                            row events occur in binlog.  This is
                            useful to suppress the FD event in binlogs
                            known not to contain row events (e.g.,
                            because BINLOG statement is unsafe,
                            requires root privileges, is not SQL, etc)

 - the BINLOG statement now handles FD events correctly, by setting
   the thread's rli's relay log's description_event_for_exec to the
   loaded event.

   In fact, executing a BINLOG statement is almost the same as reading
   an event from a relay log.  Before my patch, the code for this was
   separated (exec_relay_log_event in slave.cc executes events from
   the relay log, mysql_client_binlog_statement in sql_binlog.cc
   executes BINLOG statements).  I needed to augment
   mysql_client_binlog_statement to do parts of what
   exec_relay_log_event does.  Hence, I did a small refactoring and
   moved parts of exec_relay_log_event to a new function, which I
   named apply_event_and_update_pos.  apply_event_and_update_pos is
   called both from exec_relay_log_event and from
   mysql_client_binlog_statement.

 - When a non-FD event is executed in a BINLOG statement, without
   previously executing a FD event in a BINLOG statement, it generates
   an error, because that's unsafe.  I took a new error code for that:
   ER_NO_FORMAT_DESCRIPTION_EVENT_BEFORE_BINLOG_STATEMENTS.

   In order to get a decent error message containing the name of the
   event, I added the class method char*
   Log_event::get_type_str(Log_event_type type), which returns a
   string name for the given Log_event_type.  This is just like the
   existing char* Log_event::get_type_str(), except it is a class
   method that takes the log event type as parameter.

   I also added PRE_GA_*_ROWS_LOG_EVENT to Log_event::get_type_str(),
   so that names of old rows event are properly printed.

 - When reading an event, I added a check that the event type is known
   by the current Format_description_log_event. Without this, it may
   crash on bad input (and I was struck by this several times).

 - I patched the following test cases, which all contain BINLOG
   statements for row events which must be preceded by BINLOG
   statements for FD events:
    - rpl_bug31076

While I was here, I fixed some small things in log_event.cc:

 - replaced hard-coded 4 by EVENT_TYPE_OFFSET in 3 places

 - replaced return by DBUG_VOID_RETURN in one place

 - The name of the logfile can be '-' to indicate stdin.  Before my
   patch, the code just checked if the first character is '-'; now it
   does a full strcmp().  Probably, all arguments that begin with a -
   are already handled somewhere else as flags, but I still think it
   is better that the code reflects what it is supposed to do, with as
   little dependencies as possible on other parts of the code.  If we
   one day implement that all command line arguments after -- are
   files (as most unix tools do), then we need this.

I also fixed the following in slave.cc:

 - next_event() was declared twice, and queue_event was not static but
   should be static (not used outside the file).
2007-12-14 19:02:02 +01:00
sven@riska.(none)
ab396c1d09 BUG#26395: if crash during autocommit update to transactional table on master, slave fails
Now, every transaction (including autocommit transactions) starts with
a BEGIN and ends with a COMMIT/ROLLBACK in the binlog.
Added a test case, and updated lots of test case result files.
2007-12-14 14:40:45 +01:00
anozdrin/alik@station.
151444c626 Merge station.:/mnt/raid/alik/MySQL/devel/5.1
into  station.:/mnt/raid/alik/MySQL/devel/5.1-rt
2007-12-14 16:30:22 +03:00
mats@kindahl-laptop.dnsalias.net
45f6c038b2 Merge kindahl-laptop.dnsalias.net:/home/bkroot/mysql-5.1-rpl
into  kindahl-laptop.dnsalias.net:/home/bk/b31582-mysql-5.1-rpl
2007-12-14 13:06:32 +01:00
bar@bar.myoffice.izhnet.ru
02ef77d8df Merge mysql.com:/home/bar/mysql-work/mysql-5.1.b29562
into  mysql.com:/home/bar/mysql-work/mysql-5.1.b29562v2
2007-12-14 13:41:36 +04:00
tomas@whalegate.ndb.mysql.com
0bd2a86e90 Merge tulin@bk-internal.mysql.com:/home/bk/mysql-5.1-opt
into  whalegate.ndb.mysql.com:/home/tomas/mysql-5.1-new-ndb-merge
2007-12-14 06:55:44 +01:00
gluh@mysql.com/eagle.(none)
b371f6385d additional after merge fix 2007-12-13 21:34:05 +04:00
msvensson@shellback.(none)
71e7862d85 Fix faulty select to check for existence of federated support 2007-12-13 17:07:35 +01:00
msvensson@shellback.(none)
f9fc83c290 Don't add skip-innodb on slave 2007-12-13 15:04:25 +01:00
tomas@whalegate.ndb.mysql.com
4b5e9edd69 Merge whalegate.ndb.mysql.com:/home/tomas/mysql-5.1
into  whalegate.ndb.mysql.com:/home/tomas/mysql-5.1-new-ndb-merge
2007-12-13 14:26:57 +01:00
gluh@eagle.(none)
4f5868114a Merge mysql.com:/home/gluh/MySQL/Merge/5.1
into  mysql.com:/home/gluh/MySQL/Merge/5.1-opt
2007-12-13 15:56:04 +04:00
anozdrin/alik@station.
93eef1ce40 Merge station.:/mnt/raid/alik/MySQL/devel/5.1
into  station.:/mnt/raid/alik/MySQL/devel/5.1-rt
2007-12-13 12:06:37 +03:00
hezx@hezx.(none)
6b5866cce1 Merge zhe@bk-internal.mysql.com:/home/bk/mysql-5.1-new-rpl
into  hezx.(none):/media/hda5/work/mysql/bkwork/bug#30998/mysql-5.1-new-rpl
2007-12-13 10:49:41 +08:00
aelkin@dl145j.mysql.com
ea68d51793 bug#31552 manual merge and post-make-test-run changes. 2007-12-12 20:12:29 +01:00
msvensson@pilot.mysql.com
d918988baa WL#4189
- dynamic configuration support
 - safe process
 - cleanups
 - create new suite for fedarated
2007-12-12 18:19:24 +01:00
kostja@bodhi.(none)
657ce57e4e Merge bk-internal.mysql.com:/home/bk/mysql-5.1-runtime
into  bodhi.(none):/opt/local/work/mysql-5.1-12713-1
2007-12-12 18:36:10 +03:00
kostja@bodhi.(none)
ebb9c5d983 Bug#12713 "Error in a stored function called from a SELECT doesn't
cause ROLLBACK of statement", part 1. Review fixes.

Do not send OK/EOF packets to the client until we reached the end of 
the current statement.
This is a consolidation, to keep the functionality that is shared by all 
SQL statements in one place in the server.
Currently this functionality includes:
- close_thread_tables()
- log_slow_statement().

After this patch and the subsequent patch for Bug#12713, it shall also include:
- ha_autocommit_or_rollback()
- net_end_statement()
- query_cache_end_of_result().

In future it may also include:
- mysql_reset_thd_for_next_command().
2007-12-12 18:21:01 +03:00
aelkin@dl145j.mysql.com
62d87757e3 Merge elkin@aelkin2.mysql.internal:MySQL/TEAM/FIXES/5.1/bug31609-conflict_detection
into  dl145j.mysql.com:/tmp/andrei/bug31552
2007-12-12 11:21:54 +01:00
aelkin/elkin@koti.dsl.inet.fi
d8d6db6f78 Bug#31552 Replication breaks when deleting rows from out-of-sync table
without PK
Bug#31609 Not all RBR slave errors reported as errors
bug#32468 delete rows event on a table with foreign key constraint fails

The first two bugs comprise idempotency issues.
First, there was no error code reported under conditions of the bug
description although the slave sql thread halted.
Second, executions were different with and without presence of prim key in
the table.
Third, there was no way to instruct the slave whether to ignore an error
and skip to the following event or to halt.
Fourth, there are handler errors which might happen due to idempotent
applying of binlog but those were not listed among the "idempotent" error
list.

All the named issues are addressed.
Wrt to the 3rd, there is the new global system variable, changeble at run
time, which controls the slave sql thread behaviour.
The new variable allows further extensions to mimic the sql_mode
session/global variable.
To address the 4th, the new bug#32468 had to be fixed as it was staying
in the way.
2007-12-12 12:14:59 +02:00
hezx@hezx.(none)
90bb675975 Merge hezx.(none):/media/hda5/work/mysql/bkroot/mysql-5.1-new-rpl
into  hezx.(none):/media/hda5/work/mysql/bkwork/bug#30998/5.1
2007-12-12 15:02:28 +08:00
istruewing@stella.local
03d99c5956 Merge stella.local:/home2/mydev/mysql-5.1-amain
into  stella.local:/home2/mydev/mysql-5.1-axmrg
2007-12-11 21:37:33 +01:00
tomas@whalegate.ndb.mysql.com
2a01585422 Merge whalegate.ndb.mysql.com:/home/tomas/mysql-5.1
into  whalegate.ndb.mysql.com:/home/tomas/cge-5.1
2007-12-11 21:02:29 +01:00
tomas@whalegate.ndb.mysql.com
5e9c092c5d move randomly failing tests to ndb_team suite 2007-12-11 19:57:26 +01:00
tomas@whalegate.ndb.mysql.com
ddc2ee655f Merge tulin@bk-internal.mysql.com:/home/bk/mysql-5.1-new-ndb
into  whalegate.ndb.mysql.com:/home/tomas/cge-5.1
2007-12-11 16:08:52 +01:00
tomas@whalegate.ndb.mysql.com
48c509a2aa bug#32759 already fixed 2007-12-11 15:08:00 +01:00
mskold/marty@mysql.com/quadfish.(none)
4f8101c863 Enabled test rpl_ndb_ddl 2007-12-11 11:51:14 +01:00
tomas@whalegate.ndb.mysql.com
57c890d501 Merge whalegate.ndb.mysql.com:/home/tomas/cge-5.1
into  whalegate.ndb.mysql.com:/home/tomas/mysql-5.1-new-ndb-merge
2007-12-10 13:32:19 +01:00
tomas@whalegate.ndb.mysql.com
4740565ebb backport test for bug#30674
(bug not present in 5.1)
2007-12-10 13:29:23 +01:00
df@pippilotta.erinye.com
3f79b0f108 Merge pippilotta.erinye.com:/shared/home/df/mysql/build/mysql-5.1
into  pippilotta.erinye.com:/shared/home/df/mysql/build/mysql-5.1-build
2007-12-10 10:46:00 +01:00
tomas@whalegate.ndb.mysql.com
541db60153 Merge whalegate.ndb.mysql.com:/home/tomas/cge-5.1
into  whalegate.ndb.mysql.com:/home/tomas/mysql-5.1-new-ndb-merge
2007-12-10 10:32:21 +01:00
tomas@whalegate.ndb.mysql.com
9eb0ef8914 Merge whalegate.ndb.mysql.com:/home/tomas/mysql-5.1
into  whalegate.ndb.mysql.com:/home/tomas/mysql-5.1-new-ndb-merge
2007-12-10 10:26:01 +01:00
mskold/marty@mysql.com/quadfish.(none)
4dcfb096d7 bug#21072 Duplicate key error in NDB references wrong key: regenerated result 2007-12-07 12:20:04 +01:00
mskold/marty@mysql.com/quadfish.(none)
af908e61b7 bug#21072 Duplicate key error in NDB references wrong key: Post-merge fixes 2007-12-07 11:05:19 +01:00
mleich@five.local.lan
dba250956a Fix for
Bug#32856 testsuite parts: partition_basic_myisam fails 
                              in pushbuild
Skip test if symlink support is missing.
2007-12-06 18:26:50 +01:00
skozlov/ksm@mysql.com/virtop.localdomain
63800e091a WL#4091, part1. replace --sleep by include/wait_condition.inc 2007-12-06 18:27:10 +03:00
holyfoot/hf@hfmain.(none)
18e6de9f15 Merge mysql.com:/home/hf/work/32247/my51-32247
into  mysql.com:/home/hf/work/mrg/my51-mrg
2007-12-06 16:43:52 +04:00
holyfoot/hf@mysql.com/hfmain.(none)
dc01dba255 Bug #32247 Test reports wrong value of "AUTO_INCREMENT" (on a partitioned InnoDB table).
ha_partition::update_create_info() just calls update_create_info
of a first partition, so only get the autoincrement maximum
of the first partition, so SHOW CREATE TABLE can show
small AUTO_INCREMENT parameters.
Fixed by implementing ha_partition::update_create_info() in a way
other handlers work.
HA_ARCHIVE:stats.auto_increment handling made consistent with other engines
2007-12-06 16:39:42 +04:00
mats@kindahl-laptop.dnsalias.net
f136bde28e BUG#31582 (5.1-telco-6.1 -> 5.1.22. Slave crashes when reading UPDATE for VARCHAR):
Just adding testcase. This bug was fixed by patch for BUG#31583.
2007-12-05 20:49:50 +01:00
tsmith@ramayana.hindu.god
8fc0bfb6b6 Merge ramayana.hindu.god:/home/tsmith/m/bk/51
into  ramayana.hindu.god:/home/tsmith/m/bk/maint/51-merge
2007-12-05 12:33:36 -07:00
mats@kindahl-laptop.dnsalias.net
eca0172010 BUG#31583 (5.1-telco-6.1 -> 5.1.22. Slave returns Error in unknown event):
In the patch for BUG#21842, the code for handling old rows events were
refactored.  There were a bug in the refactored code (possibly introduced
after the patch for BUG#21842) that caused caused the refactored old events
to read a columns bitmap after image even though there is no such bitmap
for old events. As a result, the reading got out of sync, and started reading
invalid data.

This patch removes all trace of the after image column bitmap from the refactored
old events and removes functions that are no longer needed because they are empty.
2007-12-05 20:00:14 +01:00
hezx@hezx.(none)
0e0f2feb78 Bug#30998 Drop View breaks replication if view does not exist
When executing drop view statement on the master, the statement is not written into bin-log if any error occurs, this could cause master slave inconsistence if any view has been dropped. 

If some error occured and no view has been dropped, don't bin-log the statement, if at least one view has been dropped the query is bin-logged possible with an error.
2007-12-03 16:54:44 +08:00
gni@dev3-221.dev.cn.tlan
fb483b3c73 BUG#31245 Stress test fails on NDB:"Unknow prepared statement handler" 2007-11-30 09:56:04 +08:00
kent@kent-amd64.(none)
3214b7c286 Merge kboortz@bk-internal.mysql.com:/home/bk/mysql-5.0
into  mysql.com:/home/kent/bk/mac-os-x-universal/mysql-5.0-build
2007-11-29 23:42:46 +01:00
ramil/ram@mysql.com/ramil.myoffice.izhnet.ru
87bf7eff92 after-merge fix:
- result adjusted.
2007-11-29 22:32:34 +04:00
gni@dev3-221.dev.cn.tlan
eb06bee53b BUG#30417 Cluster misbehaves on auto-inc w/o PK. 2007-11-29 19:19:55 +08:00
ramil/ram@ramil.myoffice.izhnet.ru
ec0ce5ea03 Merge mysql.com:/home/ram/work/b32726/b32726.5.0
into  mysql.com:/home/ram/work/b32726/b32726.5.1
2007-11-29 14:35:15 +04:00
df@pippilotta.erinye.com
4530750499 Merge bk-internal.mysql.com:/home/bk/mysql-5.1
into  pippilotta.erinye.com:/shared/home/df/mysql/build/mysql-5.1-build
2007-11-28 19:49:29 +01:00
bar@mysql.com/bar.myoffice.izhnet.ru
7840cdae38 bug#29562 default collation of ucs2_unicode_ci crashes slave
Problem: some pieces of code relied on the default character
set settings, which didn't work in case of default character set
ucs2.
Fix: Specifying character set explicitly, not to depend on
the default settings.
2007-11-28 15:35:25 +04:00
mkindahl@dl145h.mysql.com
0d13a48c25 Merge dl145h.mysql.com:/data0/mkindahl/mysql-5.1-rpl-merge
into  dl145h.mysql.com:/data0/mkindahl/mysql-5.1-new-rpl
2007-11-28 12:34:25 +01:00
mkindahl@dl145h.mysql.com
087c239bb3 Merge mkindahl@bk-internal.mysql.com:/home/bk/mysql-5.1-rpl
into  dl145h.mysql.com:/data0/mkindahl/mysql-5.1-new-rpl
2007-11-28 12:05:35 +01:00