From 8cad4f7090f50c19a1e0a247c57d9d965b7b7a6e Mon Sep 17 00:00:00 2001 From: unknown Date: Wed, 9 Apr 2003 15:16:12 +0200 Subject: fix for #254 (3.23 master, 4.0 slave. Slave loss temp tables everytime FLUSH LOGS on master). This fix is less bad than the bug, it will cause a problem only maybe if the master dies the hard way (I say maybe because I could not cause a problem, and I don't see how it could happen). sql/log_event.cc: fix for #254 (3.23 master, 4.0 slave. Slave loss temp tables everytime FLUSH LOGS on master). This fix is less bad than the bug, it will cause a problem only maybe if the master dies the hard way. (I say maybe because I could not cause a problem, and I don't see how it could happen). --- sql/log_event.cc | 28 ++++++++++++++++++++++------ 1 file changed, 22 insertions(+), 6 deletions(-) (limited to 'sql/log_event.cc') diff --git a/sql/log_event.cc b/sql/log_event.cc index 2040cebf17e..3b499b8d502 100644 --- a/sql/log_event.cc +++ b/sql/log_event.cc @@ -1949,6 +1949,10 @@ int Load_log_event::exec_event(NET* net, struct st_relay_log_info* rli, IMPLEMENTATION - To handle the case where the master died without a stop event, we clean up all temporary tables + locks that we got. + However, we don't clean temporary tables if the master was 3.23 + (this is because a 3.23 master writes a Start_log_event at every + binlog rotation; if we were not careful we would remove temp tables + on the slave when FLUSH LOGS is issued on the master). TODO - Remove all active user locks @@ -1959,13 +1963,18 @@ int Load_log_event::exec_event(NET* net, struct st_relay_log_info* rli, int Start_log_event::exec_event(struct st_relay_log_info* rli) { - /* All temporary tables was deleted on the master */ - close_temporary_tables(thd); - /* - If we have old format, load_tmpdir is cleaned up by the I/O thread - */ if (!rli->mi->old_format) + { + /* + If 4.0 master, all temporary tables have been deleted on the master; + if 3.23 master, this is far from sure. + */ + close_temporary_tables(thd); + /* + If we have old format, load_tmpdir is cleaned up by the I/O thread + */ cleanup_load_tmpdir(); + } return Log_event::exec_event(rli); } @@ -1980,7 +1989,14 @@ int Start_log_event::exec_event(struct st_relay_log_info* rli) int Stop_log_event::exec_event(struct st_relay_log_info* rli) { - // do not clean up immediately after rotate event + /* + do not clean up immediately after rotate event; + QQ: this should be a useless test: the only case when it is false is when + shutdown occured just after FLUSH LOGS. It has nothing to do with Rotate? + By the way, immediately after a Rotate + the I/O thread does not write the Stop to the relay log, + so we won't come here in that case. + */ if (rli->master_log_pos > BIN_LOG_HEADER_SIZE) { close_temporary_tables(thd); -- cgit v1.2.1 From 963d57a39446490ce2fb91c773ac2466c3723aa1 Mon Sep 17 00:00:00 2001 From: unknown Date: Wed, 23 Apr 2003 00:13:37 +0300 Subject: Fixed problem with timestamps in binary log on 64 bit machines Backported fix from 4.1 for bug 212: SELECT query containing a NATURAL JOIN and parentheses in the WHERE clause mysql-test/r/join.result: New test results mysql-test/t/join.test: Test for bug 212 sql/log_event.cc: Removed wrong cast sql/log_event.h: Fixed problem with timestamps in binary log on 64 bit machines sql/sql_list.h: Fix for bug 212 (back ported from 4.1) --- sql/log_event.cc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'sql/log_event.cc') diff --git a/sql/log_event.cc b/sql/log_event.cc index 7c4c893a823..da25f842bd0 100644 --- a/sql/log_event.cc +++ b/sql/log_event.cc @@ -304,7 +304,7 @@ void Start_log_event::print(FILE* file, bool short_form, char* last_db) print_header(file); fprintf(file, "\tStart: binlog v %d, server v %s created ", binlog_version, server_version); - print_timestamp(file, (time_t*)&created); + print_timestamp(file, &created); fputc('\n', file); fflush(file); } -- cgit v1.2.1 From 60d620aee0f586cae0424cac2ae79e70aa59281d Mon Sep 17 00:00:00 2001 From: unknown Date: Tue, 22 Apr 2003 19:38:57 -0400 Subject: fix error message for for load data infile --- sql/log_event.cc | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) (limited to 'sql/log_event.cc') diff --git a/sql/log_event.cc b/sql/log_event.cc index c8eb4026120..f87a3872324 100644 --- a/sql/log_event.cc +++ b/sql/log_event.cc @@ -1922,13 +1922,13 @@ int Load_log_event::exec_event(NET* net, struct st_relay_log_info* rli, close_thread_tables(thd); if (thd->query_error) { - int sql_error = thd->net.last_errno; + int sql_error= thd->net.last_errno; if (!sql_error) - sql_error = ER_UNKNOWN_ERROR; - + sql_error= ER_UNKNOWN_ERROR; slave_print_error(rli,sql_error, - "Slave: Error '%s' running load data infile ", - ER_SAFE(sql_error)); + "Error '%s' running load data infile", + sql_error ? thd->net.last_error : + ER_SAFE(ER_UNKNOWN_ERROR)); free_root(&thd->mem_root,0); return 1; } @@ -1936,7 +1936,7 @@ int Load_log_event::exec_event(NET* net, struct st_relay_log_info* rli, if (thd->fatal_error) { - sql_print_error("Slave: Fatal error running LOAD DATA INFILE "); + sql_print_error("Fatal error running LOAD DATA INFILE "); return 1; } -- cgit v1.2.1 From c14f989ff83e27d0c28964cf1a97e5e58a53c4ff Mon Sep 17 00:00:00 2001 From: unknown Date: Wed, 23 Apr 2003 18:00:07 +0500 Subject: Task 761:'mysqlbinlog should not die when reading unknown event' client/mysqlbinlog.cc: Task 761:'mysqlbinlog should not die when reading unknown event' The 'force-read' option has been added. sql/log_event.cc: Task 761:'mysqlbinlog should not die when reading unknown event' The'Unknown_log_event' class has been added sql/log_event.h: Task 761:'mysqlbinlog should not die when reading unknown event' The 'Unknown_log_event' class has been added. --- sql/log_event.cc | 22 +++++++++++++++++++++- 1 file changed, 21 insertions(+), 1 deletion(-) (limited to 'sql/log_event.cc') diff --git a/sql/log_event.cc b/sql/log_event.cc index b627636186b..05d5788f5ae 100644 --- a/sql/log_event.cc +++ b/sql/log_event.cc @@ -659,9 +659,18 @@ Log_event* Log_event::read_log_event(const char* buf, int event_len, } if (!ev || !ev->is_valid()) { - *error= "Found invalid event in binary log"; delete ev; +#ifdef MYSQL_CLIENT + if (!force_opt) + { + *error= "Found invalid event in binary log"; + return 0; + } + ev= new Unknown_log_event(buf, old_format); +#else + *error= "Found invalid event in binary log"; return 0; +#endif } ev->cached_event_len = event_len; return ev; @@ -1695,6 +1704,17 @@ void Execute_load_log_event::pack_info(String* packet) } #endif +#ifdef MYSQL_CLIENT +void Unknown_log_event::print(FILE* file, bool short_form, char* last_db) +{ + if (short_form) + return; + print_header(file); + fputc('\n', file); + fprintf(file, "# %s", "Unknown event\n"); +} +#endif + #ifndef MYSQL_CLIENT int Query_log_event::exec_event(struct st_relay_log_info* rli) { -- cgit v1.2.1 From f72611b4fa7eb45259b26d75a733f7a29d20dc04 Mon Sep 17 00:00:00 2001 From: unknown Date: Wed, 21 May 2003 21:39:58 +0300 Subject: After merge fixes Added initialization of all important global variables BUILD/SETUP.sh: build with readline client/mysqltest.c: Added variable SERVER_VERSION myisam/mi_key.c: Indentation change myisam/mi_open.c: After merge fix myisam/mi_range.c: After merge fix myisam/mi_rkey.c: After merge fix myisam/mi_search.c: After merge fix myisam/myisamdef.h: After merge fix mysql-test/include/not_embedded.inc: Fix test (because of wrong utf8 test) mysql-test/r/alter_table.result: Updated results after merge mysql-test/r/create.result: Updated results after merge mysql-test/r/ctype_recoding.result: Updated results after merge mysql-test/r/fulltext.result: Updated results after merge mysql-test/r/func_group.result: Updated results after merge mysql-test/r/group_by.result: Updated results after merge mysql-test/r/innodb.result: Updated results after merge mysql-test/r/join_outer.result: Updated results after merge mysql-test/r/null_key.result: Updated results after merge mysql-test/r/order_by.result: Updated results after merge mysql-test/r/query_cache.result: Updated results after merge mysql-test/r/repair.result: Updated results after merge mysql-test/r/rpl_flush_tables.result: Updated results after merge mysql-test/r/union.result: Updated results after merge mysql-test/r/update.result: Updated results after merge mysql-test/t/ansi.test: After merge fixes mysql-test/t/create.test: After merge fixes mysql-test/t/ctype_recoding.test: After merge fixes mysql-test/t/ctype_ujis.test: After merge fixes mysql-test/t/fulltext.test: After merge fixes mysql-test/t/innodb.test: After merge fixes mysql-test/t/join_outer.test: After merge fixes mysql-test/t/loaddata.test: After merge fixes mysql-test/t/order_by.test: After merge fixes mysql-test/t/rpl_flush_tables.test: After merge fixes mysql-test/t/status.test: After merge fixes mysql-test/t/subselect.test: After merge fixes sql/convert.cc: Code cleanup sql/field.cc: After merge fixes sql/filesort.cc: Remove compiler warning sql/item.cc: More efficient set_name() (no mallocs) sql/item_cmpfunc.cc: Code Code cleanup Item_bool_func2::fix_fields() added to get error handling right for cmp_charset sql/item_cmpfunc.h: New prototypes sql/item_func.cc: After merge fix sql/item_strfunc.cc: Faster check for BINARY sql/log_event.cc: Comment cleanup sql/mysql_priv.h: New prototypes and variables sql/mysqld.cc: Added initialization of all important global variables. Cleanup of variable declarations This is needed ot make the embedded version restartable sql/opt_sum.cc: After merge fix sql/set_var.cc: Code cleanup sql/sql_acl.cc: After merge fix Better error message sql/sql_db.cc: After merge fix sql/sql_derived.cc: After merge fix sql/sql_insert.cc: Indentation cleanups sql/sql_list.h: Added empty() to base_ilist sql/sql_parse.cc: After merge fix sql/sql_select.cc: After merge fix Fixed derived name handling in EXPLAIN sql/sql_show.cc: After merge fix sql/sql_string.cc: Made copy_and_convert global sql/sql_string.h: Made copy_and_convert global sql/sql_update.cc: After merge fix sql/sql_yacc.yy: After merge fix sql/thr_malloc.cc: Added sql_strmake_with_convert() sql/unireg.h: Added MAX_ALIAS_NAME strings/ctype-ujis.c: Fixed bug in converting to ujis --- sql/log_event.cc | 60 ++++++++++++++++++++++++++++---------------------------- 1 file changed, 30 insertions(+), 30 deletions(-) (limited to 'sql/log_event.cc') diff --git a/sql/log_event.cc b/sql/log_event.cc index be5b5079eee..900d0a482aa 100644 --- a/sql/log_event.cc +++ b/sql/log_event.cc @@ -195,9 +195,9 @@ static inline int read_str(char * &buf, char *buf_end, char * &str, } -/**************************************************************************/ +/************************************************************************** Log_event methods -***************************************************************************/ +**************************************************************************/ /* Log_event::get_type_str() @@ -715,9 +715,9 @@ void Log_event::set_log_pos(MYSQL_LOG* log) #endif // !MYSQL_CLIENT -/**************************************************************************/ +/************************************************************************** Query_log_event methods -***************************************************************************/ +**************************************************************************/ #if defined(HAVE_REPLICATION) && !defined(MYSQL_CLIENT) @@ -982,9 +982,9 @@ int Query_log_event::exec_event(struct st_relay_log_info* rli) #endif -/**************************************************************************/ +/************************************************************************** Start_log_event methods -***************************************************************************/ +**************************************************************************/ /* Start_log_event::pack_info() @@ -1093,9 +1093,9 @@ int Start_log_event::exec_event(struct st_relay_log_info* rli) } #endif /* defined(HAVE_REPLICATION) && !defined(MYSQL_CLIENT) */ -/**************************************************************************/ +/************************************************************************** Load_log_event methods -***************************************************************************/ +**************************************************************************/ /* Load_log_event::pack_info() @@ -1651,9 +1651,9 @@ int Load_log_event::exec_event(NET* net, struct st_relay_log_info* rli, #endif -/****************************************************************************/ +/************************************************************************** Rotate_log_event methods -*****************************************************************************/ +**************************************************************************/ /* Rotate_log_event::pack_info() @@ -1788,9 +1788,9 @@ int Rotate_log_event::exec_event(struct st_relay_log_info* rli) #endif -/***************************************************************************/ +/************************************************************************** Intvar_log_event methods -****************************************************************************/ +**************************************************************************/ /* Intvar_log_event::pack_info() @@ -1902,9 +1902,9 @@ int Intvar_log_event::exec_event(struct st_relay_log_info* rli) #endif -/**************************************************************************** +/************************************************************************** Rand_log_event methods -****************************************************************************/ +**************************************************************************/ #if defined(HAVE_REPLICATION) && !defined(MYSQL_CLIENT) void Rand_log_event::pack_info(Protocol *protocol) @@ -1964,9 +1964,9 @@ int Rand_log_event::exec_event(struct st_relay_log_info* rli) #endif // !MYSQL_CLIENT -/*************************************************************************** +/************************************************************************** User_var_log_event methods -***************************************************************************/ +**************************************************************************/ #if defined(HAVE_REPLICATION) && !defined(MYSQL_CLIENT) void User_var_log_event::pack_info(Protocol* protocol) @@ -2195,9 +2195,9 @@ int User_var_log_event::exec_event(struct st_relay_log_info* rli) #endif // !MYSQL_CLIENT -/**************************************************************************** +/************************************************************************** Slave_log_event methods -****************************************************************************/ +**************************************************************************/ #ifdef HAVE_REPLICATION #ifdef MYSQL_CLIENT @@ -2342,9 +2342,9 @@ int Slave_log_event::exec_event(struct st_relay_log_info* rli) #endif // !MYSQL_CLIENT -/***************************************************************************/ +/************************************************************************** Stop_log_event methods -****************************************************************************/ +**************************************************************************/ /* Stop_log_event::print() @@ -2403,9 +2403,9 @@ int Stop_log_event::exec_event(struct st_relay_log_info* rli) #endif /* HAVE_REPLICATION */ -/***************************************************************************/ +/************************************************************************** Create_file_log_event methods -****************************************************************************/ +**************************************************************************/ /* Create_file_log_event ctor @@ -2622,9 +2622,9 @@ err: #endif -/***************************************************************************/ +/************************************************************************** Append_block_log_event methods -****************************************************************************/ +**************************************************************************/ /* Append_block_log_event ctor @@ -2739,9 +2739,9 @@ err: #endif -/***************************************************************************/ +/************************************************************************** Delete_file_log_event methods -****************************************************************************/ +**************************************************************************/ /* Delete_file_log_event ctor @@ -2829,9 +2829,9 @@ int Delete_file_log_event::exec_event(struct st_relay_log_info* rli) #endif -/**************************************************************************/ +/************************************************************************** Execute_load_log_event methods -***************************************************************************/ +**************************************************************************/ /* Execute_load_log_event ctor @@ -2971,9 +2971,9 @@ err: #endif /* defined(HAVE_REPLICATION) && !defined(MYSQL_CLIENT) */ -/**************************************************************************/ +/************************************************************************** sql_ex_info methods -***************************************************************************/ +**************************************************************************/ /* sql_ex_info::write_data() -- cgit v1.2.1