注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

God is U 做自己的上帝

富原孤島--只发优质级的文章

 
 
 

日志

 
 

MySQL的mysqld代码全文  

2009-09-05 09:03:25|  分类: [数据库裤] |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |

//一直对 mysqld start\mysqld stop 的具体实现感兴趣,今天特意翻看了一下mysqld 的shell script,全文如下:

 

#!/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"

 

# extract value of a MySQL option from config files

# Usage: get_mysql_option SECTION VARNAME DEFAULT

# result is returned in $result

# We use my_print_defaults which prints all options from multiple files,

# with the more specific ones later; hence take the last match.

get_mysql_option(){

        result=`/usr/bin/my_print_defaults "$1" | sed -n "s/^--$2=//p" | tail -n

 1`

        if [ -z "$result" ]; then

            # not found, use default

            result="$3"

        fi

}

 

get_mysql_option mysqld datadir "/var/lib/mysql"

datadir="$result"

get_mysql_option mysqld socket "$datadir/mysql.sock"

socketfile="$result"

get_mysql_option mysqld_safe log-error "/var/log/mysqld.log"

errlogfile="$result"

get_mysql_option mysqld_safe pid-file "/var/run/mysqld/mysqld.pid"

mypidfile="$result"

 

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 mysql:mysql "$datadir"

        chmod 0755 "$datadir"

        # Pass all the options determined above, to ensure consistent behavior.

        # In many cases mysqld_safe would arrive at the same conclusions anyway

        # but we need to be sure.

        /usr/bin/mysqld_safe   --datadir="$datadir" --socket="$socketfile" \

                --log-error="$errlogfile" --pid-file="$mypidfile" \

                >/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

                    ret=1

            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 $?

 

相关文章:

  评论这张
 
阅读(568)| 评论(0)
推荐 转载

历史上的今天

在LOFTER的更多文章

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2017