我们知道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服务的不是它.