On Mon, 06 Feb 2012 07:03:19 -0500 Tanstaafl <tansta...@libertytrek.org> wrote:
> On 2012-02-05 3:06 PM, Alan McKinnon <alan.mckin...@gmail.com> wrote: > > In your shoes what I would be doing now is backup your entire mysql > > install (everything listed in "equery files mysql"), delete the > > package (emerge -C) and remerge mysql. > > > > Then check if starting and stopping works correctly. I suspect > > you'll find it will. Now you just need to diff these new files with > > your backups and find differences. > > > > Yes, this is sort of the long way round but you're not having much > > luck asking "anyone seen this before?", so now it's time to bring > > out the big guns > > Well, I'd much prefer some more basic troubleshooting first... > > I've asked for some kind soul/souls to share their init scripts so I > can compare - but I guess I couldg go first... here is the contents > of /etc/init.d/mysql: > > #!/sbin/runscript > # Copyright 1999-2011 Gentoo Foundation > # Distributed under the terms of the GNU General Public License v2 > # $Header: > /var/cvsroot/gentoo-x86/dev-db/mysql-init-scripts/files/mysql-5.1.53-init.d,v > 1.1 2011/01/13 20:06:06 robbat2 Exp $ > > depend() { > use net.lo > # localmount needed for $basedir > need localmount > } > > get_config() { > my_print_defaults --config-file="$1" mysqld | > sed -n -e "s/^--$2=//p" > } > > mysql_svcname() { > local ebextra= > case "${SVCNAME}" in > mysql*) ;; > *) ebextra=" (mysql)" ;; > esac > echo "${SVCNAME}${ebextra}" > } > > start() { > # Check for old conf.d variables that mean migration was not > yet done. > local varlist="${!mysql_slot_*} ${!MYSQL_BLOG_PID_FILE*} > ${!STOPTIMEOUT*}" > varlist="${varlist// /}" > # Yes, MYSQL_INIT_I_KNOW_WHAT_I_AM_DOING is a hidden > variable. # It does have a use in testing, as it is possible to build > a config file > # that works with both the old and new init scripts > simulateously. if [ -n "${varlist}" -a -z > "${MYSQL_INIT_I_KNOW_WHAT_I_AM_DOING}" ]; then > eerror "You have not updated your conf.d for the new > mysql-init-scripts-2 revamp." > eerror "Not proceeding because it may be dangerous." > return 1 > fi > > # Now we can startup > ebegin "Starting $(mysql_svcname)" > > MY_CNF="${MY_CNF:-/etc/${SVCNAME}/my.cnf}" > > if [ ! -r "${MY_CNF}" ] ; then > eerror "Cannot read the configuration file > \`${MY_CNF}'" return 1 > fi > > # tail -n1 is critical as these we only want the last > instance of the option > local basedir=$(get_config "${MY_CNF}" basedir | tail -n1) > local datadir=$(get_config "${MY_CNF}" datadir | tail -n1) > local pidfile=$(get_config "${MY_CNF}" pid-file | tail -n1) > local socket=$(get_config "${MY_CNF}" socket | tail -n1) > > if [ ! -d "${datadir}" ] ; then > eerror "MySQL datadir \`${datadir}' is empty or > invalid" eerror "Please check your config file \`${MY_CNF}'" > return 1 > fi > > if [ ! -d "${datadir}"/mysql ] ; then > eerror "You don't appear to have the mysql database > installed yet." > eerror "Please run /usr/bin/mysql_install_db to have > this done..." > return 1 > fi > > local piddir="${pidfile%/*}" > if [ ! -d "$piddir" ] ; then > mkdir "$piddir" && \ > chown mysql "$piddir" > rc=$? > if [ $rc -ne 0 ]; then > eerror "Directory $piddir for pidfile does > not exist and cannot be created" > return 1 > fi > fi > > local startup_timeout=${STARTUP_TIMEOUT:-900} > local startup_early_timeout=${STARTUP_EARLY_TIMEOUT:-1000} > local tmpnice="${NICE:+"--nicelevel "}${NICE}" > local tmpionice="${IONICE:+"--ionice "}${IONICE}" > start-stop-daemon \ > ${DEBUG/*/"--verbose"} \ > --start \ > --exec "${basedir}"/sbin/mysqld \ > --pidfile "${pidfile}" \ > --background \ > --wait ${startup_early_timeout} \ > ${tmpnice} \ > ${tmpionice} \ > -- --defaults-file="${MY_CNF}" ${MY_ARGS} > local ret=$? > if [ ${ret} -ne 0 ] ; then > eend ${ret} > return ${ret} > fi > > ewaitfile ${startup_timeout} "${socket}" > eend $? || return 1 > > save_options pidfile "${pidfile}" > save_options basedir "${basedir}" > } > > stop() { > ebegin "Stopping $(mysql_svcname)" > > local pidfile="$(get_options pidfile)" > local basedir="$(get_options basedir)" > local stop_timeout=${STOP_TIMEOUT:-120} > > start-stop-daemon \ > ${DEBUG/*/"--verbose"} \ > --stop \ > --exec "${basedir}"/sbin/mysqld \ > FWIW, here's mine (spaced between lines of "====" to be easy to find). Both are largely unchanged from default: ======= /etc/conf.d/mysql: # Copyright 1999-2011 Gentoo Foundation # Distributed under the terms of the GNU General Public License v2 # $Header: /var/cvsroot/gentoo-x86/dev-db/mysql-init-scripts/files/mysql-5.1.53-conf.d,v 1.2 2011/01/15 17:54:31 robbat2 Exp $ # If you want a non-stock location for the config file, uncomment or update # either of these as needed. If you do use it, you must make sure that none of # your socket, pidfile, datadir, logfiles, binary logs, relay logs or InnoDB # files collide with each other. MY_CNF="/etc/mysql/my.cnf" #MY_CNF="${MY_CNF:-/etc/${SVCNAME}/my.cnf}" #MY_CNF="${MY_CNF:-/etc/mysql/my-${SVCNAME/mysql.}.cnf}" # Place any additional arguments here that you might need # Common/useful options: # --skip-slave-start=1 - For bringing up replication initially # --server-id=NNN - Server ID for replication # --skip-networking - lock it down to UNIX sockets only MY_ARGS="" # This setting (in seconds) should be high enough to allow InnoDB to do a full # checkpoint recovery. 900 is the default used in the upstream RPM startup # scripts. 30 seconds should be sufficent if you just have a tiny <1GiB # database. After the core startup is done, we wait this long for the UNIX # socket to appear. STARTUP_TIMEOUT="900" # This is how long, in milliseconds, we wait for pidfile to be created, early # in the startup. STARTUP_EARLY_TIMEOUT="1000" # How long (in seconds) should we wait for shutdown? STOP_TIMEOUT=120 # integer [-20 .. 19 ] default 0 # change the priority of the server -20 (high) to 19 (low) # see nice(1) for description #NICE=0 # See start-stop-daemon(8) for possible settings #IONICE=2 # If defined, --verbose gets passed to S-S-D #DEBUG=1 # Depending on your usage of MySQL, you may also wish to start it after some # other services are up. Uncomment the lines below as needed. If these aren't # enough for you, we encourage you to file a bug, and help us understand how # you are using MySQL. # Do your MySQL ACLs refer to hostnames not in your /etc/hosts? # If so, you need DNS before you can accept connections. # Avoid dependency circular loops if you use MySQL to power a local DNS server. #rc_use="dns" #rc_after="dns" # Does your MySQL bind to an IP on an interface other than net.lo? # Alternatively you might wish to specify the exact interface here. #rc_use="net" #rc_after="net" # Do you store your MySQL files on a SAN or other network filesystem, that is # provided by the netmount init script? #rc_need="netmount" # Or from NFS? P.S. This is not a good idea in most cases, but does have some # valid usage cases, so we provide the option. #rc_need="nfsmount" # Should any one of the instances satisfy the requirement for MySQL coming up? # By default, we say no. [ "${SVCNAME}" != mysql ] && rc_provide="!mysql" # But uncomment this next instead if you think it should. #rc_provide="mysql" # The conditional above has a false-positive "failure" return value as a # side-effect, and since it's the last statement, without the next line, this # script returns failure. return 0 # vim: ft=gentoo-conf-d et ts=4 sw=4: ======= ======= /etc/init.smysql: #!/sbin/runscript # Copyright 1999-2011 Gentoo Foundation # Distributed under the terms of the GNU General Public License v2 # $Header: /var/cvsroot/gentoo-x86/dev-db/mysql-init-scripts/files/mysql-5.1.53-init.d,v 1.1 2011/01/13 20:06:06 robbat2 Exp $ depend() { use net.lo # localmount needed for $basedir need localmount } get_config() { my_print_defaults --config-file="$1" mysqld | sed -n -e "s/^--$2=//p" } mysql_svcname() { local ebextra= case "${SVCNAME}" in mysql*) ;; *) ebextra=" (mysql)" ;; esac echo "${SVCNAME}${ebextra}" } start() { # Check for old conf.d variables that mean migration was not yet done. local varlist="${!mysql_slot_*} ${!MYSQL_BLOG_PID_FILE*} ${!STOPTIMEOUT*}" varlist="${varlist// /}" # Yes, MYSQL_INIT_I_KNOW_WHAT_I_AM_DOING is a hidden variable. # It does have a use in testing, as it is possible to build a config file # that works with both the old and new init scripts simulateously. if [ -n "${varlist}" -a -z "${MYSQL_INIT_I_KNOW_WHAT_I_AM_DOING}" ]; then eerror "You have not updated your conf.d for the new mysql-init-scripts-2 revamp." eerror "Not proceeding because it may be dangerous." return 1 fi # Now we can startup ebegin "Starting $(mysql_svcname)" MY_CNF="${MY_CNF:-/etc/${SVCNAME}/my.cnf}" if [ ! -r "${MY_CNF}" ] ; then eerror "Cannot read the configuration file \`${MY_CNF}'" return 1 fi # tail -n1 is critical as these we only want the last instance of the option local basedir=$(get_config "${MY_CNF}" basedir | tail -n1) local datadir=$(get_config "${MY_CNF}" datadir | tail -n1) local pidfile=$(get_config "${MY_CNF}" pid-file | tail -n1) local socket=$(get_config "${MY_CNF}" socket | tail -n1) if [ ! -d "${datadir}" ] ; then eerror "MySQL datadir \`${datadir}' is empty or invalid" eerror "Please check your config file \`${MY_CNF}'" return 1 fi if [ ! -d "${datadir}"/mysql ] ; then eerror "You don't appear to have the mysql database installed yet." eerror "Please run /usr/bin/mysql_install_db to have this done..." return 1 fi local piddir="${pidfile%/*}" if [ ! -d "$piddir" ] ; then mkdir "$piddir" && \ chown mysql "$piddir" rc=$? if [ $rc -ne 0 ]; then eerror "Directory $piddir for pidfile does not exist and cannot be created" return 1 fi fi local startup_timeout=${STARTUP_TIMEOUT:-900} local startup_early_timeout=${STARTUP_EARLY_TIMEOUT:-1000} local tmpnice="${NICE:+"--nicelevel "}${NICE}" local tmpionice="${IONICE:+"--ionice "}${IONICE}" start-stop-daemon \ ${DEBUG/*/"--verbose"} \ --start \ --exec "${basedir}"/sbin/mysqld \ --pidfile "${pidfile}" \ --background \ --wait ${startup_early_timeout} \ ${tmpnice} \ ${tmpionice} \ -- --defaults-file="${MY_CNF}" ${MY_ARGS} local ret=$? if [ ${ret} -ne 0 ] ; then eend ${ret} return ${ret} fi ewaitfile ${startup_timeout} "${socket}" eend $? || return 1 save_options pidfile "${pidfile}" save_options basedir "${basedir}" } stop() { ebegin "Stopping $(mysql_svcname)" local pidfile="$(get_options pidfile)" local basedir="$(get_options basedir)" local stop_timeout=${STOP_TIMEOUT:-120} start-stop-daemon \ ${DEBUG/*/"--verbose"} \ --stop \ --exec "${basedir}"/sbin/mysqld \ --pidfile "${pidfile}" \ --retry ${stop_timeout} eend $? } # vim: filetype=gentoo-init-d sw=2 ts=2 sts=2 noet: ======= -- Alan McKinnnon alan.mckin...@gmail.com