脚本主要分3大部分:变量初始化部分,函数申明部分,具体执行部分
line45:供用户设置basedir变量的值,默认值为空 line46:供用户设置datadir变量的值,默认值为空 line51:供用户设置pid_file变量的值(如果希望用mysqlmanager启动server,则设置这个变量),默认值为空 line52:供用户设置server_pid_file变量的值(如果希望用mysqld_safe启动 server,则设置这个变量),默认值为空 line53:供用户设置use_mysqld_safe变量的值,决定使用mysqld_safe还是 mysqlmanager启动server,默认值为1 line54:供用户设置user变量的值,默认值为空 line77:供用户设置datadir_set变量的值,默认值为空 line55-73:确定basedir和 datadir变量的值 如果用户设置的basedir不存在,那么 * basedir=/usr/local * bindir=/usr/local/bin * sbindir=/usr/local/sbin * libexecdir=/usr/local/libexec 如果用户设置的basedir存在,那么 * bindir=$basedir/bin * sbindir=$basedir/sbin * libexecdir=$basedir/libexec line96:PATH=/sbin:/usr/sbin:/bin:/usr/bin:$basedir/bin
line82-94:函数申明 log_success_msg()及log_error_msg():
用途:
用于显示reload函数的执行结果
接受参数:
所要显示的信息
行为:
如果/lib/lsb/init-functions存在,那么引入这两个函数的申明
如果不存在,那么手动申明这两个函数
line101-105:决定系统对echo \c 和 echo -n 的结果
line107-127:函数申明 parse_server_arguments():
用途:
通过解析my_print_defaults的结果,来设置一些基础变量的值
接受参数:
my_print_defaults的结果
行为:
分别设置以下变量:
basedir、bindir、datadir、sbindir、libexecdir、user、pid-file、use- mysqld_safe、use-manager
line129-136:函数申明 parse_manager_arguments():
用途:
用mysqlmanager启动时的参数解析
接受参数:
需要解析的参数
行为:
如果/lib/lsb/init-functions存在,那么引入这两个函数的申明
如果不存在,那么手动申明这两个函数
line138-163:函数申明 wait_for_pid():
用途:
在start和stop用于等待pid的生成和删除
输入参数:
‘created’ ‘removed’两种值
行为:
循环判断35次,每秒一次,根据输入参数去判断pid文件是否被创建或移除。
如果成功,则log_success_msg
如果达到超时,则log_failure_msg
line165-202:确定二进制可执行程序my_print_defaults的位置。先后顺序如下: 其中$d 是从/etc/my.cnf 中的basedir取值的。 * ./bin/my_print_defaults * $bindir/my_print_defaults * $bindir/mysql_print_defaults * $d/bin/my_print_defaults * $d/bin/mysql_print_defaults * my_print_defaults (即my_print_defaults在path中) line204-218:确定my.cnf 的位置。先后顺序如下: 其中$d 是从/etc/my.cnf 中的basedir取值的。 * $basedir/my.cnf * $datadir/my.cnf * $bindir/mysql_print_defaults * $d/bin/my_print_defaults * $d/bin/mysql_print_defaults * my_print_defaults (即my_print_defaults在path中) line220-223:使用预先设置的变量,通过以下两条命令,解析启动必要的参数 parse_server_arguments `$print_defaults $extra_args mysqld server mysql_server mysql.server` parse_manager_arguments `$print_defaults $extra_args manager` line225-236:获得pid- file变量的值,优先级依次是: * $pid_file (如果$pid_file是绝对路径) * $datadir/$pid_file (如果$pid_file是相对路径) * $datadir/mysqlmanager-`/bin/hostname`.pid (之前没有设置$pid_file) line237-245:获得pid- file变量的值,优先级依次是: * $pid_file (如果$pid_file是绝对路径) * $datadir/$server_pid_file (如果$pid_file是相对路径) * $datadir/`/bin/hostname`.pid (之前没有设置$pid_file)
用于启动mysql服务器
line254-261:初始化 mysqlmanager可执行程序的路径$libexecdir/mysqlmanager或者$sbindir/mysqlmanager或者$sbindir/mysqlmanager line264-275:如果mysqlmanager存在并可执行,且$use_mysqld_safe设置为0,那么尝试使用mysqlmanager进行启动 启动命令:mysqlmanager –user=$user –pid-file=$pid_file >/dev/null 2>&1 & 使用wait_for_pid created 等待mysqlserver的启动。 然后创建系统服务锁:/var/lock/subsys/mysqlmanager line276-288:如果 mysqld_safe存在并可执行,并且$use_mysqld_safe设置不为0 启动命令:$bindir/mysqld_safe –datadir=$datadir –pid-file=$server_pid_file >/dev/null 2>&1 & 如果启动成功,创建一个/var/lock/subsys/mysql锁文件。 line289-291:如果 mysqld_safe和mysqlmanager都不可执行,则报错:”Couldn’t find MySQL manager or server”
用于关闭mysql服务器
line299-306:分别判断$pid_file和$server_pid_file两个文件是否存在,来判断server是通过何种方式启动的 line310-320:通过pid-file获得server的pid号,使用 kill $pid 的方式关闭服务器 使用wait_for_pid removed等待server关闭 如果server是通过mysqlmanager启动的那么删除系统锁文件:/var/lock/subsys/mysqlmanager 如果server是通过mysql_safe启动的那么删除系统锁文件:/var/lock/subsys/mysql line321-324:如果找不到pid-file则报错”MySQL manager or server PID file could not be found!”
重启mysql服务器
line326-331:依次调用stop 和start函数
重新装载mysql的配置文件
line333-341:先通过$server_pid_file获得server的pid 然后执行kill -HUP $mysqld_pid进行配置重载 并根据执行情况,调用log_success_msg “Reloading service MySQL”或者log_failure_msg “MySQL PID file could not be found!”报告结果