mysql自启动脚本_Mysql 自启动脚本

本文介绍了一个用于启动和停止 MySQL 数据库服务的 Shell 脚本。该脚本适用于 SYSV R4 基于的系统,并支持通过 chkconfig 和 LSB init 脚本规范进行配置。此外,还详细介绍了如何设置 MySQL 的安装目录路径、数据目录路径等参数。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

#!/bin/sh

# Copyright Abandoned 1996 TCX DataKonsult AB & Monty Program KB & Detron HB

# This file is public domain and comes with NO WARRANTY of any kind

# MySQL daemon start/stop script.

# Usually this is put in /etc/init.d (at least on machines SYSV R4 based

# systems) and linked to /etc/rc3.d/S99mysql and /etc/rc0.d/K01mysql.

# When this is done the mysql server will be started when the machine is

# started and shut down when the systems goes down.

# Comments to support chkconfig on RedHat Linux

# chkconfig: 2345 64 36

# description: A very fast and reliable SQL database engine.

# Comments to support LSB init script conventions

### BEGIN INIT INFO

# Provides: mysql

# Required-Start: $local_fs $network $remote_fs

# Should-Start: ypbind nscd ldap ntpd xntpd

# Required-Stop: $local_fs $network $remote_fs

# Default-Start:  2 3 4 5

# Default-Stop: 0 1 6

# Short-Description: start and stop MySQL

# Description: MySQL is a very fast and reliable SQL database engine.

### END INIT INFO

# If you install MySQL on some other places than /usr/local/mysql, then you

# have to do one of the following things for this script to work:

#

# - Run this script from within the MySQL installation directory

# - Create a /etc/my.cnf file with the following information:

#   [mysqld]

#   basedir=

# - Add the above to any other configuration file (for example ~/.my.ini)

#   and copy my_print_defaults to /usr/bin

# - Add the path to the mysql-installation-directory to the basedir variable

#   below.

#

# If you want to affect other MySQL variables, you should make your changes

# in the /etc/my.cnf, ~/.my.cnf or other MySQL configuration files.

# If you change base dir, you must also change datadir. These may get

# overwritten by settings in the MySQL configuration files.basedir=datadir=#The following variables are only set for letting mysql.server find things.

# Set some defaultspid_file=server_pid_file=use_mysqld_safe=1user=mysqliftest-z"$basedir"then

basedir=/usr/local/mysql

bindir=./biniftest-z"$datadir"then

datadir=/usr/local/mysql/data

fi

sbindir=./bin

libexecdir=./binelsebindir="$basedir/bin"iftest-z"$datadir"then

datadir="$basedir/data"fi

sbindir="$basedir/sbin"libexecdir="$basedir/libexec"fi#datadir_set is used to determine if datadir was set (and so should be

# *not* set inside of the --basedir= handler.)datadir_set=## Use LSB init script functions for printing messages, if possible

#lsb_functions="/lib/lsb/init-functions"iftest-f$lsb_functions; then

source$lsb_functionselselog_success_msg()

{

echo"SUCCESS! $@"}

log_failure_msg()

{

echo"ERROR! $@"}

fi

PATH=/sbin:/usr/sbin:/bin:/usr/bin:$basedir/bin

export PATH

mode=$1#start or stopshiftother_args="$*"#uncommon, but needed when called from an RPM upgrade action

# Expected: "--skip-networking --skip-grant-tables"

# They are not checked here, intentionally, as it is the resposibility

# of the "spec" file author to give correct arguments only.case `echo"testing\c"`,`echo-n testing` in*c*,-n*) echo_n=echo_c=;;*c*,*)   echo_n=-n echo_c=;;*)       echo_n=echo_c='\c';;

esac

parse_server_arguments() {forargdocase"$arg"in--basedir=*)  basedir=`echo"$arg"|sed-e's/^[^=]*=//'`

bindir="$basedir/bin"iftest-z"$datadir_set"; then

datadir="$basedir/data"fi

sbindir="$basedir/sbin"libexecdir="$basedir/libexec";;--datadir=*)  datadir=`echo"$arg"|sed-e's/^[^=]*=//'`

datadir_set=1;;--user=*)  user=`echo"$arg"|sed-e's/^[^=]*=//'` ;;--pid-file=*) server_pid_file=`echo"$arg"|sed-e's/^[^=]*=//'` ;;--use-mysqld_safe) use_mysqld_safe=1;;--use-manager)     use_mysqld_safe=0;;

esac

done

}

parse_manager_arguments() {forargdocase"$arg"in--pid-file=*) pid_file=`echo"$arg"|sed-e's/^[^=]*=//'` ;;--user=*)  user=`echo"$arg"|sed-e's/^[^=]*=//'` ;;

esac

done

}

wait_for_pid () {

i=0whiletest$i-lt35;dosleep1case"$1"in'created')

test-s$pid_file&&i=''&&break

;;'removed')

test!-s$pid_file&&i=''&&break

;;*)

echo"wait_for_pid () usage: wait_for_pid created|removed"exit1;;

esac

