Commit graph

10 commits

Author SHA1 Message Date
Alexander Nozdrin
a6667f8577 Manual merge from mysql-trunk-merge.
Conflicts:
  - configure.in
  - include/m_string.h
  - mysql-test/extra/rpl_tests/rpl_row_func003.test
  - mysql-test/r/mysqlbinlog.result
  - mysql-test/r/union.result
  - mysql-test/suite/binlog/r/binlog_killed_simulate.result
  - mysql-test/suite/binlog/r/binlog_row_mix_innodb_myisam.result
  - mysql-test/suite/binlog/r/binlog_unsafe.result
  - mysql-test/suite/binlog/t/binlog_unsafe.test
  - mysql-test/suite/rpl/r/rpl_loaddata_fatal.result
  - mysql-test/suite/rpl/r/rpl_loaddata_map.result
  - mysql-test/suite/rpl/r/rpl_stm_loaddata_concurrent.result
  - mysql-test/suite/rpl/r/rpl_stm_log.result
  - mysql-test/suite/rpl/t/rpl_optimize.test
  - mysql-test/t/mysqlbinlog.test
  - mysql-test/t/union.test
  - sql/rpl_utility.h
  - sql/sql_union.cc
  - strings/Makefile.am
2010-01-19 19:36:14 +03:00
Luis Soares
595719280e BUG#49479: Slave stops with syntax error: LOAD DATA event without
escaped field names

When in mixed or statement mode, the master logs LOAD DATA
queries by resorting to an Execute_load_query_log_event. This
event does not contain the original query, but a rewritten
version of it, which includes the table field names. However, the
rewrite does not escape the field names. If these names match a
reserved keyword, then the slave will stop with a syntax error
when executing the event.

We fix this by escaping the fields names as it happens already
for the table name.

mysql-test/extra/rpl_tests/rpl_loaddata.test:
  Added test case for the reported bug.
mysql-test/r/mysqlbinlog.result:
  Changed result to support escaped field name.
mysql-test/suite/binlog/r/binlog_killed_simulate.result:
  Changed result to support escaped field name.
mysql-test/suite/binlog/r/binlog_row_mix_innodb_myisam.result:
  Changed result to support escaped field name.
mysql-test/suite/binlog/r/binlog_stm_blackhole.result:
  Changed result to support escaped field name.
mysql-test/suite/binlog/r/binlog_stm_mix_innodb_myisam.result:
  Changed result to support escaped field name.
mysql-test/suite/rpl/r/rpl_innodb_mixed_dml.result:
  Changed result to support escaped field name.
mysql-test/suite/rpl/r/rpl_loaddata.result:
  Added result for new test. 
  Changed show slave status positions which are now different because of
  extra escape character in field names.
mysql-test/suite/rpl/r/rpl_loaddata_fatal.result:
  Changed show slave status positions which are now different because of
  extra escape character.
mysql-test/suite/rpl/r/rpl_loaddata_map.result:
  Changed result to support escaped field name.
mysql-test/suite/rpl/r/rpl_stm_log.result:
  Changed result to support escaped field name.
mysql-test/t/mysqlbinlog.test:
  Changed positions which is now different because of extra escape 
  character in field names.
sql/sql_load.cc:
  Appended escape characters before and after field names.
2009-12-06 01:11:32 +00:00
Andrei Elkin
7eb789a723 merging 5.1 main -> 5.1-rep+2 -> 5.1-rep+3; binlog_unsafe , rpl_mysql_upgrade fail and are under treatment 2009-11-10 20:45:15 +02:00
Alfranio Correia
19c380aaff WL#2687 WL#5072 BUG#40278 BUG#47175
Non-transactional updates that take place inside a transaction present problems
for logging because they are visible to other clients before the transaction
is committed, and they are not rolled back even if the transaction is rolled
back. It is not always possible to log correctly in statement format when both
transactional and non-transactional tables are used in the same transaction.

