[debian-mysql] Bug#444102: mysql-server-5.0: bad argument handling in mysqld_safe:parse_arguments()
Vincent McIntyre
Vince.McIntyre at atnf.csiro.au
Wed Sep 26 05:15:05 UTC 2007
Package: mysql-server-5.0
Version: 5.0.32-7etch1
Severity: normal
Tags: patch
*** Please type your report below this line ***
Hi,
Background
----------
I had reason to want to move the location of the binary logs and I
think this may have uncovered a small bug.
I was able to move the datadir, using /etc/mysql/my.cnf; everything
worked fine with that configuration.
Then I went on to move the binary logs.
The relevant defaults in /etc/mysql/my.cnf are
log_bin = /var/log/mysql/mysql-bin.log
expire_logs_days = 10
I stopped mysql with
# /etc/init.d/mysql stop
and changed the log_bin prefix to
log_bin = /srv/mysql/log/mysql-bin
Then I rsynced the binlogs to that location
# rsync -a /var/log/mysql/mysql-bin.* /srv/mysql/log/mysql-bin
I added a symbolic link at the locaton of the old binary log directory
# cd /var/log; mv mysql mysql.d ; ln -s /srv/mysql/log ./msyql
# /etc/init.d/mysql start
and tried to start mysql
# /etc/init.d/mysql start
It started fine.
Then I removed the symlink. It should not be needed (right?) since
I've specified the log_bin location in the my.cnf.
# /etc/init.d/mysql stop
# rm /var/log/mysql
# /etc/init.d/mysql start
It would not start.
Analysis
--------
I traced the problem to the call
/usr/bin/mysqld_safe
in /etc/init.d/mysql, and in particular the parse_arguments() function
in mysqld_safe.
What is happening on my system is that mysqld_safe makes this call:
parse_arguments `/usr/bin/my_print_defaults $defaults --loose-verbose mysqld server`
and then starts using that output to set up the invocation line for mysqld.
It tries to start mysqld, and does a 'mysqladmin ping' to confirm the db is
really going.
In my case, it fails to start the database because the call to mysqld is
lacking the --log_bin argument, and others.
Digging a bit further, I found that the parse_arguments function is dropping
the arguments it does not recognize, instead of passing them through to
mysqld. It is doing this because it tests whether or not to accumulate
unrecognized options with
test -n "$pick=args"
For some reason, this test is failing and all the arguments that
parse_arguments does not explicitly recognize are being silently dropped.
I've attached a patch to that does the same test in a more robust way.
With this change, mysqld starts up correctly. Please consider applying
this patch.
Also attached are a couple of output files showing the execution trace
before and after the change. You can see before the change that there
are 21 arguments output by my_print_defaults but only 6 are handled.
As an aside, the for loop in the function appears to be a bashist
construct:
for arg do
case "$arg" in
...
esac
done
I'm not sure if it can be changed without losing the ability to process
more than 10 arguments (in my case the arg list is 21 items).
Cheers
Vince
-- System Information:
Debian Release: 4.0
APT prefers stable
APT policy: (500, 'stable')
Architecture: i386 (i686)
Shell: /bin/sh linked to /bin/bash
Kernel: Linux 2.6.18-5-686
Locale: LANG=en_AU.UTF-8, LC_CTYPE=en_AU.UTF-8 (charmap=UTF-8)
Versions of packages mysql-server-5.0 depends on:
ii adduser 3.102 Add and remove users and groups
ii debconf [debconf-2.0] 1.5.11 Debian configuration management sy
ii libc6 2.3.6.ds1-13etch2 GNU C Library: Shared libraries
ii libdbi-perl 1.53-1 Perl5 database interface by Tim Bu
ii libgcc1 1:4.1.1-21 GCC support library
ii libmysqlclient15off 5.0.32-7etch1 mysql database client library
ii libncurses5 5.5-5 Shared libraries for terminal hand
ii libreadline5 5.2-2 GNU readline and history libraries
ii libstdc++6 4.1.1-21 The GNU Standard C++ Library v3
ii libwrap0 7.6.dbs-13 Wietse Venema's TCP wrappers libra
ii lsb-base 3.1-23.2etch1 Linux Standard Base 3.1 init scrip
ii mysql-client-5.0 5.0.32-7etch1 mysql database client binaries
ii mysql-common 5.0.32-7etch1 mysql database common files (e.g.
ii passwd 1:4.0.18.1-7 change and administer password and
ii perl 5.8.8-7 Larry Wall's Practical Extraction
ii psmisc 22.3-1 Utilities that use the proc filesy
ii zlib1g 1:1.2.3-13 compression library - runtime
Versions of packages mysql-server-5.0 recommends:
ii mailx 1:8.1.2-0.20050715cvs-1 A simple mail user agent
-- debconf information:
mysql-server/root_password: (password omitted)
mysql-server-5.0/really_downgrade: false
mysql-server-5.0/need_sarge_compat: false
mysql-server-5.0/start_on_boot: true
mysql-server/error_setting_password:
* mysql-server-5.0/nis_warning:
mysql-server-5.0/postrm_remove_databases: false
mysql-server-5.0/need_sarge_compat_done: true
-------------- next part --------------
A non-text attachment was scrubbed...
Name: log.after.gz
Type: application/octet-stream
Size: 6376 bytes
Desc:
Url : http://lists.alioth.debian.org/pipermail/pkg-mysql-maint/attachments/20070926/aa4d05d6/attachment-0002.obj
-------------- next part --------------
A non-text attachment was scrubbed...
Name: log.before.gz
Type: application/octet-stream
Size: 6226 bytes
Desc:
Url : http://lists.alioth.debian.org/pipermail/pkg-mysql-maint/attachments/20070926/aa4d05d6/attachment-0003.obj
-------------- next part --------------
A non-text attachment was scrubbed...
Name: mysqld_safe.patch
Type: text/x-diff
Size: 727 bytes
Desc:
Url : http://lists.alioth.debian.org/pipermail/pkg-mysql-maint/attachments/20070926/aa4d05d6/attachment-0001.patch
More information about the pkg-mysql-maint
mailing list