Skip to content

Commit

Permalink
Bug#19775856: When the socket option is relative, mysqld startup scri…
Browse files Browse the repository at this point in the history
…pt fails on CentOS 6
  • Loading branch information
bkandasa authored and kevincrane committed Feb 10, 2015
1 parent 878a72f commit 299e3f0
Show file tree
Hide file tree
Showing 2 changed files with 25 additions and 5 deletions.
22 changes: 19 additions & 3 deletions packaging/rpm-oel/mysql-systemd-start
Expand Up @@ -8,10 +8,19 @@
# post mode : ping server until answer is received
#

get_option () {
local section=$1
local option=$2
local default=$3
ret=$(/usr/bin/my_print_defaults $section | grep '^--'${option}'=' | cut -d= -f2-)
[ -z $ret ] && ret=$default
echo $ret
}

install_db () {
# Note: something different than datadir=/var/lib/mysql requires SELinux policy changes (in enforcing mode)
datadir=$(/usr/bin/my_print_defaults server mysqld | grep '^--datadir=' | sed -n 's/--datadir=//p')
datadir=$(get_option mysqld datadir "/var/lib/mysql")

# Restore log, dir, perms and SELinux contexts
[ -d "$datadir" ] || install -d -m 0755 -omysql -gmysql "$datadir" || exit 1
log=/var/log/mysqld.log
Expand All @@ -35,9 +44,16 @@ pinger () {
# Wait for ping to answer to signal startup completed,
# might take a while in case of e.g. crash recovery
# MySQL systemd service will timeout script if no answer
datadir=$(get_option mysqld datadir "/var/lib/mysql")
socket=$(get_option mysqld socket "$datadir/mysql.sock")
case $socket in
/*) adminsocket="$socket" ;;
*) adminsocket="$datadir/$socket" ;;
esac

while /bin/true ; do
sleep 1
mysqladmin ping >/dev/null 2>&1 && break
mysqladmin --no-defaults --socket="$adminsocket" --user=UNKNOWN_MYSQL_USER ping >/dev/null 2>&1 && break
done
exit 0
}
Expand Down
8 changes: 6 additions & 2 deletions packaging/rpm-oel/mysql.init
Expand Up @@ -50,11 +50,15 @@ errlogfile="$result"
get_mysql_option mysqld_safe pid-file "/var/run/mysqld/mysqld.pid"
mypidfile="$result"

case $socketfile in
/*) adminsocket="$socketfile" ;;
*) adminsocket="$datadir/$socketfile" ;;
esac

start(){
[ -x $exec ] || exit 5
# check to see if it's already running
RESPONSE=`/usr/bin/mysqladmin --socket="$socketfile" --user=UNKNOWN_MYSQL_USER ping 2>&1`
RESPONSE=$(/usr/bin/mysqladmin --no-defaults --socket="$adminsocket" --user=UNKNOWN_MYSQL_USER ping 2>&1)
if [ $? = 0 ]; then
# already running, do nothing
action $"Starting $prog: " /bin/true
Expand Down Expand Up @@ -107,7 +111,7 @@ start(){
ret=0
TIMEOUT="$STARTTIMEOUT"
while [ $TIMEOUT -gt 0 ]; do
RESPONSE=`/usr/bin/mysqladmin --socket="$socketfile" --user=UNKNOWN_MYSQL_USER ping 2>&1` && break
RESPONSE=$(/usr/bin/mysqladmin --no-defaults --socket="$adminsocket" --user=UNKNOWN_MYSQL_USER ping 2>&1) && break
echo "$RESPONSE" | grep -q "Access denied for user" && break
if ! /bin/kill -0 $safe_pid 2>/dev/null; then
echo "MySQL Daemon failed to start."
Expand Down

0 comments on commit 299e3f0

Please sign in to comment.