mirror of
https://github.com/MariaDB/server.git
synced 2025-01-16 12:02:42 +01:00
Fix Bug #56581 RPM scripts use hardcoded datadir location
When fixing the 27072 bug, the shell snippets running before/after a RPM upgrade got expanded to look at files in the data directory and at the PID file. In this expansion, the standard locations were used. There are users who configure their installations to use non-standard locations for the data directory, the PID file, and other objects. For these users, the fix of 27072 did not work. As a result, the fact that a server was running at upgrade start was not noticed, and the new server was not started after the upgrade. With this patch, the shell snippets now try to get these locations from "my_print_defaults" before falling back to the defaults. Now, the fact that the old server is running is again noticed (even with non-standard locations), and the new server is started. Also, the upgrade log is written to the correct data directory. support-files/mysql.spec.sh: See the global comment for the purpose of this change. In tests on SuSE 11, it was found necessary to use the full path name of "my_print_defaults", it seems $PATH die not include "/usr/bin".
This commit is contained in:
parent
a265fde655
commit
106e590086
1 changed files with 48 additions and 10 deletions
|
@ -1,4 +1,4 @@
|
|||
# Copyright (c) 2000, 2010, Oracle and/or its affiliates. All rights reserved.
|
||||
# Copyright (c) 2000, 2011, Oracle and/or its affiliates. All rights reserved.
|
||||
#
|
||||
# This program is free software; you can redistribute it and/or modify
|
||||
# it under the terms of the GNU General Public License as published by
|
||||
|
@ -610,7 +610,25 @@ touch $RBR%{_sysconfdir}/mysqlmanager.passwd
|
|||
##############################################################################
|
||||
|
||||
%pre server
|
||||
mysql_datadir=%{mysqldatadir}
|
||||
# This is the code running at the beginning of a RPM upgrade action,
|
||||
# before replacing the old files with the new ones.
|
||||
|
||||
# There are users who deviate from the default file system layout.
|
||||
# Check local settings to support them.
|
||||
if [ -x %{_bindir}/my_print_defaults ]
|
||||
then
|
||||
mysql_datadir=`%{_bindir}/my_print_defaults server mysqld | grep '^--datadir=' | sed -n 's/--datadir=//p'`
|
||||
PID_FILE_PATT=`%{_bindir}/my_print_defaults server mysqld | grep '^--pid-file=' | sed -n 's/--pid-file=//p'`
|
||||
fi
|
||||
if [ -z "$mysql_datadir" ]
|
||||
then
|
||||
mysql_datadir=%{mysqldatadir}
|
||||
fi
|
||||
if [ -z "$PID_FILE_PATT" ]
|
||||
then
|
||||
PID_FILE_PATT="$mysql_datadir/*.pid"
|
||||
fi
|
||||
|
||||
# Check if we can safely upgrade. An upgrade is only safe if it's from one
|
||||
# of our RPMs in the same version family.
|
||||
|
||||
|
@ -681,7 +699,7 @@ fi
|
|||
|
||||
# We assume that if there is exactly one ".pid" file,
|
||||
# it contains the valid PID of a running MySQL server.
|
||||
NR_PID_FILES=`ls $mysql_datadir/*.pid 2>/dev/null | wc -l`
|
||||
NR_PID_FILES=`ls $PID_FILE_PATT 2>/dev/null | wc -l`
|
||||
case $NR_PID_FILES in
|
||||
0 ) SERVER_TO_START='' ;; # No "*.pid" file == no running server
|
||||
1 ) SERVER_TO_START='true' ;;
|
||||
|
@ -703,8 +721,8 @@ if [ -f $STATUS_FILE ]; then
|
|||
echo "before repeating the MySQL upgrade."
|
||||
exit 1
|
||||
elif [ -n "$SEVERAL_PID_FILES" ] ; then
|
||||
echo "Your MySQL directory '$mysql_datadir' has more than one PID file:"
|
||||
ls -ld $mysql_datadir/*.pid
|
||||
echo "You have more than one PID file:"
|
||||
ls -ld $PID_FILE_PATT
|
||||
echo "Please check which one (if any) corresponds to a running server"
|
||||
echo "and delete all others before repeating the MySQL upgrade."
|
||||
exit 1
|
||||
|
@ -729,17 +747,17 @@ if [ -d $mysql_datadir ] ; then
|
|||
if [ -n "$SERVER_TO_START" ] ; then
|
||||
# There is only one PID file, race possibility ignored
|
||||
echo "PID file:" >> $STATUS_FILE
|
||||
ls -l $mysql_datadir/*.pid >> $STATUS_FILE
|
||||
cat $mysql_datadir/*.pid >> $STATUS_FILE
|
||||
ls -l $PID_FILE_PATT >> $STATUS_FILE
|
||||
cat $PID_FILE_PATT >> $STATUS_FILE
|
||||
echo >> $STATUS_FILE
|
||||
echo "Server process:" >> $STATUS_FILE
|
||||
ps -fp `cat $mysql_datadir/*.pid` >> $STATUS_FILE
|
||||
ps -fp `cat $PID_FILE_PATT` >> $STATUS_FILE
|
||||
echo >> $STATUS_FILE
|
||||
echo "SERVER_TO_START=$SERVER_TO_START" >> $STATUS_FILE
|
||||
else
|
||||
# Take a note we checked it ...
|
||||
echo "PID file:" >> $STATUS_FILE
|
||||
ls -l $mysql_datadir/*.pid >> $STATUS_FILE 2>&1
|
||||
ls -l $PID_FILE_PATT >> $STATUS_FILE 2>&1
|
||||
fi
|
||||
fi
|
||||
|
||||
|
@ -754,7 +772,20 @@ if [ -x %{_sysconfdir}/init.d/mysql ] ; then
|
|||
fi
|
||||
|
||||
%post server
|
||||
mysql_datadir=%{mysqldatadir}
|
||||
# This is the code running at the end of a RPM install or upgrade action,
|
||||
# after the (new) files have been written.
|
||||
|
||||
# There are users who deviate from the default file system layout.
|
||||
# Check local settings to support them.
|
||||
if [ -x %{_bindir}/my_print_defaults ]
|
||||
then
|
||||
mysql_datadir=`%{_bindir}/my_print_defaults server mysqld | grep '^--datadir=' | sed -n 's/--datadir=//p'`
|
||||
fi
|
||||
if [ -z "$mysql_datadir" ]
|
||||
then
|
||||
mysql_datadir=%{mysqldatadir}
|
||||
fi
|
||||
|
||||
NEW_VERSION=%{mysql_version}-%{release}
|
||||
STATUS_FILE=$mysql_datadir/RPM_UPGRADE_MARKER
|
||||
|
||||
|
@ -1133,6 +1164,13 @@ fi
|
|||
##############################################################################
|
||||
%changelog
|
||||
|
||||
* Thu Feb 03 2011 Joerg Bruehe <joerg.bruehe@oracle.com>
|
||||
|
||||
- Fix bug#56581: If an installation deviates from the default file locations
|
||||
("datadir" and "pid-file"), the mechanism to detect a running server (on upgrade)
|
||||
should still work, and use these locations.
|
||||
The problem was that the fix for bug#27072 did not check for local settings.
|
||||
|
||||
* Wed Nov 24 2010 Alexander Nozdrin <alexander.nozdrin@oracle.com>
|
||||
|
||||
- EXCEPTIONS-CLIENT has been deleted, remove it from here too.
|
||||
|
|
Loading…
Reference in a new issue