1*4882a593Smuzhiyun#! /bin/sh 2*4882a593Smuzhiyun# 3*4882a593Smuzhiyun# Needed argument: pre | post 4*4882a593Smuzhiyun# 5*4882a593Smuzhiyun# pre mode : try to run mysql_install_db and fix perms and SELinux contexts 6*4882a593Smuzhiyun# post mode : ping server until answer is received 7*4882a593Smuzhiyun# 8*4882a593Smuzhiyun 9*4882a593Smuzhiyunget_option () { 10*4882a593Smuzhiyun local section=$1 11*4882a593Smuzhiyun local option=$2 12*4882a593Smuzhiyun local default=$3 13*4882a593Smuzhiyun ret=$(/usr/bin/my_print_defaults $section | grep '^--'${option}'=' | cut -d= -f2-) 14*4882a593Smuzhiyun [ -z $ret ] && ret=$default 15*4882a593Smuzhiyun echo $ret 16*4882a593Smuzhiyun} 17*4882a593Smuzhiyun 18*4882a593Smuzhiyuninstall_db () { 19*4882a593Smuzhiyun # Note: something different than datadir=/var/lib/mysql requires SELinux policy changes (in enforcing mode) 20*4882a593Smuzhiyun datadir=$(get_option mysqld datadir "/var/lib/mysql") 21*4882a593Smuzhiyun 22*4882a593Smuzhiyun # Restore log, dir, perms and SELinux contexts 23*4882a593Smuzhiyun [ -d "$datadir" ] || install -d -m 0755 -omysql -gmysql "$datadir" || exit 1 24*4882a593Smuzhiyun log=/var/log/mysqld.log 25*4882a593Smuzhiyun [ -e $log ] || touch $log 26*4882a593Smuzhiyun chmod 0640 $log 27*4882a593Smuzhiyun chown mysql:mysql $log || exit 1 28*4882a593Smuzhiyun if [ -x /usr/sbin/restorecon ]; then 29*4882a593Smuzhiyun /usr/sbin/restorecon "$datadir" 30*4882a593Smuzhiyun /usr/sbin/restorecon $log 31*4882a593Smuzhiyun fi 32*4882a593Smuzhiyun 33*4882a593Smuzhiyun # If special mysql dir is in place, skip db install 34*4882a593Smuzhiyun [ -d "$datadir/mysql" ] && exit 0 35*4882a593Smuzhiyun 36*4882a593Smuzhiyun # Create initial db 37*4882a593Smuzhiyun /usr/bin/mysql_install_db --rpm --datadir="$datadir" --user=mysql 38*4882a593Smuzhiyun exit 0 39*4882a593Smuzhiyun} 40*4882a593Smuzhiyun 41*4882a593Smuzhiyunpinger () { 42*4882a593Smuzhiyun # Wait for ping to answer to signal startup completed, 43*4882a593Smuzhiyun # might take a while in case of e.g. crash recovery 44*4882a593Smuzhiyun # MySQL systemd service will timeout script if no answer 45*4882a593Smuzhiyun datadir=$(get_option mysqld datadir "/var/lib/mysql") 46*4882a593Smuzhiyun socket=$(get_option mysqld socket "$datadir/mysql.sock") 47*4882a593Smuzhiyun case $socket in 48*4882a593Smuzhiyun /*) adminsocket="$socket" ;; 49*4882a593Smuzhiyun *) adminsocket="$datadir/$socket" ;; 50*4882a593Smuzhiyun esac 51*4882a593Smuzhiyun 52*4882a593Smuzhiyun while /bin/true ; do 53*4882a593Smuzhiyun sleep 1 54*4882a593Smuzhiyun mysqladmin --no-defaults --socket="$adminsocket" --user=UNKNOWN_MYSQL_USER ping >/dev/null 2>&1 && break 55*4882a593Smuzhiyun done 56*4882a593Smuzhiyun exit 0 57*4882a593Smuzhiyun} 58*4882a593Smuzhiyun 59*4882a593Smuzhiyun# main 60*4882a593Smuzhiyuncase $1 in 61*4882a593Smuzhiyun "pre") install_db ;; 62*4882a593Smuzhiyun "post") pinger ;; 63*4882a593Smuzhiyunesac 64*4882a593Smuzhiyun 65*4882a593Smuzhiyunexit 0 66*4882a593Smuzhiyun 67