mysqld_safe

mysqld_safe 作为mysqld 启动脚本,开启了守护mysqld进程的任务。
本人学习心得如下:
1、初始化脚本变量,若第一个参数是cnf,及时保存到defaults变量中
2、查找basedir & leddir
3、查找datadir & plugindir,my.cnf 文件
4、以上3步,可以得到my_print_defaults程序和cnf文件

bin/my_print_defaults --defaults-file=/data/mydata/my3306/my3306.cnf --loose-verbose mysqld server
--log_slave_updates
--port=3306
--user=mysql
--pid-file=/data/mydata/my3306/my3306.pid
--datadir=/data/mydata/my3306
--basedir=/usr/local/mysql

5、解析参数,做了个trick,将参数名的下划线统一为中划线 得到各个变量的value

parse_arguments $print_defaults $defaults --loose-verbose mysqld server

6、errlog的处理方式,logiging=(file || syslog),file方式,会trick后缀.err,syslog方式的话,会利用my_which(),查找logger命令
7、对选项--user,--pid-file,--socket及--port进行处理及赋值,且用append_arg_to_args
8、判断pidfile & mysqld进程是否存在
9、启动守护逻辑 while true ---> eval_log_error "$cmd" ,
守护逻辑

  • 若pidfile不存在,则是正常退出
  • 若是启动时间过短,这是

重要函数说明

usage() 打印脚本使用参数帮助
log_generic() log_error() log_notice() 打印日志的级别(daemon.error,daemon.notice)和方式(init,file,syslog)
eval_log_error() 控制启动$cmd的输出方式(file,syslog)

核心$cmd赋值
for i in "$ledir/$MYSQLD" "$defaults" "--basedir=$MY_BASEDIR_VERSION"
"--datadir=$DATADIR" "--plugin-dir=$plugin_dir" "$USER_OPTION"
do
cmd="$cmd "shell_quote_string "$i"
done
cmd="$cmd $args"
输出方式
file) cmd="$cmd >> "shell_quote_string "$err_log"" 2>&1" ;;
syslog) cmd="$cmd 2>&1 | logger -t '$syslog_tag_mysqld' -p daemon.error"
136 ;;

总结:选用mysqld_safe启动的好处。
1、可以选择配置参数文件启动和默认启动,参数过滤等,安全性提高
2、如果有的选项是mysqld_safe 启动时特有的,那么可以终端指定,如果在配置文件中指定需要放在[mysqld_safe]组里面,放在其他组不能被正确解析。
3、mysqld_safe启动能够指定内核文件大小 ulimit -c $core_file_size以及打开的文件的数量ulimit -n $size。
4、守护mysqld进程

推荐阅读更多精彩内容