mysqld_safe 作為mysqld 啟動腳本惜犀,開啟了守護mysqld進程的任務(wù)颈娜。
本人學習心得如下:
1锚赤、初始化腳本變量宽涌,若第一個參數(shù)是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熄赡、解析參數(shù)姜挺,做了個trick,將參數(shù)名的下劃線統(tǒng)一為中劃線 得到各個變量的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不存在纫溃,則是正常退出
- 若是啟動時間過短腰涧,這是
重要函數(shù)說明
usage() 打印腳本使用參數(shù)幫助
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 ;;
總結(jié):選用mysqld_safe啟動的好處。
1紊浩、可以選擇配置參數(shù)文件啟動和默認啟動窖铡,參數(shù)過濾等,安全性提高
2坊谁、如果有的選項是mysqld_safe 啟動時特有的费彼,那么可以終端指定,如果在配置文件中指定需要放在[mysqld_safe]組里面口芍,放在其他組不能被正確解析箍铲。
3、mysqld_safe啟動能夠指定內(nèi)核文件大小 ulimit -c $core_file_size以及打開的文件的數(shù)量ulimit -n $size鬓椭。
4颠猴、守護mysqld進程