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進程
版权声明:本站所有资料均为网友推荐收集整理而来,仅供学习和研究交流使用。
工作时间:8:00-18:00
客服电话
电子邮件
admin@qq.com
扫码二维码
获取最新动态