1
0
mirror of https://github.com/MariaDB/server.git synced 2025-11-12 10:22:39 +03:00
Commit Graph

23080 Commits

Author SHA1 Message Date
hezx@hezx.(none)
f8fb5adc2f Merge hezx.(none):/media/sda3/work/mysql/bkwork/bug#32205/5.1
into  hezx.(none):/media/sda3/work/mysql/bkwork/bug#32205/mysql-5.1-new-rpl
2007-12-17 21:21:23 +08:00
hezx@hezx.(none)
3255237fc2 BUG#32205 Replaying statements from mysqlbinlog fails with a syntax error, replicates
fine

The reason of this bug is that when mysqlbinlog dumps a query, the query is written to
output with a delimeter appended right after it, if the query string ends with a '--'
comment, then the delimeter would be considered as part of the comment, if there are any
statements after this query, then it will cause a syntax error.

Start a newline before appending delimiter after a query string
2007-12-17 21:13:25 +08:00
sven@riska.(none)
8b22f0a1d1 Merge riska.(none):/home/sven/bkroot/5.1-new-rpl
into  riska.(none):/home/sven/bk/b32407-5.1-new-rpl-mysqlbinlog_base64
2007-12-14 19:02:30 +01:00
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
bar@bar.myoffice.izhnet.ru
90db472666 Merge abarkov@bk-internal.mysql.com:/home/bk/mysql-5.1-rpl
into  mysql.com:/home/bar/mysql-work/mysql-5.1.b29562v2
2007-12-14 20:12:55 +04:00
bar@mysql.com/bar.myoffice.izhnet.ru
664162d1ef NDB didn't like utf-8 in the last change for some reasons
Changing charset to latin1.
2007-12-14 20:11:49 +04: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
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
aelkin@dl145j.mysql.com
f379d0f285 Merge bk-internal.mysql.com:/home/bk/mysql-5.1-new-rpl
into  dl145j.mysql.com:/tmp/andrei/bug31552
2007-12-13 09:33:19 +01:00
aelkin@dl145j.mysql.com
50123a8bc5 bug#31552 fixing a compilation issue in the debugless build. 2007-12-13 09:32:23 +01: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
hezx@hezx.(none)
ef8606b3cb fix manual merge 2007-12-13 10:40:39 +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
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)
81f04074ca Merge hezx.(none):/media/hda5/work/mysql/bkwork/bug#30998/mysql-5.0-rpl
into  hezx.(none):/media/hda5/work/mysql/bkwork/bug#30998/merge-mysql-5.1-new-rpl
2007-12-12 15:43:52 +08: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
hezx@hezx.(none)
a85e8a3f21 Merge hezx.(none):/media/hda5/work/mysql/bkroot/mysql-5.0-rpl
into  hezx.(none):/media/hda5/work/mysql/bkwork/bug#30998/5.0
2007-12-11 17:34:37 +08: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
bar@mysql.com/bar.myoffice.izhnet.ru
25debb1db6 sql_string.cc:
Fixing a wrong comment.
2007-12-05 12:26:21 +04: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
hezx@hezx.(none)
c267a923a3 Bug#30998 Drop View breaks replication if view does not exist
When executing drop view statement on the master, the statement is written
into bin-log without checking for possible errors, so the statement would 
always be bin-logged with error code cleared even if some error might occur, 
for example, some of the views being dropped does not exist. This would cause 
failure on the slave.

Writing bin-log after check for errors, if at least one view has been dropped
the query is bin-logged possible with an error.
2007-12-03 13:11:40 +08: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
mats@kindahl-laptop.dnsalias.net
8809b0db86 BUG#32580 (mysqlbinlog cannot read binlog event generated by user variable usage):
The client program 'mysqlbinlog' crashed when trying to print a User_var_log_event holding
a floating-point value since the format specifier for my_b_printf() does not support
floating-point format specifiers.

