Chinaunix首页 | 论坛 | 博客
  • 博客访问: 593239
  • 博文数量: 57
  • 博客积分: 877
  • 博客等级: 准尉
  • 技术积分: 1275
  • 用 户 组: 普通用户
  • 注册时间: 2011-03-24 16:16
文章分类

全部博文(57)

文章存档

2014年(2)

2013年(15)

2012年(20)

2011年(20)

我的朋友

分类: Mysql/postgreSQL

2012-11-27 15:13:19

我们知道mysql.server,mysqld_safemysqld都是可以用来启动mysql服务的,但他们之间是有些区别的

Note:Mysql.server指的是 /etc/init.d/mysql

这三个命令中,其中mysql.servermysqld_safe shell 脚本写的,我们可以打开来查看里面的内容。

   打开mysql.server 脚本,大致看了一下,这个脚本的主要作用就是为了方便启动和关闭mysql服务,这个脚本中需要调用的是 mysqld_safe 这个脚本

点击(此处)折叠或打开

  1. case "$mode" in
  2. 'start')
  3. # Start daemon
  4. # Safeguard (relative paths, core dumps..)
  5. cd $basedir
  6. echo $echo_n "Starting MySQL"
  7. if test -x $bindir/mysqld_safe
  8. then
  9. # Give extra arguments to mysqld with the my.cnf file. This script
  10. # may be overwritten at next upgrade.
  11. $bindir/mysqld_safe --datadir="$datadir" --pid-file="$mysqld_pid_file_path" $other_args >/dev/null 2>&1 &
  12. wait_for_pid created "$!" "$mysqld_pid_file_path"; return_value=$?
  13. # Make lock for RedHat / SuSE
  14. if test -w "$lockdir"
  15. then
  16. touch "$lock_file_path"
  17. fi
  18. exit $return_value
  19. else
  20. log_failure_msg "Couldn't find MySQL server ($bindir/mysqld_safe)"
  21. fi
  22. ;;

在调用 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 参数选项来指定配置信息;


点击(此处)折叠或打开

  1. 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这些参数

点击(此处)折叠或打开

  1. parse_server_arguments() {
  2. for arg do
  3. case "$arg" in
  4. --basedir=*) basedir=`echo "$arg" | sed -e 's/^[^=]*=//'`
  5. bindir="$basedir/bin"
  6. if test -z "$datadir_set"; then
  7. datadir="$basedir/data"
  8. fi
  9. sbindir="$basedir/sbin"
  10. libexecdir="$basedir/libexec"
  11. ;;
  12. --datadir=*) datadir=`echo "$arg" | sed -e 's/^[^=]*=//'`
  13. datadir_set=1
  14. ;;
  15. --pid-file=*) mysqld_pid_file_path=`echo "$arg" | sed -e 's/^[^=]*=//'` ;;
  16. --service-startup-timeout=*) service_startup_timeout=`echo "$arg" | sed -e 's/^[^=]*=//'` ;;
  17. esac
  18. done
  19. }

那最后$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) |
给主人留下些什么吧!~~