Bug #28597 Replication doesn't start after upgrading to 5.1.18

Since bug@20166, which replaced the binlog file name generating to base
on pidfile_name instead of the previous glob_hostname, the binlog file
name suddenly started to be stored solely in the absolute path format,
including a case when --log-bin option meant a relative path.
What's more serious, the path for binlog file can lead unrequestedly 
to pid-file directory so that after any proper fix for this bug
there might be similar to the bug report consequences for one who
upgrades from post-fix-bug@20166-pre-fix-bug@28597 to post-fix-bug@28597.

Fixed with preserving`pidfile_name' (intr.by bug@20166) but stripping
off its directory part. This restores the original logics of storing
the names in compatible with --log-bin option format and with the
requirement for --log-bin ralative path to corresond to the data directory.
Side effects for this fix:

effective fixing bug@27070, refining its test;
ensuring no overrun for buff can happen anymore (Bug#31836 
insufficient space reserved for the suffix of relay log file name);
bug#31837  --remove_file $MYSQLTEST_VARDIR/tmp/bug14157.sql missed
in rpl_temporary.test;
fixes Bug@28603  Invalid log-bin default location;
parent 35b20797
...@@ -106,9 +106,3 @@ connection slave; ...@@ -106,9 +106,3 @@ connection slave;
sync_with_master; sync_with_master;
# End of 4.1 tests # End of 4.1 tests
# Cleanup
# The A->B->A replication causes the master to start writing relay logs
# in var/run, remove them
remove_file $MYSQLTEST_VARDIR/run/master-relay-bin.000001;
remove_file $MYSQLTEST_VARDIR/run/master-relay-bin.index;
...@@ -211,6 +211,8 @@ select * from t1; ...@@ -211,6 +211,8 @@ select * from t1;
connection master; connection master;
drop table t1; drop table t1;
--remove_file $MYSQLTEST_VARDIR/tmp/bug14157.sql
# Delete the anonymous users # Delete the anonymous users
source include/delete_anonymous_users.inc; source include/delete_anonymous_users.inc;
......
...@@ -448,13 +448,10 @@ const char *MYSQL_LOG::generate_name(const char *log_name, ...@@ -448,13 +448,10 @@ const char *MYSQL_LOG::generate_name(const char *log_name,
{ {
if (!log_name || !log_name[0]) if (!log_name || !log_name[0])
{ {
/* strmake(buff, pidfile_name, FN_REFLEN - strlen(suffix) - 1);
TODO: The following should be using fn_format(); We just need to return (const char *)
first change fn_format() to cut the file name if it's too long. fn_format(buff, buff, "", suffix, MYF(MY_REPLACE_EXT|MY_REPLACE_DIR));
*/
strmake(buff, pidfile_name,FN_REFLEN-5);
strmov(fn_ext(buff),suffix);
return (const char *)buff;
} }
// get rid of extension if the log is binary to avoid problems // get rid of extension if the log is binary to avoid problems
if (strip_ext) if (strip_ext)
......
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