In the current patch, we ensure that such scenario is completely safe under the
ROW and MIXED modes.
2009-11-03 19:02:56 +00:00
Tatiana A. Nurnberg
4102363f37 Bug#43746: YACC return wrong query string when parse 'load data infile' sql statement
"load data" statements were written to the binlog as a mix of the original statement
and bits recreated from parse-info. This relied on implementation details and broke
with IGNORE_SPACES and versioned comments.

We now completely resynthesize the query for LOAD DATA for binlog (which among other
things normalizes them somewhat with regard to case, spaces, etc.).
We have already parsed the query properly, so we make use of that rather
than mix-and-match string literals and parsed items.
This should make us safe with regard to versioned comments, even those
spanning multiple tokens. Also no longer affected by IGNORE_SPACES.

mysql-test/r/mysqlbinlog.result:
  LOAD DATA INFILE normalized
mysql-test/suite/binlog/r/binlog_killed_simulate.result:
  LOAD DATA INFILE normalized
mysql-test/suite/binlog/r/binlog_row_mix_innodb_myisam.result:
  LOAD DATA INFILE normalized
mysql-test/suite/binlog/r/binlog_stm_blackhole.result:
  LOAD DATA INFILE normalized
mysql-test/suite/binlog/r/binlog_stm_mix_innodb_myisam.result:
  LOAD DATA INFILE normalized
mysql-test/suite/rpl/r/rpl_innodb_mixed_dml.result:
  LOAD DATA INFILE normalized
mysql-test/suite/rpl/r/rpl_loaddata.result:
  LOAD DATA INFILE normalized
mysql-test/suite/rpl/r/rpl_loaddata_fatal.result:
  LOAD DATA INFILE normalized; offsets adjusted to reflect that
mysql-test/suite/rpl/r/rpl_loaddata_map.result:
  LOAD DATA INFILE normalized
mysql-test/suite/rpl/r/rpl_loaddatalocal.result:
  test for #43746 - trying to break LOAD DATA part of parser
mysql-test/suite/rpl/r/rpl_stm_log.result:
  LOAD DATA INFILE normalized