echo$echo_n".$echo_c"i=`expr$i+1`

doneiftest-z"$i"; then

log_success_msgelselog_failure_msg

fi

}#Get arguments from the my.cnf file,

# the only group, which is read from now on is [mysqld]iftest-x./bin/my_print_defaults

then

print_defaults="./bin/my_print_defaults"elif test-x$bindir/my_print_defaults

then

print_defaults="$bindir/my_print_defaults"elif test-x$bindir/mysql_print_defaults

then

print_defaults="$bindir/mysql_print_defaults"else#Try to find basedir in /etc/my.cnfconf=/etc/my.cnf

print_defaults=iftest-r$confthen

subpat='^[^=]*basedir[^=]*=\(.*\)$'dirs=`sed-e"/$subpat/!d"-e's//\1/'$conf`ford in$dirsdod=`echo$d|sed-e's/[     ]//g'`iftest-x"$d/bin/my_print_defaults"then

print_defaults="$d/bin/my_print_defaults"break

fiiftest-x"$d/bin/mysql_print_defaults"then

print_defaults="$d/bin/mysql_print_defaults"break

fi

done

fi#Hope it's in the PATH

9b8a8a44dd1c74ae49c20a7cd451974e.png but I doubt ittest-z"$print_defaults"&&print_defaults="my_print_defaults"fi## Read defaults file from 'basedir'.   If there is no defaults file there

# check if it's in the old (depricated) place (datadir) and read it from there

#extra_args=""iftest-r"$basedir/my.cnf"then

extra_args="-e $basedir/my.cnf"elseiftest-r"$datadir/my.cnf"then

extra_args="-e $datadir/my.cnf"fi

fi

parse_server_arguments `$print_defaults$extra_argsmysqld server mysql_server mysql.server`#Look for the pidfileparse_manager_arguments `$print_defaults$extra_argsmanager`## Set pid file if not given

#iftest-z"$pid_file"then

pid_file=$datadir/mysqlmanager-`/bin/hostname`.pidelsecase"$pid_file"in/*) ;;*)  pid_file="$datadir/$pid_file";;

esac

fiiftest-z"$server_pid_file"then

server_pid_file=$datadir/`/bin/hostname`.pidelsecase"$server_pid_file"in/*) ;;*)  server_pid_file="$datadir/$server_pid_file";;

esac

fi#Safeguard (relative paths, core dumps..)cd$basedircase"$mode"in'start')#Start daemonmanager=$bindir/mysqlmanageriftest-x$libexecdir/mysqlmanager

then

manager=$libexecdir/mysqlmanager

elif test-x$sbindir/mysqlmanager

then

manager=$sbindir/mysqlmanager

fi

echo$echo_n"Starting MySQL"iftest-x$manager-a"$use_mysqld_safe"="0"theniftest-n"$other_args"then

log_failure_msg"MySQL manager does not support options '$other_args'"exit1fi#Give extra arguments to mysqld with the my.cnf file. This script may

# be overwritten at next upgrade.$manager--user=$user--pid-file=$pid_file>/dev/null2>&1&wait_for_pid created#Make lock for RedHat / SuSEiftest-w/var/lock/subsys

then

touch/var/lock/subsys/mysqlmanager

fi

elif test-x$bindir/mysqld_safe

then#Give extra arguments to mysqld with the my.cnf file. This script

# may be overwritten at next upgrade.pid_file=$server_pid_file$bindir/mysqld_safe--datadir=$datadir--pid-file=$server_pid_file$other_args>/dev/null2>&1&wait_for_pid created#Make lock for RedHat / SuSEiftest-w/var/lock/subsys

then

touch/var/lock/subsys/mysql

fielselog_failure_msg"Couldn't find MySQL manager or server"fi

;;'stop')#Stop daemon. We use a signal here to avoid having to know the

# root password.

# The RedHat / SuSE lock directory to removelock_dir=/var/lock/subsys/mysqlmanager#If the manager pid_file doesn't exist, try the server'siftest!-s"$pid_file"then

pid_file=$server_pid_filelock_dir=/var/lock/subsys/mysql

fiiftest-s"$pid_file"then

mysqlmanager_pid=`cat$pid_file`

echo$echo_n"Shutting down MySQL"kill$mysqlmanager_pid#mysqlmanager should remove the pid_file when it exits, so wait for it.wait_for_pid removed#delete lock for RedHat / SuSEiftest-f$lock_dirthen

rm-f$lock_dirfielselog_failure_msg"MySQL manager or server PID file could not be found!"fi

;;'restart')#Stop the service and regardless of whether it was

# running or not, start it again.$0stop$other_args$0start$other_args;;'reload')iftest-s"$server_pid_file"; then

mysqld_pid=`cat$server_pid_file`kill-HUP$mysqld_pid&&log_success_msg"Reloading service MySQL"touch$server_pid_fileelselog_failure_msg"MySQL PID file could not be found!"fi

;;*)#usageecho"Usage: $0  {start|stop|restart|reload}  [ MySQL server options ]"exit1;;

esac

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值