首页/应用软件/内容

MySQL打开时报“The server quit without updating PID file”出错处理方法

应用软件2022-10-02 阅读()
status} [ MySQL server options ]" exit 1 ;; esac exit 0

首先,定义相关参数

basedir=
datadir=
# Default value, in seconds, afterwhich the script should timeout waiting
# for server start. 
# Value here is overriden by value in my.cnf. 
# 0 means don't wait at all
# Negative numbers mean to wait indefinitely
service_startup_timeout=900
# Lock directory for RedHat / SuSE.
lockdir='/var/lock/subsys'
lock_file_path="$lockdir/mysql"

其中,

basedir 指的二进制压缩包解压后所在的目录,譬如/usr/local/mysql。

datadir 指的是数据目录

service_startup_timeout=900 定义mysql服务启动的时间限制,如果在900s中没有启动成功,则该脚本会退出。

lockdir='/var/lock/subsys'

关于/var/lock/subsys,网上的解释如下,后续会用到。

总的来说,系统关闭的过程(发出关闭信号,调用服务自身的进程)中会检查/var/lock/subsys下的文件,逐一关闭每个服务,如果某一运行的服务在/var/lock/subsys下没有相应的选项。在系统关闭的时候,会像杀死普通进程一样杀死这个服务。

通过察看/etc/rc.d/init.d下的脚本,可以发现每个服务自己操纵时都会去查看/var/lock/subsys下相应的服务。

很多程序需要判断是否当前已经有一个实例在运行,这个目录就是让程序判断是否有实例运行的标志,比如说xinetd,如果存在这个文件,表示已经有xinetd在运行了,否则就是没有,当然程序里面还要有相应的判断措施来真正确定是否有实例在运行。通常与该目录配套的还有/var/run目录,用来存放对应实例的PID,如果你写脚本的话,会发现这2个目录结合起来可以很方便的判断出许多服务是否在运行,运行的相关信息等等。

判断basedir和datadir

# Set some defaults
mysqld_pid_file_path=
if test -z "$basedir"
then
 basedir=/usr/local/mysql
 bindir=/usr/local/mysql/bin
 if test -z "$datadir"
 then
 datadir=/usr/local/mysql/data
 fi
 sbindir=/usr/local/mysql/bin
 libexecdir=/usr/local/mysql/bin
else
 bindir="$basedir/bin"
 if test -z "$datadir"
 then
 datadir="$basedir/data"
 fi
 sbindir="$basedir/sbin"
 libexecdir="$basedir/libexec"
fi

其中,

mysqld_pid_file_path 指定pid文件的路径

-z string 判断字符串是否为空

如果basedir没有显示设置,则默认为/usr/local/mysql,这也是为什么很多mysql安装教程都推荐将mysql相关文件放到/usr/local/mysql下。

如果datadir没有显示设置,则默认为$basedir/data。

定义log_success_msg()和log_failure_msg()函数

首先,判断/lib/lsb/init-functions文件是否存在,如果存在,则使定义在init-functions文件中的所有shell函数在当前脚本中生效。

如果没有,则定义两个函数,一个用于打印成功日志,一个是打印错误日志。

在RHCS 6.7中,该文件并不存在,已被/etc/init.d/functions所替代。

#
# Use LSB init script functions for printing messages, if possible
#
lsb_functions="/lib/lsb/init-functions"
if test -f $lsb_functions ; then
 . $lsb_functions
else
 log_success_msg()
 {
 echo " SUCCESS! $@"
 }
 log_failure_msg()
 {
 echo " ERROR! $@"
 }
fi

传递参数

将第一个参数传递给mode,剩下的参数传递给other_args

PATH="/sbin:/usr/sbin:/bin:/usr/bin:$basedir/bin"
export PATH
mode=$1 # start or stop
[ $# -ge 1 ] && shift
other_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

解析配置文件中的参数

这个函数在脚本后面会涉及到。

主要涉及如下参数:--basedir,--datadir,--pid-file,--service-startup-timeout。

parse_server_arguments() {
 for arg do
 case "$arg" in
  --basedir=*) basedir=`echo "$arg" (北联网教程,专业提供视频软件下载)

第1页  第2页  第3页  第4页  第5页  第6页  第7页  第8页  第9页  第10页  第11页  第12页  第13页  第14页  第15页  第16页  第17页  第18页  第19页  第20页  第21页  第22页  第23页  第24页  第25页  第26页  第27页  第28页  第29页  第30页 

……

相关阅读