This patch prints the floating-point number to an internal buffer, and then writes
that buffer to the output instead.
2007-11-23 14:41:41 +01:00
mkindahl@dl145h.mysql.com
0c7f3bdeba Merge dl145h.mysql.com:/data0/mkindahl/mysql-5.1
into  dl145h.mysql.com:/data0/mkindahl/mysql-5.1-rpl-merge
2007-11-21 21:15:33 +01:00
sven@riska.(none)
a820324569 BUG#31581: 5.1-telco-6.1 -> 5.1.22. Slave crashes during starting
The patch I previously pushed for this bug did not compile because
a field in class THD had been renamed.
This patch renames thd->query_error to thd->is_slave_error in
log_event_old.cc by applying the same patch to log_event_old.cc as
was previously applied to log_event.cc.
2007-11-21 16:53:46 +01:00
sven@riska.(none)
c26a136ed3 Merge riska.(none):/home/sven/bkroot/5.1-new-rpl
into  riska.(none):/home/sven/bk/b31581-5.1.22-rbr_slave_crash
2007-11-21 15:27:12 +01:00
sven@riska.(none)
bdc80e8272 BUG#31581: 5.1-telco-6.1 -> 5.1.22. Slave crashes during starting
This patch has two purposes:
(1) To refactor the code so that
   {Write|Update|Delete}_rows_log_event_old does not use code from
   {Write|Update|Delete}_rows_log_event. Before refactoring there
   was the following problem: whenever we modifed the code for new
   events, it affected the old events. This is bad, as it makes
   maintainance difficult. After refactoring, we can safely edit the
   new code without affecting old events. So, if we for instance
   modify the binary format of new events, we no longer need to worry
   about how the new code reads old events.
(2) To fix BUG#31581.

These two objectives are reached by the following changes:
 - Merged Rows_log_event into Old_rows_log_event and
   {Write|Update|Delete}_rows_log_event into
   {Write|Update|Delete}_rows_log_event_old.
 - Fixed the bug by replacing {WRITE|UPDATE|DELETE}_ROWS_EVENT by
   PRE_GA_{WRITE|UPDATE|DELETE}_ROWS_EVENT.
 - Added comments to log_event_old.h

(This patch is identical to the previously committed patch which was
a collapse of three changesets, except that it adds assert(0) to
constructors for old types of row log events that should never be
called.)
2007-11-20 19:49:35 +01:00
mkindahl@dl145h.mysql.com
6baad48043 Merge dl145h.mysql.com:/data0/mkindahl/mysql-5.1-new-rpl
into  dl145h.mysql.com:/data0/mkindahl/mysql-5.1-rpl-merge
2007-11-16 15:56:24 +01:00
mkindahl@dl145h.mysql.com
e0ae105055 Bug#32435:
DROP DATABASE statement writes changes to mysql.proc table under RBR

When replicating a DROP DATABASE statement with a database holding
stored procedures, the changes to the mysql.proc table was recorded
in the binary log under row-based replication.

With this patch, the thread uses statement-logging format for the
duration of the DROP DATABASE statement. The logging format is
(already) reset at the end of the statement, so no additional code
for resetting the logging format is necessary.
2007-11-16 15:55:22 +01:00
mkindahl@dl145h.mysql.com
60fa29c847 Merge dl145h.mysql.com:/data0/mkindahl/mysql-5.0-rpl-merge
into  dl145h.mysql.com:/data0/mkindahl/mysql-5.1-rpl-merge
2007-11-15 13:31:39 +01:00
mkindahl@dl145h.mysql.com
d7f570c056 Post-merge fixes. 2007-11-14 21:08:59 +01:00
mkindahl@dl145h.mysql.com
379b67b967 Merge mkindahl@bk-internal.mysql.com:/home/bk/mysql-5.0-rpl
into  dl145h.mysql.com:/data0/mkindahl/mysql-5.0-rpl
2007-11-14 15:41:33 +01:00
gluh@eagle.(none)
58336411c9 Merge mysql.com:/home/gluh/MySQL/Merge/5.1
into  mysql.com:/home/gluh/MySQL/Merge/5.1-opt
2007-11-14 17:30:16 +04:00
mkindahl@dl145h.mysql.com
23cd47e0e1 Reverting changes to debug printouts to ha_ndbcluster.cc. 2007-11-14 14:04:33 +01:00
gshchepa/uchum@gleb.loc
95e7cccfee Merge gleb.loc:/home/uchum/work/bk/5.1-opt-32034
into  gleb.loc:/home/uchum/work/bk/5.1-opt
2007-11-14 15:49:57 +04:00
mkindahl@dl145h.mysql.com
a8bbce6569 Merge dl145h.mysql.com:/data0/mkindahl/mysql-5.0
into  dl145h.mysql.com:/data0/mkindahl/mysql-5.0-rpl
2007-11-14 11:19:34 +01:00
mkindahl@dl145h.mysql.com
6b5cb11dba Merge dl145h.mysql.com:/data0/mkindahl/mysql-5.1
into  dl145h.mysql.com:/data0/mkindahl/mysql-5.1-new-rpl
2007-11-14 11:07:30 +01:00
gkodinov/kgeorge@magare.gmz
82ce901ded Merge gkodinov@bk-internal.mysql.com:/home/bk/mysql-5.1-opt
into  magare.gmz:/home/kgeorge/mysql/autopush/B31562-5.1-opt
2007-11-14 12:03:28 +02:00
gshchepa/uchum@gleb.loc
70f36562bc Fixed bug #32034: On 64bit platforms assigning values of
storage engine system variables was not validated and
unexpected value was assigned.

