Login
[x]
Log in using an account from:
Fedora Account System
Red Hat Associate
Red Hat Customer
Or login using a Red Hat Bugzilla account
Forgot Password
Login:
Hide Forgot
Create an Account
Red Hat Bugzilla – Attachment 150835 Details for
Bug 233771
RFE+patch: MySQLd "init.d" startup script should rely on "/usr/bin/my_print_defaults" to get at options
[?]
New
Simple Search
Advanced Search
My Links
Browse
Requests
Reports
Current State
Search
Tabular reports
Graphical reports
Duplicates
Other Reports
User Changes
Plotly Reports
Bug Status
Bug Severity
Non-Defaults
|
Product Dashboard
Help
Page Help!
Bug Writing Guidelines
What's new
Browser Support Policy
5.0.4.rh83 Release notes
FAQ
Guides index
User guide
Web Services
Contact
Legal
This site requires JavaScript to be enabled to function correctly, please enable it.
The new init script and a diff relative to the old one
init_script_mysqld.txt (text/plain), 10.75 KB, created by
David Tonhofer
on 2007-03-24 20:59:16 UTC
(
hide
)
Description:
The new init script and a diff relative to the old one
Filename:
MIME Type:
Creator:
David Tonhofer
Created:
2007-03-24 20:59:16 UTC
Size:
10.75 KB
patch
obsolete
>#!/bin/bash ># ># mysqld This shell script takes care of starting and stopping ># the MySQL subsystem (mysqld). ># ># chkconfig: - 64 36 ># description: MySQL database server. ># processname: mysqld ># config: /etc/my.cnf ># pidfile: /var/run/mysqld/mysqld.pid > ># Source function library. >. /etc/rc.d/init.d/functions > ># Source networking configuration. >. /etc/sysconfig/network > >prog="MySQL" > ># Below we use "my_print_defaults" to look for values in a compiled-in ># set of configuration files: First "/etc/my.cnf", overridden by ># "/var/lib/mysql/my.cnf", overriden by "$HOME/.my.cnf". ># Only values that are found in the section "mysqld_safe" are considered. ># Note that the output of 'my_print_defaults' will contain the overridden ># and overriding options, so the sed command has to look for the last ># entry. So we use tac to reverse the output first. > ># Obtain the directory in which server-specific "my.cnf" config file, the ># Unix domain socket and the databases (in particular, the database called ># "mysql") reside. Preferentially use the values of section "[mysql.server]" ># instead of section "[mysqld_safe]" or the old-sytle "[mysqld]". ># "my_print_defaults" should be extended to read several sections, really. > >datadir=`/usr/bin/my_print_defaults mysql.server | tac | sed '/^--datadir=*/!d; s///;q'` >if [ -z $datadir ]; then > datadir="/var/lib/mysql" >fi >echo "datadir is : $datadir" > ># Obtain the file that collects stdout/stderr of the MySQL server. We collect ># from section "[mysqld_safe]". > >errlogfile=`/usr/bin/my_print_defaults mysqld_safe | tac | sed '/^--err-log=*/!d; s///;q'` >if [ -z $errlogfile ]; then > errlogfile="/var/log/mysqld.log" >fi >echo "errlogfile is: $errlogfile" > ># Obtain the socket through which a client may connect. By default, the ># socket is found in $datadir. The socket option may not only appear in "my.cnf"'s ># "[mysqld_safe]" section but also in the "[mysqld]" and "[client]" section. Oh my! > >socketfile=`/usr/bin/my_print_defaults mysqld_safe | tac | sed '/^--socket=*/!d; s///;q'` >if [ -z $socketfile ]; then > socketfile="$datadir/mysql.sock" >fi >echo "socketfile is: $socketfile" > ># Obtain the PID file. This must be set as by default mysqld_safe does not ># write any. Thuse the pid-file option is explicitly passed to mysqld_safe ># again below to make sure. > >mypidfile=`/usr/bin/my_print_defaults mysqld_safe | tac | sed '/^--pid-file=*/!d; s///;q'` >if [ -z $mypidfile ]; then > mypidfile="/var/run/mysqld/mysqld.pid" >fi >echo "mypidfile is : $mypidfile" > >start(){ > touch "$errlogfile" > chown mysql:mysql "$errlogfile" > chmod 0640 "$errlogfile" > [ -x /sbin/restorecon ] && /sbin/restorecon "$errlogfile" > if [ ! -d "$datadir/mysql" ] ; then > action $"Initializing MySQL database: " /usr/bin/mysql_install_db > ret=$? > chown -R mysql:mysql "$datadir" > if [ $ret -ne 0 ] ; then > return $ret > fi > fi > chown -R mysql:mysql "$datadir" > chmod 0755 "$datadir" > # The reason for explicitly specifying --pid-file is that there may > # be no such entry in my.cnf, and the default behavior will be to not > # create it at all... > # Also pass the options defined above for some stability even though in > # most cases "mysqld_safe" (which itself calls "my_print_defaults") would > # come to the same conclusion as to the actual values to use. > /usr/bin/mysqld_safe --defaults-file="/etc/my.cnf" \ > --pid-file="$mypidfile" \ > --datadir="$datadir" \ > --log-error=$errlogfile \ > --socket=$socketfile >/dev/null 2>&1 & > ret=$? > # Spin for a maximum of N seconds waiting for the server to come up. > # Rather than assuming we know a valid username, accept an "access > # denied" response as meaning the server is functioning. > if [ $ret -eq 0 ]; then > STARTTIMEOUT=30 > while [ $STARTTIMEOUT -gt 0 ]; do > RESPONSE=`/usr/bin/mysqladmin -uUNKNOWN_MYSQL_USER ping 2>&1` && break > echo "$RESPONSE" | grep -q "Access denied for user" && break > sleep 1 > let STARTTIMEOUT=${STARTTIMEOUT}-1 > done > if [ $STARTTIMEOUT -eq 0 ]; then > echo "Timeout error occurred trying to start MySQL Daemon." > action $"Starting $prog: " /bin/false > else > action $"Starting $prog: " /bin/true > fi > else > action $"Starting $prog: " /bin/false > fi > [ $ret -eq 0 ] && touch /var/lock/subsys/mysqld > return $ret >} > >stop(){ > MYSQLPID=`cat "$mypidfile" 2>/dev/null ` > if [ -n "$MYSQLPID" ]; then > /bin/kill "$MYSQLPID" >/dev/null 2>&1 > ret=$? > if [ $ret -eq 0 ]; then > STOPTIMEOUT=60 > while [ $STOPTIMEOUT -gt 0 ]; do > /bin/kill -0 "$MYSQLPID" >/dev/null 2>&1 || break > sleep 1 > let STOPTIMEOUT=${STOPTIMEOUT}-1 > done > if [ $STOPTIMEOUT -eq 0 ]; then > echo "Timeout error occurred trying to stop MySQL Daemon." > ret=1 > action $"Stopping $prog: " /bin/false > else > rm -f /var/lock/subsys/mysqld > rm -f "$socketfile" > action $"Stopping $prog: " /bin/true > fi > else > action $"Stopping $prog: " /bin/false > fi > else > ret=1 > action $"Stopping $prog: " /bin/false > fi > return $ret >} > >restart(){ > stop > start >} > >condrestart(){ > [ -e /var/lock/subsys/mysqld ] && restart || : >} > ># See how we were called. >case "$1" in > start) > start > ;; > stop) > stop > ;; > status) > status mysqld > ;; > restart) > restart > ;; > condrestart) > condrestart > ;; > *) > echo $"Usage: $0 {start|stop|status|condrestart|restart}" > exit 1 >esac > >exit $? > > > >-------8<-------8<-------8<-------8<-------8<-------8<-------8<-------8<-------8<-------8<------- > >=================================================================== >RCS file: RCS/mysqld,v >retrieving revision 1.1 >diff -r1.1 mysqld >18d17 >< >21,53c20,67 >< # extract value of a MySQL option from /etc/my.cnf >< # Usage: get_mysql_option FILE VARNAME DEFAULT >< # result is returned in $result >< # Ugly as this is, it knows nothing of option file sections ... >< get_mysql_option(){ >< result=`sed -n "s/^[ \t]*$2[ \t]*=[ \t]*//p" "$1" 2>/dev/null | tail -n 1` >< if [ -z "$result" ]; then >< # not found, use default >< result="$3" >< else >< # found, still have to deal with quoting and end-of-line comments >< dequoted=`echo "$result" | sed "s/^'\([^']*\)'.*$/\1/"` >< if [ x"$dequoted" != x"$result" ]; then >< result="$dequoted" >< else >< dequoted=`echo "$result" | sed 's/^"\([^"]*\)".*$/\1/'` >< if [ x"$dequoted" != x"$result" ]; then >< result="$dequoted" >< else >< result=`echo "$result" | sed 's/^\([^ \t#]*\).*$/\1/'` >< fi >< fi >< fi >< } >< >< get_mysql_option /etc/my.cnf datadir "/var/lib/mysql" >< datadir="$result" >< get_mysql_option /etc/my.cnf socket "$datadir/mysql.sock" >< socketfile="$result" >< get_mysql_option /etc/my.cnf err-log "/var/log/mysqld.log" >< errlogfile="$result" >< get_mysql_option /etc/my.cnf pid-file "/var/run/mysqld/mysqld.pid" >< mypidfile="$result" >--- >> # Below we use "my_print_defaults" to look for values in a compiled-in >> # set of configuration files: First "/etc/my.cnf", overridden by >> # "/var/lib/mysql/my.cnf", overriden by "$HOME/.my.cnf". >> # Only values that are found in the section "mysqld_safe" are considered. >> # Note that the output of 'my_print_defaults' will contain the overridden >> # and overriding options, so the sed command has to look for the last >> # entry. So we use tac to reverse the output first. >> >> # Obtain the directory in which server-specific "my.cnf" config file, the >> # Unix domain socket and the databases (in particular, the database called >> # "mysql") reside. Preferentially use the values of section "[mysql.server]" >> # instead of section "[mysqld_safe]" or the old-sytle "[mysqld]". >> # "my_print_defaults" should be extended to read several sections, really. >> >> datadir=`/usr/bin/my_print_defaults mysql.server | tac | sed '/^--datadir=*/!d; s///;q'` >> if [ -z $datadir ]; then >> datadir="/var/lib/mysql" >> fi >> echo "datadir is : $datadir" >> >> # Obtain the file that collects stdout/stderr of the MySQL server. We collect >> # from section "[mysqld_safe]". >> >> errlogfile=`/usr/bin/my_print_defaults mysqld_safe | tac | sed '/^--err-log=*/!d; s///;q'` >> if [ -z $errlogfile ]; then >> errlogfile="/var/log/mysqld.log" >> fi >> echo "errlogfile is: $errlogfile" >> >> # Obtain the socket through which a client may connect. By default, the >> # socket is found in $datadir. The socket option may not only appear in "my.cnf"'s >> # "[mysqld_safe]" section but also in the "[mysqld]" and "[client]" section. Oh my! >> >> socketfile=`/usr/bin/my_print_defaults mysqld_safe | tac | sed '/^--socket=*/!d; s///;q'` >> if [ -z $socketfile ]; then >> socketfile="$datadir/mysql.sock" >> fi >> echo "socketfile is: $socketfile" >> >> # Obtain the PID file. This must be set as by default mysqld_safe does not >> # write any. Thuse the pid-file option is explicitly passed to mysqld_safe >> # again below to make sure. >> >> mypidfile=`/usr/bin/my_print_defaults mysqld_safe | tac | sed '/^--pid-file=*/!d; s///;q'` >> if [ -z $mypidfile ]; then >> mypidfile="/var/run/mysqld/mysqld.pid" >> fi >> echo "mypidfile is : $mypidfile" >73c87,94 >< /usr/bin/mysqld_safe --defaults-file=/etc/my.cnf --pid-file="$mypidfile" >/dev/null 2>&1 & >--- >> # Also pass the options defined above for some stability even though in >> # most cases "mysqld_safe" (which itself calls "my_print_defaults") would >> # come to the same conclusion as to the actual values to use. >> /usr/bin/mysqld_safe --defaults-file="/etc/my.cnf" \ >> --pid-file="$mypidfile" \ >> --datadir="$datadir" \ >> --log-error=$errlogfile \ >> --socket=$socketfile >/dev/null 2>&1 & >161a183 >> > > > > >
You cannot view the attachment while viewing its details because your browser does not support IFRAMEs.
View the attachment on a separate page
.
View Attachment As Raw
Actions:
View
Attachments on
bug 233771
: 150835