mysql-test/suite/rpl/t/rpl_loaddatalocal.test:
  try to break the LOAD DATA part of the parser (test for #43746)
mysql-test/t/mysqlbinlog.test:
  LOAD DATA INFILE normalized; adjust offsets to reflect that
sql/log_event.cc:
  clean up Load_log_event::print_query and friends so they don't print
  excess spaces. add support for printing charset names to print_query.
sql/log_event.h:
  We already have three places where we synthesize LOAD DATA queries.
  Better use one of those!
sql/sql_lex.h:
  When binlogging LOAD DATA statements, we make up the statement to
  be logged (from the parse-info, rather than substrings of the
  original query) now. Consequently, we no longer need (string-)
  pointers into the original query.
sql/sql_load.cc:
  Completely rewrote write_execute_load_query_log_event() to synthesize the
  LOAD DATA statement wholesale, rather than piece it together from
  synthesized bits and literal excerpts from the original query. This
  will not only give us a nice, normalized statement (all uppercase,
  no excess spaces, etc.), it will also handle comments, including
  versioned comments right, which is certainly more than we can say
  about the previous incarnation.
sql/sql_yacc.yy:
  We're no longer assembling LOAD DATA statements from bodyparts of the
  original query, so some bookkeeping in the parser can go.
2009-09-28 05:41:10 -07:00
Sven Sandberg
620c4878b3 BUG#38178: rpl_loaddata_map fails sporadically in pushbuild
Problem: master binlog has 'create table t1'. Master binlog
was removed before slave could replicate it. In test's cleanup
code, master did 'drop table t1', which caused slave sql
thread to stop with an error since slave sql thread did not
know about t1.
Fix: t1 is just an auxiliary construction, only needed on
master. Hence, we turn off binlogging before t1 is created,
drop t1 as soon as we don't need it anymore, and then turn
on binlogging again.


mysql-test/include/show_binlog_events.inc:
  Filter out directories and block_len from
  LOAD DATA INFILE events.
mysql-test/suite/rpl/r/rpl_loaddata_map.result:
  updated result file
mysql-test/suite/rpl/t/rpl_loaddata_map.test:
  Turn off binlogging while t1 is used, drop t1 as soon
  as we don't need it anymore, and turn on binlogging again.
  Also added some comments and replaced 'show binlog events'
  by 'source include/show_binlog_events.inc'.
2008-07-18 13:34:19 +02:00
unknown
781de19688 Updating result file for rpl_loaddata_map.
mysql-test/suite/rpl/r/rpl_loaddata_map.result:
  Result change.
2008-02-05 19:44:16 +01:00
unknown
a63ef17fca Merge mkindahl@bk-internal.mysql.com:/home/bk/mysql-5.1-new-rpl
into  dl145h.mysql.com:/data0/mkindahl/mysql-5.1-rpl


include/my_base.h:
  Auto merged
mysql-test/include/show_binlog_events2.inc:
  Auto merged
mysql-test/suite/binlog/t/binlog_old_versions.test:
  Auto merged
mysql-test/suite/rpl/r/rpl_row_tabledefs_2myisam.result:
  Auto merged
mysql-test/suite/rpl/r/rpl_row_tabledefs_3innodb.result:
  Auto merged
mysql-test/suite/rpl/t/rpl_loaddata_map-master.opt:
  Auto merged
mysql-test/suite/rpl/t/rpl_loaddata_map-slave.opt:
  Auto merged
sql/log_event_old.cc:
  Auto merged
sql/sql_binlog.cc:
  Auto merged
mysql-test/suite/rpl/r/rpl_loaddata_map.result:
  Manual merge.
mysql-test/suite/rpl/r/rpl_user.result:
  Manual merge.
mysql-test/suite/rpl/t/rpl_loaddata_map.test:
  Manual merge.
mysql-test/suite/rpl/t/rpl_user.test:
  Manual merge.
sql/log_event.cc:
  Manual merge.
sql/rpl_record.cc:
  Manual merge.
2008-02-05 14:52:20 +01:00
unknown
681bf14ea7 Fixes to make tests pass on pushbuild.
mysql-test/suite/rpl/t/rpl_loaddata_map-master.opt:
  Rename: mysql-test/t/rpl_loaddata_map-master.opt -> mysql-test/suite/rpl/t/rpl_loaddata_map-master.opt
mysql-test/suite/rpl/t/rpl_loaddata_map-slave.opt:
  Rename: mysql-test/t/rpl_loaddata_map-slave.opt -> mysql-test/suite/rpl/t/rpl_loaddata_map-slave.opt
mysql-test/include/show_binlog_events2.inc:
  Binlog position change.
mysql-test/suite/rpl/r/rpl_loaddata_map.result:
  Result change.
mysql-test/suite/rpl/r/rpl_user.result:
  Result change.
mysql-test/suite/rpl/t/rpl_loaddata_map.test:
  Test is only sensible to execute for statement and mixed mode.
mysql-test/suite/rpl/t/rpl_user.test:
  Test assumed that binary log is identical for row- and statement-
  based logging, which it was not. Deleting users individually
  on master and slave respectively, without involving binary
  log.
2008-01-31 15:53:47 +01:00
unknown
c883995091 Post merge fix
mysql-test/suite/rpl/t/rpl_loaddata_map-master.opt:
  Rename: mysql-test/t/rpl_loaddata_map-master.opt -> mysql-test/suite/rpl/t/rpl_loaddata_map-master.opt
mysql-test/suite/rpl/t/rpl_loaddata_map-slave.opt:
  Rename: mysql-test/t/rpl_loaddata_map-slave.opt -> mysql-test/suite/rpl/t/rpl_loaddata_map-slave.opt
2008-01-31 16:51:55 +08:00