Home > MySQL > MySQL Start Script

MySQL Start Script

February 15, 2006 Posted by KP

I installed mysql-server-4.0.21 when I got the server more than one year ago. Although MySQL 4.0 (4.0.26 as for now) only released small patches thereafter, the start script for FreeBSD has made significant changes:

1. Must enable MySQL in /etc/rc.conf.
The following line must be present in /etc/rc.conf:
mysql_enable=”YES”

Without this line, “/usr/local/etc/rc.d/mysql-server.sh start” will quit without any errors or warnings. It took me a few hours to figure this out…a simple reminding message would be very helpful.

For a complete list of parameters which can be specified in rc.conf, please refer to mysql-server.sh (appended below).

2. MySQL runs as mysql user instead of root.
Great change.

3. my.cnf is moved from /etc/ to /usr/local/etc/.
Good change. This can avoid confusions since /etc/my.cnf is Linux style.

=======================================
Content of /usr/local/etc/rc.d/mysql-server.sh

—————————
4.0.26 (The latest version)
—————————
#!/bin/sh
#
# $FreeBSD: ports/databases/mysql40-server/files/mysql-server.sh.in,v 1.2 2005/04/11 09:33:11 ale Exp $
#

# PROVIDE: mysql
# REQUIRE: NETWORKING SERVERS
# BEFORE: DAEMON
# KEYWORD: shutdown

#
# Add the following line to /etc/rc.conf to enable mysql:
# mysql_enable (bool): Set to “NO” by default.
# Set it to “YES” to enable MySQL.
# mysql_limits (bool): Set to “NO” by default.
# Set it to yes to run `limits -e -U mysql`
# just before mysql starts.
# mysql_dbdir (str): Default to “/var/db/mysql”
# Base database directory.
# mysql_args (str): Custom additional arguments to be passed
# to mysqld_safe (default empty).
#

. /etc/rc.subr

name=”mysql”
rcvar=`set_rcvar`

load_rc_config $name

: ${mysql_enable=”NO”}
: ${mysql_limits=”NO”}
: ${mysql_dbdir=”/var/db/mysql”}
: ${mysql_args=”"}

mysql_user=”mysql”
mysql_limits_args=”-e -U ${mysql_user}”
pidfile=”${mysql_dbdir}/`/bin/hostname`.pid”
command=”/usr/local/bin/mysqld_safe”
command_args=”–defaults-extra-file=${mysql_dbdir}/my.cnf –user=${mysql_user} –datadir=${mysql_dbdir} –pid-file=${pidfile} ${mysql_args} > /dev/null &”
procname=”/usr/local/libexec/mysqld”
start_precmd=”${name}_prestart”
mysql_install_db=”/usr/local/bin/mysql_install_db”
mysql_install_db_args=”–ldata=${mysql_dbdir}”

mysql_create_auth_tables()
{
eval $mysql_install_db $mysql_install_db_args >/dev/null 2>&1
[ $? -eq 0 ] && chown -R ${mysql_user}:${mysql_user} ${mysql_dbdir}
}

mysql_prestart()
{
if [ ! -d "${mysql_dbdir}/mysql/." ]; then
mysql_create_auth_tables || return 1
fi
if checkyesno mysql_limits; then
eval `/usr/bin/limits ${mysql_limits_args}` 2>/dev/null
else
return 0
fi
}

run_rc_command “$1″

———————————–
4.0.21, doesn’t care about rc.conf
———————————–

#!/bin/sh

DB_DIR=/var/db/mysql
PIDFILE=${DB_DIR}/`/bin/hostname -s`.pid

case “$1″ in
start)
if [ -x /usr/local/bin/mysqld_safe ]; then
/usr/bin/limits -U mysql \
/usr/local/bin/mysqld_safe –user=mysql –datadir=${DB_DIR} –pid-file=${PIDFILE} > /dev/null &
echo -n ‘ mysqld’
fi
;;
stop)
if [ -f ${PIDFILE} ]; then
/bin/kill `cat ${PIDFILE}` > /dev/null 2>&1 && echo -n ‘ mysqld’
else
echo “mysql-server isn’t running”
fi
;;
*)
echo “”
echo “Usage: `basename $0` { start | stop }”
echo “”
exit 64
;;
esac

Bookmark and Share


Related Posts:

Filed Under: MySQL

Leave a Comment









*
To prove you're a person (not a spam script), type the security word shown in the picture. Click on the picture to hear an audio file of the word.
Click to hear an audio file of the anti-spam word




Categories

Archives

Links

  • Dedicated Servers
  • Meta