Commit 4684caac authored by unknown's avatar unknown

BUG#48216 Replication fails on all slaves after upgrade to 5.0.86 on master

When a sessione is closed, all temporary tables of the session are automatically 
dropped and are binlogged. But it will be binlogged with wrong database names when
the length of the temporary tables' database names are greater than the 
length of the current database name or the current database is not set.

Query_log_event's db_len is forgot to set when Query_log_event's db is set.
This patch wrote code to set db_len immediately after db has set.

parent de172cea
...@@ -8,6 +8,7 @@ create temporary table shortn2 (a int); ...@@ -8,6 +8,7 @@ create temporary table shortn2 (a int);
select get_lock("a",10); select get_lock("a",10);
get_lock("a",10) get_lock("a",10)
1 1
USE test;
select get_lock("a",10); select get_lock("a",10);
get_lock("a",10) get_lock("a",10)
1 1
......
...@@ -14,6 +14,17 @@ create temporary table shortn1 (a int); ...@@ -14,6 +14,17 @@ create temporary table shortn1 (a int);
create temporary table `table:name` (a int); create temporary table `table:name` (a int);
create temporary table shortn2 (a int); create temporary table shortn2 (a int);
select get_lock("a",10); select get_lock("a",10);
#
# BUG48216 Replication fails on all slaves after upgrade to 5.0.86 on master
#
# When the session is closed, any temporary tables of the session are dropped
# and are binlogged. But it will be binlogged with a wrong database name when
# the length of the database name('drop-temp-table-test') is greater than the
# current database name('test').
#
USE test;
disconnect con1; disconnect con1;
connection con2; connection con2;
......
...@@ -798,6 +798,7 @@ void close_temporary_tables(THD *thd) ...@@ -798,6 +798,7 @@ void close_temporary_tables(THD *thd)
s_query.length() - 1 /* to remove trailing ',' */, s_query.length() - 1 /* to remove trailing ',' */,
0, FALSE, THD::NOT_KILLED); 0, FALSE, THD::NOT_KILLED);
qinfo.db= db.ptr(); qinfo.db= db.ptr();
qinfo.db_len= db.length();
thd->variables.character_set_client= cs_save; thd->variables.character_set_client= cs_save;
DBUG_ASSERT(qinfo.error_code == 0); DBUG_ASSERT(qinfo.error_code == 0);
mysql_bin_log.write(&qinfo); mysql_bin_log.write(&qinfo);
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment