我们知道mysql.server,mysqld_safe和mysqld都是可以用来启动mysql服务的,但他们之间是有些区别的
Note:Mysql.server指的是 /etc/init.d/mysql
这三个命令中,其中mysql.server和mysqld_safe 是shell 脚本写的,我们可以打开来查看里面的内容。
打开mysql.server 脚本,大致看了一下,这个脚本的主要作用就是为了方便启动和关闭mysql服务,这个脚本中需要调用的是 mysqld_safe 这个脚本
-
case "$mode" in
-
'start')
-
# Start daemon
-
-
# Safeguard (relative paths, core dumps..)
-
cd $basedir
-
-
echo $echo_n "Starting MySQL"
-
if test -x $bindir/mysqld_safe
-
then
-
# Give extra arguments to mysqld with the my.cnf file. This script
-
# may be overwritten at next upgrade.
-
$bindir/mysqld_safe --datadir="$datadir" --pid-file="$mysqld_pid_file_path" $other_args >/dev/null 2>&1 &
-
wait_for_pid created "$!" "$mysqld_pid_file_path"; return_value=$?
-
-
# Make lock for RedHat / SuSE
-
if test -w "$lockdir"
-
then
-
touch "$lock_file_path"
-
fi
-
-
exit $return_value
-
else
-
log_failure_msg "Couldn't find MySQL server ($bindir/mysqld_safe)"
-
fi
-
;;
在调用 mysqld_safe 的时候我要把 –datadir ,–pid-file,$other_args 这些参数值传入到mysqld_safe 脚本,那怎么来确定这些参数呢?
首先得知道 my_print_defaults 这个命令,这个命令就是从配置文件中读取mysql的参数值,具体可以通过 my_print_defaults --help 查看:
默认情况下 my_print_defaults 会从 /etc/my.cnf /etc/mysql/my.cnf
/usr/etc/my.cnf ~/.my.cnf 这些文件中读取配置信息,当然也可以通过 –e 参数选项来指定配置信息;
点击(此处)折叠或打开
-
parse_server_arguments `$print_defaults $extra_args mysqld server mysql_server mysql.server`
这行代码中parse_server_arguments 是个函数,是用来处理my_print_defaults 输出的一些参数,$print_defaults 就是指 my_print_defaults 命令的路径, $extra_args 是指要读取的配置文件, mysqld server mysql_server mysql.server 这些就是确定读配置信息的那几部分内容.
再查看parse_server_arguments 这个函数,就可以发现,其实只需要读取—basedir,--datadir,--pid-file这些参数
点击(此处)折叠或打开
-
parse_server_arguments() {
-
for arg do
-
case "$arg" in
-
--basedir=*) basedir=`echo "$arg" | sed -e 's/^[^=]*=//'`
-
bindir="$basedir/bin"
-
if test -z "$datadir_set"; then
-
datadir="$basedir/data"
-
fi
-
sbindir="$basedir/sbin"
-
libexecdir="$basedir/libexec"
-
;;
-
--datadir=*) datadir=`echo "$arg" | sed -e 's/^[^=]*=//'`
-
datadir_set=1
-
;;
-
--pid-file=*) mysqld_pid_file_path=`echo "$arg" | sed -e 's/^[^=]*=//'` ;;
-
--service-startup-timeout=*) service_startup_timeout=`echo "$arg" | sed -e 's/^[^=]*=//'` ;;
-
esac
-
done
-
}
那最后$other_args 参数是什么?继续看脚本:
[ $# -ge 1 ] && shift
other_args="$*"
这里就可以看出 other_args 就是 除去$1 变量之后的所有变量
比如启动的时候用 ./mysql start --log-bin=/var/lib/mysql –performance-schema 那么
Other_args 变量就是等于 --log-bin=/var/lib/mysql –performance-schema,但一般我们启动的时候 就是./mysql
start 所有一般other_args 是为空的。
总结一下:mysql.server 这个脚本就是为了方便启动和关闭mysql 服务,但真正启动mysql服务的不是它.
(function(w, d, g, J) { var e = J.stringify || J.encode; d[g] = d[g] || {}; d[g]['showValidImages'] = d[g]['showValidImages'] || function() { w.postMessage(e({'msg': {'g': g, 'm':'s'}}), location.href); } })(window, document, '__huaban', JSON);
阅读(5341) | 评论(1) | 转发(0) |