The check_func_enum function used subtraction from the uint
value with the probably negative result. That result of
type uint was compared with 0 after casting to signed long
type. On architectures where long type is longer than int
type the result of comparison was unexpected.
2007-11-14 13:48:21 +04:00
holyfoot/hf@hfmain.(none)
19c3bd89f8 Merge mysql.com:/home/hf/work/32067/my51-32067
into  mysql.com:/home/hf/work/31305/my51-31305
2007-11-13 23:16:48 +04:00
gkodinov/kgeorge@magare.gmz
70f9ec3c8d Merge magare.gmz:/home/kgeorge/mysql/autopush/B31562-5.0-opt
into  magare.gmz:/home/kgeorge/mysql/work/B31562-5.1-opt
2007-11-13 19:15:49 +02:00
gkodinov/kgeorge@magare.gmz
eea70871f1 Merge gkodinov@bk-internal.mysql.com:/home/bk/mysql-5.0-opt
into  magare.gmz:/home/kgeorge/mysql/autopush/B31562-5.0-opt
2007-11-13 19:00:45 +02:00
evgen@moonbone.local
c406150f34 Merge epotemkin@bk-internal.mysql.com:/home/bk/mysql-5.1-opt
into  moonbone.local:/work/30081-bug-5.1-opt-mysql
2007-11-13 13:29:42 +00:00
evgen@moonbone.local
4fa7ee92e6 Bug#30081: "ON UPDATE CURRENT_TIMESTAMP" wasn't shown by the SHOW FIELDS
command and reported to a client.

The fact that a timestamp field will be set to NO on UPDATE wasn't shown 
by the SHOW COMMAND and reported to a client through connectors. This led to
problems in the ODBC connector and might lead to a user confusion.

A new filed flag called ON_UPDATE_NOW_FLAG is added. 
Constructors of the Field_timestamp set it when a field should be set to NOW
on UPDATE.

The get_schema_column_record function now reports whether a timestamp field
will be set to NOW on UPDATE.
2007-11-13 13:24:48 +00:00
gkodinov/kgeorge@magare.gmz
3384d3e96c Bug #31562: HAVING and lower case
The columns in HAVING can reference the GROUP BY and 
SELECT columns. There can be "table" prefixes when
referencing these columns. And these "table" prefixes
in HAVING use the table alias if available.
This means that table aliases are subject to the same
storage rules as table names and are dependent on 
lower_case_table_names in the same way as the table 
names are.
Fixed by :
1. Treating table aliases as table names
and make them lowercase when printing out the SQL
statement for view persistence.
2. Using case insensitive comparison for table 
aliases when requested by lower_case_table_names
2007-11-13 11:39:52 +02:00
mats@kindahl-laptop.dnsalias.net
6e1f5f6eed Elimination of warning for unused function code_name() in non-debug mode. 2007-11-13 09:43:29 +01:00