diff --git a/install_mysql-5.7.sh b/install_mysql-5.7.sh index ce03253..118553e 100755 --- a/install_mysql-5.7.sh +++ b/install_mysql-5.7.sh @@ -3,7 +3,7 @@ _backup_date="$(date +"%Y-%m-%d-%H%M")" #_MYSQL_VERSION=5.6.26 -_MYSQL_VERSION=5.7.17 +_MYSQL_VERSION=5.7.20 _MYSQL_SRC_BASE_DIR=$(dirname $(realpath $0)) @@ -80,6 +80,12 @@ warn (){ echo "" } +info (){ + echo "" + echo -e "\t[ \033[32m\033[1mInfo\033[m ]: $*" + echo "" +} + echo_ok() { echo -e "\033[75G[ \033[32mok\033[m ]" @@ -257,7 +263,7 @@ if $UPDATE_MYSQL ; then echo_ok else echo_failed - fatal "Kann Datenbank Verz. der installierten Version nicht finden!" + fatal "Kann Installations Verz. der z.Zt. installierten Version nicht finden!" fi echo "" fi @@ -411,7 +417,6 @@ do done -__SYMLINK_INITSCRIPT=ja __SYMLINK_INSTALL_DIR=ja __SYMLINK_DATA_DIR=ja @@ -419,27 +424,9 @@ echo -e "\033[32m--\033[m" echo "" echo "Symlinks:" echo "" -echo " - Setze Symlink für das Init Skript (/etc/init.d/mysql.server)" echo " - Setze Sysmlink for das Installationsverzeichnis `dirname $MYSQL_INSTALL_DIR`/mysql" echo " - Setze Sysmlink for das Datenverzeichnis `dirname $MYSQL_DATA_DIR`/mysql" echo "" -_SYMLINK_INITSCRIPT="" -echononl "Sysmlink für das Init Skript? (ja/nein) [${__SYMLINK_INITSCRIPT}]: " -read _SYMLINK_INITSCRIPT -if [ "X$_SYMLINK_INITSCRIPT" = "X" ];then - _SYMLINK_INITSCRIPT=$__SYMLINK_INITSCRIPT -fi -_SYMLINK_INITSCRIPT=`echo "$_SYMLINK_INITSCRIPT" | tr '[:upper:]' '[:lower:]'` - -while [ "$_SYMLINK_INITSCRIPT" != "ja" -a "$_SYMLINK_INITSCRIPT" != "nein" ]; do - echononl "Falsche Eingabe. (ja/nein): " - read _SYMLINK_INITSCRIPT -done -if [ "$_SYMLINK_INITSCRIPT" = "ja" -o "$_SYMLINK_INITSCRIPT" = "Ja" ]; then - SYMLINK_INITSCRIPT=true -else - SYMLINK_INITSCRIPT=false -fi echo "" _SYMLINK_INSTALL_DIR="" @@ -536,10 +523,21 @@ if $SYSTEMD_EXISTS ; then ;; esac done + else INSTALL_SYSTEMD_SERVICE=false fi +MYSQL_SERVICE_FILE="" +MYSQL_SYSV_INIT_SCRIPT="" +SYSTEMD_PID_DIR="" +if $INSTALL_SYSTEMD_SERVICE ; then + MYSQL_SERVICE_FILE="mysqld.service" + SYSTEMD_PID_DIR="$MYSQL_DATA_DIR" +else + MYSQL_SYSV_INIT_SCRIPT="mysql.server" +fi + clear echo -e "\033[21G\033[32mStarte Installation mit folgenden Parametern:\033[m" @@ -569,15 +567,17 @@ echo "Unix Socket...............: $MYSQL_UNIX_SOCKET" echo "MySQL-User................: $MYSQL_USER" echo "MySQL-Gruppe..............: $MYSQL_GROUP" echo "" -echo "Symlink Initskript........: $SYMLINK_INITSCRIPT" echo "Symlink Installationsverz.: $SYMLINK_INSTALL_DIR" echo "Symlink Datenverzeichnis..: $SYMLINK_DATA_DIR" echo "" echo "Systemd Unterstützung.....: $SYSTEMD_EXISTS" if $INSTALL_SYSTEMD_SERVICE ; then echo "Starmethode...............: Systemd Service" + echo "MySQL Service File........: $MYSQL_SERVICE_FILE" + echo "Systemd pid directory.....: $SYSTEMD_PID_DIR" else echo "Starmethode...............: SysVinit Script" + echo "MySQL SysyVinit Script....: $MYSQL_SYSV_INIT_SCRIPT" fi echo "" echononl "einverstanden [ja/nein]: " @@ -616,13 +616,14 @@ if [ ! -f ${MYSQL_SRC_BASE_DIR}/$distfile ] ; then fi echo "" +echo "" ## - Erstelle Logverzeichnis ## - if [ -d $logdir ]; then echononl "Verschiebe exitierendes Logverzeichnis ..." - mv ${logdir} ${logdir}.$_backup_date + mv "$logdir" "${logdir}.$_backup_date" if [ "$?" = "0" ]; then echo_ok else @@ -667,7 +668,6 @@ echo "## - Unix Socket...............: $MYSQL_UNIX_SOCKET" >> ${logdir}/main.log echo "## - MySQL-User................: $MYSQL_USER" >> ${logdir}/main.log echo "## - MySQL-Gruppe..............: $MYSQL_GROUP" >> ${logdir}/main.log echo "## - " >> ${logdir}/main.log -echo "## - Symlink Initskript........: $SYMLINK_INITSCRIPT" >> ${logdir}/main.log echo "## - Symlink Installationsverz.: $SYMLINK_INSTALL_DIR" >> ${logdir}/main.log echo "## - Symlink Datenverzeichnis..: $SYMLINK_DATA_DIR" >> ${logdir}/main.log echo "## - " >> ${logdir}/main.log @@ -675,8 +675,11 @@ echo "" >> ${logdir}/main.log echo "## - Systemd Unterstützung.....: $SYSTEMD_EXISTS" >> ${logdir}/main.log if $INSTALL_SYSTEMD_SERVICE ; then echo "## - Starmethode...............: Systemd Service" >> ${logdir}/main.log + echo "## - MySQL Service File........: $MYSQL_SERVICE_FILE" >> ${logdir}/main.log + echo "## - Systemd pid directory.....: $SYSTEMD_PID_DIR" >> ${logdir}/main.log else echo "## - Starmethode...............: SysVinit Script" >> ${logdir}/main.log + echo "## - MySQL SysyVinit Script....: $MYSQL_SYSV_INIT_SCRIPT" >> ${logdir}/main.log fi echo "" >> ${logdir}/main.log echo "" >> ${logdir}/main.log @@ -700,35 +703,91 @@ echo "MYSQL_UNIX_SOCKET=$MYSQL_UNIX_SOCKET" >> ${logdir}/main.log echo "MYSQL_USER=$MYSQL_USER" >> ${logdir}/main.log echo "MYSQL_GROUP=$MYSQL_GROUP" >> ${logdir}/main.log echo "" >> ${logdir}/main.log -echo "SYMLINK_INITSCRIPT=$SYMLINK_INITSCRIPT" >> ${logdir}/main.log echo "SYMLINK_INSTALL_DIR=$SYMLINK_INSTALL_DIR" >> ${logdir}/main.log echo "SYMLINK_DATA_DIR=$SYMLINK_DATA_DIR" >> ${logdir}/main.log echo "SYSTEMD_EXISTS=$SYSTEMD_EXISTS" >> ${logdir}/main.log echo "INSTALL_SYSTEMD_SERVICE=$INSTALL_SYSTEMD_SERVICE" >> ${logdir}/main.log +echo "MYSQL_SERVICE_FILE=$MYSQL_SERVICE_FILE" >> ${logdir}/main.log +echo "SYSTEMD_PID_DIR=$SYSTEMD_PID_DIR" >> ${logdir}/main.log +echo "MYSQL_SYSV_INIT_SCRIPT=$MYSQL_SYSV_INIT_SCRIPT" >> ${logdir}/main.log _MYSQL_INITSCRIPT= -if [ -f /etc/init.d/mysql.server ];then - _MYSQL_INITSCRIPT="mysql.server" +if [ -f "/etc/init.d/$MYSQL_SYSV_INIT_SCRIPT" ];then + _MYSQL_INITSCRIPT="${MYSQL_SYSV_INIT_SCRIPT}" elif [ -f /etc/init.d/mysql ];then _MYSQL_INITSCRIPT="mysql" +elif [ -f /etc/init.d/mysql.server ];then + _MYSQL_INITSCRIPT="mysql.server" fi _SYSTEMD_SERVICE_FILE= -if [[ -f "/etc/systemd/system/mysqld.service" ]]; then - _SYSTEMD_SERVICE_FILE="mysqld.service" -elif [[ -f "/etc/systemd/system/mysql.service" ]] ; then +if [[ -f "/etc/systemd/system/$MYSQL_SERVICE_FILE" ]]; then + _SYSTEMD_SERVICE_FILE="${MYSQL_SERVICE_FILE}" +elif [[ -f /etc/systemd/system/mysql.service ]] ; then _SYSTEMD_SERVICE_FILE="mysql.service" +elif [[ -f /etc/systemd/system/mysqld.service ]] ; then + _SYSTEMD_SERVICE_FILE="mysqld.service" fi if [[ -z "$_MYSQL_INITSCRIPT" ]] && [[ -z "$_SYSTEMD_SERVICE_FILE" ]] && $UPDATE_MYSQL ; then fatal "Kein start/stop Sevice File/ Init Script gefunden.." fi + +## ----- +## - Doing some pre-installation tasks +## ----- + echo "" +echo "" +echo -e "\033[37m\033[1mDoing some pre-installation tasks..\033[m" +echo "" + +echo "" >> ${logdir}/main.log +echo "" >> ${logdir}/main.log +echo "## -----" >> ${logdir}/main.log +echo "## - Doing some pre-installation tasks" >> ${logdir}/main.log +echo "## -----" >> ${logdir}/main.log + + +echononl "Adding Group \"$MYSQL_GROUP\".." +if cat /etc/group | grep -e "^${MYSQL_GROUP}:" > /dev/null 2>&1 ; then + echo_skipped +else + echo "" >> ${logdir}/main.log + echo "## - Erstelle Gruppe \"$MYSQL_GROUP\"" >> ${logdir}/main.log + echo "## -" >> ${logdir}/main.log + echo "groupadd -r $MYSQL_GROUP" >> ${logdir}/main.log + groupadd -r $MYSQL_GROUP >> ${logdir}/main.log 2>&1 + if [ "$?" = "0" ]; then + echo_ok + else + echo_failed + fatal Kann Gruppe \"${MYSQL_GROUP}\" nicht erstellen.. + fi +fi + +echononl "Adding User \"$MYSQL_USER\".." +if id -u $MYSQL_USER > /dev/null 2>&1; then + echo_skipped +else + echo "" >> ${logdir}/main.log + echo "## - Erstelle User \"$MYSQL_USER\"" >> ${logdir}/main.log + echo "## -" >> ${logdir}/main.log + echo "useradd -r -M -d /noexistent -s /bin/false -g $MYSQL_GROUP $MYSQL_USER" >> ${logdir}/main.log + useradd -r -M -d /noexistent -s /bin/false -g $MYSQL_GROUP $MYSQL_USER >> ${logdir}/main.log 2>&1 + if [ "$?" = "0" ]; then + echo_ok + else + echo_failed + fatal Kann User \"${MYSQL_USER}\" nicht erstellen.. + fi +fi ## - Disable crontab for user root ## - +_crontab_found=false echononl "Backup crontab" echo "" >> ${logdir}/main.log echo "## - Backup crontab" >> ${logdir}/main.log @@ -737,34 +796,47 @@ echo "crontab -u root -l > $_CRONTAB_BAKUP_FILE" >> ${logdir}/main.log crontab -u root -l >> $_CRONTAB_BAKUP_FILE 2>> ${logdir}/main.log if [ "$?" = "0" ]; then echo_ok + _crontab_found=true else - echo_failed + if [[ ! -s "$_CRONTAB_BAKUP_FILE" ]] ; then + echo_skipped + warn "No crontab for user 'root'found." + else + echo_failed + error "Backup crontab failed" + fi fi -echononl "Disable crontab for user root" -echo "" >> ${logdir}/main.log -echo "## - Disable crontab for user root" >> ${logdir}/main.log -echo "## -" >> ${logdir}/main.log -echo "crontab -r -u root" >> ${logdir}/main.log -crontab -r -u root >> ${logdir}/main.log 2>&1 -if [ "$?" = "0" ]; then - echo_ok -else - echo_failed +if $_crontab_found ; then + echononl "Disable crontab for user root" + echo "" >> ${logdir}/main.log + echo "## - Disable crontab for user root" >> ${logdir}/main.log + echo "## -" >> ${logdir}/main.log + echo "crontab -r -u root" >> ${logdir}/main.log + crontab -r -u root >> ${logdir}/main.log 2>&1 + if [ "$?" = "0" ]; then + echo_ok + else + echo_failed + fi fi - ## - Stop MySQL Service if running ## - echononl "Stop MySQL Service.." -PID=$(ps aux | grep "mysqld_safe" | grep -v grep | awk '{print$2}') -if [[ "X${PID}X" != "XX" ]];then +PIDS="$(ps aux | grep -E "(bin/mysqld_safe |bin/mysqld )" | grep -v grep | awk '{print$2}')" +if [[ "X${PIDS}X" != "XX" ]];then echo "" >> ${logdir}/main.log echo "## - Stop MySQL Service" >> ${logdir}/main.log echo "## -" >> ${logdir}/main.log if $SYSTEMD_EXISTS ; then - echo "systemctl stop ${_MYSQL_INITSCRIPT}" >> ${logdir}/main.log - systemctl stop ${_MYSQL_INITSCRIPT} >> ${logdir}/main.log 2>&1 + if [[ -n "$_SYSTEMD_SERVICE_FILE" ]] ; then + echo "systemctl stop ${_SYSTEMD_SERVICE_FILE}" >> ${logdir}/main.log + systemctl stop ${_SYSTEMD_SERVICE_FILE} >> ${logdir}/main.log 2>&1 + else + echo "systemctl stop ${_MYSQL_INITSCRIPT}" >> ${logdir}/main.log + systemctl stop ${_MYSQL_INITSCRIPT} >> ${logdir}/main.log 2>&1 + fi else echo "/etc/init.d/$_MYSQL_INITSCRIPT stop" >> ${logdir}/main.log /etc/init.d/$_MYSQL_INITSCRIPT stop >> ${logdir}/main.log 2>&1 @@ -772,111 +844,160 @@ if [[ "X${PID}X" != "XX" ]];then sleep 5 - PID=`ps aux | grep "mysqld_safe" | grep -v grep | awk '{print$2}'` - if [[ "X${PID}X" = "XX" ]]; then + PIDS="$(ps aux | grep -E "(bin/mysqld_safe |bin/mysqld )" | grep -v grep | awk '{print$2}')" + if [[ -z "${PIDS}" ]]; then echo_ok else echo_failed - PID=`ps aux | grep "mysqld" | grep -v grep | awk '{print$2}'` echononl "Abbruch (kill -9) aller mysqld Prozesse.." + echo "" >> ${logdir}/main.log echo "## - Abbruch (kill -9) aller mysqld Prozesse" >> ${logdir}/main.log echo "## -" >> ${logdir}/main.log - echo "" >> ${logdir}/main.log - echo "kill -9 $PID" >> ${logdir}/main.log 2>&1 - kill -9 $PID - if [ "$?" = "0" ]; then - echo_ok - else - echo_failed - fi + + declare -i i=0 + + while [[ -n "$PIDS" ]] ; do + + if [[ $i -gt 10 ]]; then + echo_failed + error "Killing remaining MySQL processes failed!" + break + fi + + for _PID in $PIDS ; do + echo "kill -9 $PID" >> ${logdir}/main.log + kill -9 $PID >> ${logdir}/main.log 2>&1 + done + + sleep 2 + + PIDS="$(ps aux | grep -E "(bin/mysqld_safe |bin/mysqld )" | grep -v grep | awk '{print$2}')" + (( i++ )) + done + + [[ $i -le 10 ]] && echo_ok fi else echo_skipped fi +## ----- +## - Deactivate starting MySQL database service at boot time and +## - cleanup System from SysVinit script and/or Systemd service file +## ----- +if [[ -n "$_MYSQL_INITSCRIPT" ]] || [[ -n "$_SYSTEMD_SERVICE_FILE" ]]; then + echo "" + echo "" + echo -e "\033[37m\033[1mDeactivate starting MySQL database service at boot time and" + echo -e "cleanup System from SysVinit script and/or Systemd service file.\033[m" + echo "" -if ! $UPDATE_MYSQL ; then + echo "" >> ${logdir}/main.log + echo "" >> ${logdir}/main.log + echo "## -----" >> ${logdir}/main.log + echo "## - Deactivate starting MySQL database service at boot time and" >> ${logdir}/main.log + echo "## - cleanup System from SysVinit script and/or Systemd service file." >> ${logdir}/main.log + echo "## -----" >> ${logdir}/main.log +fi - if [ "X${_MYSQL_INITSCRIPT}X" != "XX" ];then +if [ "X${_MYSQL_INITSCRIPT}X" != "XX" ];then - ## - Entferne symbolische Links aus den Run Level Verzeichnissen - ## - - echononl "Entferne symbolische Links aus den Run Level Verzeichnissen" + if [ -f "/etc/init.d/$_MYSQL_INITSCRIPT" ]; then + echononl "Entferne existierendes Initskript" echo "" >> ${logdir}/main.log - echo "## - Entferne symbolische Links aus den Run Level Verzeichnissen" >> ${logdir}/main.log + echo "## - Entferne existierendes Initskript" >> ${logdir}/main.log echo "## -" >> ${logdir}/main.log - echo "update-rc.d -f $_MYSQL_INITSCRIPT remove" >> ${logdir}/main.log - update-rc.d -f $_MYSQL_INITSCRIPT remove >> ${logdir}/main.log 2>&1 + echo "rm -f /etc/init.d/$_MYSQL_INITSCRIPT" >> ${logdir}/main.log + rm -f /etc/init.d/$_MYSQL_INITSCRIPT >> ${logdir}/main.log 2>&1 if [ "$?" = "0" ]; then echo_ok else echo_failed - fatal "Kann symbolische Links (Run Level Verzeichnisse) nicht entfernen." - fi - - if [ -f "/etc/init.d/$_MYSQL_INITSCRIPT" ]; then - echononl "Entferne existierendes Initskript" - echo "" >> ${logdir}/main.log - echo "## - Entferne existierendes Initskript" >> ${logdir}/main.log - echo "## -" >> ${logdir}/main.log - echo "rm -f /etc/init.d/$_MYSQL_INITSCRIPT" >> ${logdir}/main.log - rm -f /etc/init.d/$_MYSQL_INITSCRIPT >> ${logdir}/main.log 2>&1 - if [ "$?" = "0" ]; then - echo_ok - else - echo_failed - fatal "Kann existierendes Initskript nicht entfernen." - fi + fatal "Kann existierendes Initskript nicht entfernen." fi fi - if [[ -n "$_SYSTEMD_SERVICE_FILE" ]]; then + ## - Entferne symbolische Links aus den Run Level Verzeichnissen + ## - + echononl "Entferne symbolische Links aus den Run Level Verzeichnissen" + echo "" >> ${logdir}/main.log + echo "## - Entferne symbolische Links aus den Run Level Verzeichnissen" >> ${logdir}/main.log + echo "## -" >> ${logdir}/main.log + echo "update-rc.d -f $_MYSQL_INITSCRIPT remove" >> ${logdir}/main.log + update-rc.d -f $_MYSQL_INITSCRIPT remove >> ${logdir}/main.log 2>&1 + if [ "$?" = "0" ]; then + echo_ok + else + echo_failed + fatal "Kann symbolische Links (Run Level Verzeichnisse) nicht entfernen." + fi +fi - echononl "Deaktiviere Systemd Service \"$_SYSTEMD_SERVICE_FILE\".." - echo "" >> ${logdir}/main.log - echo "## - Deaktiviere Systemd Service \"$_SYSTEMD_SERVICE_FILE\"" >> ${logdir}/main.log - echo "## -" >> ${logdir}/main.log - echo "systemctl disable \"$_SYSTEMD_SERVICE_FILE\"" >> ${logdir}/main.log +if [[ -n "$_SYSTEMD_SERVICE_FILE" ]]; then - systemctl disable "$_SYSTEMD_SERVICE_FILE" >> ${logdir}/main.log 2>&1 - if [ "$?" = "0" ]; then - echo_ok - else - echo_failed - fatal "Kann Systemd Service \"$_SYSTEMD_SERVICE_FILE\" nicht deaktivieren!" - fi - - echononl "Entferne Systemd Service \"etc/systemd/system/${_SYSTEMD_SERVICE_FILE}\".." - echo "" >> ${logdir}/main.log - echo "## - Enferne datei \"/etc/systemd/system/${_SYSTEMD_SERVICE_FILE}\"" >> ${logdir}/main.log - echo "## -" >> ${logdir}/main.log - echo "rm \"/etc/systemd/system/${_SYSTEMD_SERVICE_FILE}\"" >> ${logdir}/main.log + echononl "Deaktiviere Systemd Service \"$_SYSTEMD_SERVICE_FILE\".." + echo "" >> ${logdir}/main.log + echo "## - Deaktiviere Systemd Service \"$_SYSTEMD_SERVICE_FILE\"" >> ${logdir}/main.log + echo "## -" >> ${logdir}/main.log + echo "systemctl disable \"$_SYSTEMD_SERVICE_FILE\"" >> ${logdir}/main.log - rm "/etc/systemd/system/${_SYSTEMD_SERVICE_FILE}" >> ${logdir}/main.log 2>&1 - if [ "$?" = "0" ]; then - echo_ok - else - echo_failed - fatal "Kann existierendes Initskript nicht entfernen." - fi + systemctl disable "$_SYSTEMD_SERVICE_FILE" >> ${logdir}/main.log 2>&1 + if [ "$?" = "0" ]; then + echo_ok + else + echo_failed + fatal "Kann Systemd Service \"$_SYSTEMD_SERVICE_FILE\" nicht deaktivieren!" + fi + + echononl "Entferne Systemd Service \"etc/systemd/system/${_SYSTEMD_SERVICE_FILE}\".." + echo "" >> ${logdir}/main.log + echo "## - Enferne datei \"/etc/systemd/system/${_SYSTEMD_SERVICE_FILE}\"" >> ${logdir}/main.log + echo "## -" >> ${logdir}/main.log + echo "rm \"/etc/systemd/system/${_SYSTEMD_SERVICE_FILE}\"" >> ${logdir}/main.log - echononl "Reload Systemd Daemon" - echo "" >> ${logdir}/main.log - echo "## - Reload Systemd Daemon" >> ${logdir}/main.log - echo "## -" >> ${logdir}/main.log - echo "systemctl daemon-reload" >> ${logdir}/main.log + rm "/etc/systemd/system/${_SYSTEMD_SERVICE_FILE}" >> ${logdir}/main.log 2>&1 + if [ "$?" = "0" ]; then + echo_ok + else + echo_failed + fatal "Kann existierendes Initskript nicht entfernen." + fi - systemctl daemon-reload >> ${logdir}/main.log 2>&1 - if [ "$?" = "0" ]; then - echo_ok - else - echo_failed - error "Kann Systemd Daemon nicht reloaden." - fi - + echononl "Reload Systemd Daemon" + echo "" >> ${logdir}/main.log + echo "## - Reload Systemd Daemon" >> ${logdir}/main.log + echo "## -" >> ${logdir}/main.log + echo "systemctl daemon-reload" >> ${logdir}/main.log - fi + systemctl daemon-reload >> ${logdir}/main.log 2>&1 + if [ "$?" = "0" ]; then + echo_ok + else + echo_failed + error "Kann Systemd Daemon nicht reloaden." + fi + + +fi + + +## ----- +## - Install needed debian packages +## ----- + +if ! $UPDATE_MYSQL ; then + + echo "" + echo "" + echo -e "\033[37m\033[1mInstall needed debian packages\033[m" + echo "" + + echo "" >> ${logdir}/main.log + echo "" >> ${logdir}/main.log + echo "## -----" >> ${logdir}/main.log + echo "## - Install needed debian packages" >> ${logdir}/main.log + echo "## -----" >> ${logdir}/main.log ## - Uninstall debian mysql packages if installed ## - @@ -902,6 +1023,23 @@ if ! $UPDATE_MYSQL ; then fi fi + if [[ -d /etc/mysql ]]; then + + echononl "Sichere/Verschiebe exitierendes Verzeichnis /etc/mysql .." + echo "" >> ${logdir}/main.log + echo "## - Sichere/Verschiebe exitierendes Verzeichnis /etc/mysql" >> ${logdir}/main.log + echo "## -" >> ${logdir}/main.log + echo "mv /etc/mysql \"/etc/mysql.${_backup_date}\"" >> ${logdir}/main.log + mv /etc/mysql "/etc/mysql.${_backup_date}" >> ${logdir}/main.log + if [[ $? -eq 0 ]]; then + echo_ok + else + echo_failed + fatal "Kann Verzeichnis '/etc/mysql' nicht sichern!" + fi + + fi # if [[ -d /etc/mysql ]]; then + echononl "Update index files of the debian repositories" echo "" >> ${logdir}/main.log @@ -1021,11 +1159,26 @@ if ! $UPDATE_MYSQL ; then # fi # fi +fi # if ! $UPDATE_MYSQL -else # if ! $UPDATE_MYSQL +## ----- +## - Backup directories and files from existing installation +## ----- + +if $UPDATE_MYSQL ; then echo "" + echo "" + echo -e "\033[37m\033[1mBackup directories and files from existing installation\033[m" + echo "" + + echo "" >> ${logdir}/main.log + echo "" >> ${logdir}/main.log + echo "## -----" >> ${logdir}/main.log + echo "## - Backup directories and files from existing installation" >> ${logdir}/main.log + echo "## -----" >> ${logdir}/main.log + if [ -d $MYSQL_DATA_DIR ]; then echononl "Sichere exitierendes MySQL Datenbank-Verzeichnis ..." echo "" >> ${logdir}/main.log @@ -1057,43 +1210,58 @@ else # if ! $UPDATE_MYSQL fatal "Exitierendes MySQL Datenbank-Verzeichnis nicht gefunden!" fi -fi # if ! $UPDATE_MYSQL - -echononl "Adding Group \"$MYSQL_GROUP\".." -if cat /etc/group | grep -e "^${MYSQL_GROUP}:" > /dev/null 2>&1 ; then - echo_skipped -else - echo "" >> ${logdir}/main.log - echo "## - Erstelle Gruppe \"$MYSQL_GROUP\"" >> ${logdir}/main.log - echo "## -" >> ${logdir}/main.log - echo "groupadd -r $MYSQL_GROUP" >> ${logdir}/main.log - groupadd -r $MYSQL_GROUP >> ${logdir}/main.log 2>&1 - if [ "$?" = "0" ]; then - echo_ok - else - echo_failed - fatal Kann Gruppe \"${MYSQL_GROUP}\" nicht erstellen.. + if [ -d ${MYSQL_INSTALL_DIR} ];then + echononl "Verschiebe exitierendes Installationsverzeichnis ..." + echo "" >> ${logdir}/main.log + echo "## - Verschiebe exitierendes Installationsverzeichnis" >> ${logdir}/main.log + echo "## -" >> ${logdir}/main.log + echo "mv $MYSQL_INSTALL_DIR $MYSQL_INSTALL_DIR.${_backup_date}" >> ${logdir}/main.log + mv $MYSQL_INSTALL_DIR $MYSQL_INSTALL_DIR.$_backup_date >> ${logdir}/main.log 2>&1 + if [ "$?" = "0" ]; then + echo_ok + else + echo_failed + fatal Kann Installationsverzeichnis \"${MYSQL_INSTALL_DIR}\" nicht verschieben.. + fi fi -fi -echononl "Adding User \"$MYSQL_USER\".." -if id -u $MYSQL_USER > /dev/null 2>&1; then - echo_skipped -else - echo "" >> ${logdir}/main.log - echo "## - Erstelle User \"$MYSQL_USER\"" >> ${logdir}/main.log - echo "## -" >> ${logdir}/main.log - echo "useradd -r -M -d /noexistent -s /bin/false -g $MYSQL_GROUP $MYSQL_USER" >> ${logdir}/main.log - useradd -r -M -d /noexistent -s /bin/false -g $MYSQL_GROUP $MYSQL_USER >> ${logdir}/main.log 2>&1 - if [ "$?" = "0" ]; then - echo_ok - else - echo_failed - fatal Kann User \"${MYSQL_USER}\" nicht erstellen.. +fi # if $UPDATE_MYSQL + + +## ----- +## - Create needed directories for the new installation +## ----- + +echo "" +echo "" +echo -e "\033[37m\033[1mCreate needed directories for the new installation\033[m" +echo "" + +if ! $UPDATE_MYSQL ; then + if [ -d ${MYSQL_DATA_DIR} ];then + echononl "Verschiebe exitierendes MySQL Datenverzeichnis ..." + echo "" >> ${logdir}/main.log + echo "## - Verschiebe exitierendes MySQL Datenverzeichnis" >> ${logdir}/main.log + echo "## -" >> ${logdir}/main.log + echo "mv $MYSQL_DATA_DIR $MYSQL_DATA_DIR.${_backup_date}" >> ${logdir}/main.log + mv $MYSQL_DATA_DIR $MYSQL_DATA_DIR.$_backup_date >> ${logdir}/main.log 2>&1 + if [ "$?" = "0" ]; then + echo_ok + warn "Something went wrong, because the moved directory should NOT exists at this time. + Maybe you run an fresh new installion but MySQL was already installed. anyway.." + else + echo_failed + fatal Kann MySQL Datenverzeichnis \"${MYSQL_DATA_DIR}\" nicht verschieben.. + fi fi -fi +fi +echo "" >> ${logdir}/main.log +echo "" >> ${logdir}/main.log +echo "## -----" >> ${logdir}/main.log +echo "## - Create needed directories for the new installation" >> ${logdir}/main.log +echo "## -----" >> ${logdir}/main.log echononl "Erstelle Datenbank-Verzeichnis \"$MYSQL_DATA_DIR\".." echo "" >> ${logdir}/main.log @@ -1194,30 +1362,57 @@ if [ -d "${MYSQL_SRC_DIR}" ];then fi fi +if $INSTALL_SYSTEMD_SERVICE ; then + if [[ ! -d "$SYSTEMD_PID_DIR" ]] ; then + echononl "Create PID directory '$SYSTEMD_PID_DIR' .." + echo "" >> ${logdir}/main.log + echo "## - Create PID directory '$SYSTEMD_PID_DIR'" >> ${logdir}/main.log + echo "## -" >> ${logdir}/main.log + echo "mkdir \"$SYSTEMD_PID_DIR\"" >> ${logdir}/main.log -cd $MYSQL_SRC_BASE_DIR -echo "" >> ${logdir}/main.log -echo "cd $MYSQL_SRC_BASE_DIR" >> ${logdir}/main.log + mkdir "$SYSTEMD_PID_DIR" >> ${logdir}/main.log 2>&1 + if [[ $? -eq 0 ]] ; then + echo_ok + else + echo_failed + error "Creating PID directory '$SYSTEMD_PID_DIR' failed!" + fi -echo -echononl "Entpacke $distfile ..." -echo "" >> ${logdir}/main.log -echo "## - Entpacke $distfile" >> ${logdir}/main.log -echo "## -" >> ${logdir}/main.log -echo "gunzip < $distfile | tar -xf -" >> ${logdir}/main.log + echononl "Change owner of PID directory '$SYSTEMD_PID_DIR'" + echo "" >> ${logdir}/main.log + echo "## - Change owner of PID directory '$SYSTEMD_PID_DIR'" >> ${logdir}/main.log + echo "## -" >> ${logdir}/main.log + echo "chown $MYSQL_USER:${MYSQL_GROUP} \"${SYSTEMD_PID_DIR}\"" >> ${logdir}/main.log -gunzip < $distfile | tar -xf - -if [ "$?" = "0" ]; then - echo_ok -else - echo_failed - fatal Kann MySQL Sourcearchiv \"${distfile}\" nicht entpacken.. + chown $MYSQL_USER:${MYSQL_GROUP} ${SYSTEMD_PID_DIR} >> ${logdir}/main.log + if [[ $? -eq 0 ]] ; then + echo_ok + else + echo_failed + error "Changing owner of PID directory '$SYSTEMD_PID_DIR' failed!" + fi + + fi fi -cd ${MYSQL_SRC_DIR} -echo "" >> ${logdir}/main.log -echo "cd ${MYSQL_SRC_DIR}" >> ${logdir}/main.log +## ----- +## - Basis Installation MySQL +## ----- + +echo "" +echo "" +echo -e "\033[37m\033[1mBasis Installation MySQL $MYSQL_VERSION\033[m" +echo "" + +echo "" >> ${logdir}/main.log +echo "" >> ${logdir}/main.log +echo "## -----" >> ${logdir}/main.log +echo "## - Basis Installation MySQL $MYSQL_VERSION" >> ${logdir}/main.log +echo "## -----" >> ${logdir}/main.log + +## - This step is redundant and should never bee happend. +## - if [ -d ${MYSQL_INSTALL_DIR} ];then echononl "Verschiebe exitierendes Installationsverzeichnis ..." echo "" >> ${logdir}/main.log @@ -1227,12 +1422,62 @@ if [ -d ${MYSQL_INSTALL_DIR} ];then mv $MYSQL_INSTALL_DIR $MYSQL_INSTALL_DIR.$_backup_date >> ${logdir}/main.log 2>&1 if [ "$?" = "0" ]; then echo_ok + warn "Something went wrong, because the moved directory should NOT exists at this time. + Maybe you run an fresh new installion but MySQL was already installed. anyway.." else echo_failed fatal Kann Installationsverzeichnis \"${MYSQL_INSTALL_DIR}\" nicht verschieben.. fi fi + + +#cd $MYSQL_SRC_BASE_DIR +#echo "" >> ${logdir}/main.log +#echo "cd $MYSQL_SRC_BASE_DIR" >> ${logdir}/main.log + +echononl "Entpacke $distfile ..." +echo "" >> ${logdir}/main.log +echo "## - Entpacke $distfile" >> ${logdir}/main.log +echo "## -" >> ${logdir}/main.log +echo "gunzip < \"${MYSQL_SRC_BASE_DIR}/$distfile\" | tar -C \"$MYSQL_SRC_BASE_DIR\" -xf -" >> ${logdir}/main.log + +gunzip < "${MYSQL_SRC_BASE_DIR}/$distfile" | tar -C "$MYSQL_SRC_BASE_DIR" -xf - +if [ "$?" = "0" ]; then + echo_ok +else + echo_failed + fatal Kann MySQL Sourcearchiv \"${distfile}\" nicht entpacken.. +fi + +echononl "Wechsle in das Verzeichnis '${MYSQL_SRC_DIR}'.." +echo "" >> ${logdir}/main.log +echo "## - Wechsle in das Verzeichnis '${MYSQL_SRC_DIR}'" >> ${logdir}/main.log +echo "## -" >> ${logdir}/main.log +echo "cd ${MYSQL_SRC_DIR}" >> ${logdir}/main.log +cd ${MYSQL_SRC_DIR} >> ${logdir}/main.log 2>&1 +if [ "$?" = "0" ]; then + echo_ok +else + echo_failed + fatal "Kann nicht in das Sourceverzeicnis '${MYSQL_SRC_DIR}' wechseln!" +fi + +# - Erstelle Optionen für 'cmake' +# - +# - Note: +# - +# - Since MySQL v 5.7.16 the default 'secure_file_priv' value has changed +# - +# - NULL (>= MySQL 5.7.16), empty (< MySQL 5.7.16) +# - +# - We change the default to empty ("") with -D INSTALL_SECURE_FILE_PRIVDIR="" option +# - +echononl "Erstelle Optionen für 'cmake'" +echo "" >> ${logdir}/main.log +echo "## - Erstelle Optionen für 'cmake'" >> ${logdir}/main.log +echo "## -" >> ${logdir}/main.log + cmake_options=" -DCMAKE_INSTALL_PREFIX=$MYSQL_INSTALL_DIR -DMYSQL_DATADIR=$MYSQL_DATA_DIR @@ -1243,25 +1488,20 @@ cmake_options=" -DWITH_BOOST=$MYSQL_INSTALL_DIR " if $INSTALL_SYSTEMD_SERVICE ; then - cmake_options="$cmake_options -DWITH_SYSTEMD=1" + cmake_options="$cmake_options -DWITH_SYSTEMD=1 + -DSYSTEMD_PID_DIR=$SYSTEMD_PID_DIR" fi +echo "cmake_options=\"$cmake_options\"" >> ${logdir}/main.log +echo_ok -# - Note: -# - -# - Since MySQL v 5.7.16 the default 'secure_file_priv' value has changed -# - -# - NULL (>= MySQL 5.7.16), empty (< MySQL 5.7.16) -# - -# - We change the default to empty ("") with -D INSTALL_SECURE_FILE_PRIVDIR="" option -# - echononl "Konfiguriere MySQL (cmake).." echo "" >> ${logdir}/main.log echo "# - Konfiguriere MySQL (cmake).." >> ${logdir}/main.log echo "# -" >> ${logdir}/main.log echo "# - See ${logdir}/cmake-conf.log" >> ${logdir}/main.log echo "# -" >> ${logdir}/main.log -echo "cmake $cmake_options" >> ${logdir}/main.log -cmake $cmake_options > ${logdir}/cmake-conf.log 2>&1 +echo "cmake \$cmake_options " >> ${logdir}/main.log +cmake $cmake_options > ${logdir}/cmake-conf.log 2>&1 if [ "$?" = "0" ]; then echo_ok else @@ -1269,8 +1509,6 @@ else fatal Konfiguration fehlgeschlagen. Siehe ${logdir}/cmake-conf.log .. fi -exit 0 - echononl "Kompiliere MySQL.." echo "" >> ${logdir}/main.log echo "## - Kompiliere MySQL" >> ${logdir}/main.log @@ -1301,6 +1539,22 @@ else fatal Installieren von MySQL ist fehlgeschlagen. Siehe ${logdir}/make_install.log .. fi + +## ----- +## - Einbinden der MySQL Installation in das System +## ----- + +echo "" +echo "" +echo -e "\033[37m\033[1mEinbinden der MySQL $MYSQL_VERSION Installation in das System\033[m" +echo "" + +echo "" >> ${logdir}/main.log +echo "" >> ${logdir}/main.log +echo "## -----" >> ${logdir}/main.log +echo "## - Einbinden der MySQL $MYSQL_VERSION Installation in das System" >> ${logdir}/main.log +echo "## -----" >> ${logdir}/main.log + echononl "Konfiguriere Manpages.." _done=false if [ -f /etc/manpath.config ];then @@ -1449,85 +1703,25 @@ if $SYMLINK_DATA_DIR ; then fi -if $SYMLINK_INITSCRIPT ; then - - if [ -h "/etc/init.d/mysql.server" ]; then - echononl "Entferne vorhandenen Symlink \"/etc/init.d/mysql.server\".." - echo "" >> ${logdir}/main.log - echo "## - Entferne vorhandenen Symlink \"/etc/init.d/mysql.server\"" >> ${logdir}/main.log - echo "## -" >> ${logdir}/main.log - echo "rm /etc/init.d/mysql.server" >> ${logdir}/main.log - rm /etc/init.d/mysql.server >> ${logdir}/main.log 2>&1 - if [ "$?" = "0" ]; then - echo_ok - else - echo_failed - error Kann Symlink /etc/init.d/mysql.server nicht entfernen.. - fi - fi - - if [ -f "/etc/init.d/mysql.server" ]; then - echononl "Entferne vorhandenen Datei \"/etc/init.d/mysql.server\".." - echo "" >> ${logdir}/main.log - echo "## - Entferne vorhandenen Datei \"/etc/init.d/mysql.server\"" >> ${logdir}/main.log - echo "## -" >> ${logdir}/main.log - echo "rm /etc/init.d/mysql.server" >> ${logdir}/main.log - rm /etc/init.d/mysql.server >> ${logdir}/main.log 2>&1 - if [ "$?" = "0" ]; then - echo_ok - else - echo_failed - error Kann Datei /etc/init.d/mysql.server nicht entfernen.. - fi - fi - - - echononl "Erstelle Symlink \"/etc/init.d/mysql.server\".." - echo "" >> ${logdir}/main.log - echo "## - Erstelle Symlink \"/etc/init.d/mysql.server\"" >> ${logdir}/main.log - echo "## -" >> ${logdir}/main.log - echo "ln -s \"$(dirname $MYSQL_INSTALL_DIR)/mysql/support-files/mysql.server\" \"/etc/init.d/mysql.server\"" >> ${logdir}/main.log - ln -s "$(dirname $MYSQL_INSTALL_DIR)/mysql/support-files/mysql.server" /etc/init.d/mysql.server >> ${logdir}/main.log 2>&1 - if [ "$?" = "0" ]; then - echo_ok - else - echo_failed - error "Kann Symlink $MYSQL_INSTALL_DIR/support-files/mysql.server --> /etc/init.d/mysql.server nicht erstellen.." - fi - - echononl "Setze ulimit im Startscript.." - echo "" >> ${logdir}/main.log - echo "## - Setze ulimit im Startscript" >> ${logdir}/main.log - echo "## -" >> ${logdir}/main.log - echo "sed -i \"1 s/\(.*\)/\1\n\nulimit -n \\\`ulimit -Hn\\\`\n/\" /etc/init.d/mysql.server" >> ${logdir}/main.log - sed -i "1 s/\(.*\)/\1\n\nulimit -n \`ulimit -Hn\`\n/" $(realpath /etc/init.d/mysql.server) >> ${logdir}/main.log 2>&1 - if [ "$?" = "0" ]; then - echo_ok - else - echo_failed - error "Kann \"ulimit\" im Startscript nicht setzen /etc/init.d/mysql.server nicht setzen.." - fi - -fi - - -echononl "Füge `dirname $MYSQL_INSTALL_DIR`/mysql/bin zur PATH Variable hinzu .." +_checkdir="$(dirname "$MYSQL_INSTALL_DIR")/mysql/bin" +echononl "Füge '$_checkdir' zur PATH Variable hinzu .." if [ -f /etc/profile ]; then - _mysql_bin_dir="`dirname $MYSQL_INSTALL_DIR`/mysql/bin" - if ! grep -e "PATH=.*$_mysql_bin_dir" /etc/profile > /dev/null 2<&1 ; then + if ! grep -e "$_checkdir" /etc/profile > /dev/null 2<&1 ; then echo "" >> ${logdir}/main.log echo "## - Füge `dirname $MYSQL_INSTALL_DIR`/mysql/bin zur PATH Variable hinzu" >> ${logdir}/main.log echo "## -" >> ${logdir}/main.log - echo "perl -i -n -p -e \"s#^([ ]*export[ ]*PATH.*$)#check_dir=\$_mysql_bin_dir\nif [ -d \\\"\\\\\\\$check_dir\\\" ];then\n PATH=\\\\\\\${check_dir}:\\\\\\\$PATH\nfi\n\n\1#\" /etc/profile" >> ${logdir}/main.log 2<&1 - perl -i -n -p -e "s#^([ ]*export[ ]*PATH.*$)#check_dir=$_mysql_bin_dir\nif [ -d \"\\\$check_dir\" ];then\n PATH=\\\${check_dir}:\\\$PATH\nfi\n\n\1#" /etc/profile >> ${logdir}/main.log 2<&1 + echo "perl -i -n -p -e \"s#^([ ]*export[ ]*PATH.*$)#check_dir=\$_checkdir\nif [ -d \\\"\\\\\\\$check_dir\\\" ];then\n PATH=\\\\\\\${check_dir}:\\\\\\\$PATH\nfi\n\n\1#\" /etc/profile" >> ${logdir}/main.log 2<&1 + + perl -i -n -p -e "s#^([ ]*export[ ]*PATH.*$)#check_dir=$_checkdir\nif [ -d \"\\\$check_dir\" ];then\n PATH=\\\${check_dir}:\\\$PATH\nfi\n\n\1#" /etc/profile >> ${logdir}/main.log 2<&1 + if [ "$?" = "0" ]; then echo_ok else echo_failed fi - if ! echo "$PATH" | grep $_mysql_bin_dir >> ${logdir}/main.log 2>&1 ; then - export PATH=${_mysql_bin_dir}:$PATH + if ! echo "$PATH" | grep $_checkdir >> ${logdir}/main.log 2>&1 ; then + export PATH=${_checkdir}:$PATH fi else @@ -1538,7 +1732,22 @@ else fi -echo +## ----- +## - Konfiguration ( Teil 1) MySQL Installation +## ----- + +echo "" +echo "" +echo -e "\033[37m\033[1mKonfiguration (Teil 1) der MySQL $MYSQL_VERSION Installation\033[m" +echo "" + +echo "" >> ${logdir}/main.log +echo "" >> ${logdir}/main.log +echo "## -----" >> ${logdir}/main.log +echo "## - Konfiguration (Teil 1) der MySQL $MYSQL_VERSION Installation" >> ${logdir}/main.log +echo "## -----" >> ${logdir}/main.log + + echononl "Erstelle Konfigurationsdatei /etc/ld.so.conf.d/mysql.conf.." echo "" >> ${logdir}/main.log echo "## - Erstelle Konfigurationsdatei /etc/ld.so.conf.d/mysql.conf" >> ${logdir}/main.log @@ -1577,14 +1786,14 @@ if ! $UPDATE_MYSQL ; then echo "" >> ${logdir}/main.log echo "## - Richte MySQL Systemtabellen ein" >> ${logdir}/main.log echo "## -" >> ${logdir}/main.log - echo "./bin/mysqld --initialize-insecure \ " >> ${logdir}/main.log + echo "${MYSQL_INSTALL_DIR}/bin/mysqld --initialize-insecure \ " >> ${logdir}/main.log echo " --user=$MYSQL_USER \ " >> ${logdir}/main.log echo " --basedir=$MYSQL_INSTALL_DIR \ " >> ${logdir}/main.log echo " --datadir=$MYSQL_DATA_DIR \ " >> ${logdir}/main.log echo " --language=$MYSQL_INSTALL_DIR/share/german" >> ${logdir}/main.log echo "" >> ${logdir}/main.log - ./bin/mysqld --initialize-insecure \ + ${MYSQL_INSTALL_DIR}/bin/mysqld --initialize-insecure \ --user=$MYSQL_USER \ --basedir=$MYSQL_INSTALL_DIR \ --datadir=$MYSQL_DATA_DIR \ @@ -1594,7 +1803,16 @@ if ! $UPDATE_MYSQL ; then echo_ok else echo_failed - fatal Das Einrichten der MySQL Systemtabellen ist fehlgeschlagen.. + error Das Einrichten der MySQL Systemtabellen ist fehlgeschlagen.. + + echononl "continue anyway [yes/no]: " + read OK + OK="$(echo "$OK" | tr '[:upper:]' '[:lower:]')" + while [[ "$OK" != "yes" ]] && [[ "$OK" != "no" ]] ; do + echononl "Wrong entry! - repeat [yes/no]: " + read OK + done + [[ $OK = "yes" ]] || fatal "Abbruch durch User" fi else echo_skipped @@ -1650,6 +1868,16 @@ if [ "$?" = "0" ]; then echo_ok else echo_failed + error "Generating MySQL SSL Certificate and RSA Key failed" + + echononl "continue anyway [yes/no]: " + read OK + OK="$(echo "$OK" | tr '[:upper:]' '[:lower:]')" + while [[ "$OK" != "yes" ]] && [[ "$OK" != "no" ]] ; do + echononl "Wrong entry! - repeat [yes/nno]: " + read OK + done + [[ $OK = "yes" ]] || fatal "Abbruch durch User" fi echononl "Setze Besitzer/Gruppe für das Datenbankverzeichnis.." @@ -1663,6 +1891,15 @@ if [ "$?" = "0" ]; then else echo_failed error Konnte Besitzer/Gruppe für das Datenbankverzeichnis $MYSQL_DATA_DIR nicht setzen.. + + echononl "continue anyway [yes/no]: " + read OK + OK="$(echo "$OK" | tr '[:upper:]' '[:lower:]')" + while [[ "$OK" != "yes" ]] && [[ "$OK" != "no" ]] ; do + echononl "Wrong entry! - repeat [yes/nno]: " + read OK + done + [[ $OK = "yes" ]] || fatal "Abbruch durch User" fi @@ -1678,6 +1915,15 @@ if [ -f ${MYSQL_INSTALL_DIR}/my.cnf ]; then else echo_failed error Konnte Konfigurationsdatei ${MYSQL_INSTALL_DIR}/my.cnf nicht sichern.. + + echononl "continue anyway [yes/no]: " + read OK + OK="$(echo "$OK" | tr '[:upper:]' '[:lower:]')" + while [[ "$OK" != "yes" ]] && [[ "$OK" != "no" ]] ; do + echononl "Wrong entry! - repeat [yes/nno]: " + read OK + done + [[ $OK = "yes" ]] || fatal "Abbruch durch User" fi else echo_skipped @@ -1690,17 +1936,55 @@ if $UPDATE_MYSQL ; then echo "" >> ${logdir}/main.log echo "## - Copy 'my.cnf from old installation to the new one" >> ${logdir}/main.log echo "## -" >> ${logdir}/main.log - echo "cp -a \"$(realpath ${MYSQL_CUR_INSTALL_DIR}/my.cnf)\" \"${MYSQL_INSTALL_DIR}/my.cnf\"" >> ${logdir}/main.log - cp -a "$(realpath ${MYSQL_CUR_INSTALL_DIR}/my.cnf)" "${MYSQL_INSTALL_DIR}/my.cnf" >> ${logdir}/main.log - if [ "$?" = "0" ]; then - echo_ok + echo "" >> ${logdir}/main.log + if [[ "$CURRENT_VERSION" = "$MYSQL_VERSION" ]] ; then + echo "cp -a \"$(realpath ${MYSQL_CUR_INSTALL_DIR}).${_backup_date}/my.cnf\" \"${MYSQL_INSTALL_DIR}/my.cnf\"" \ + >> ${logdir}/main.log + cp -a "$(realpath ${MYSQL_CUR_INSTALL_DIR}).${_backup_date}/my.cnf" "${MYSQL_INSTALL_DIR}/my.cnf" \ + >> ${logdir}/main.log 2>&1 + if [ "$?" = "0" ]; then + echo_ok + else + echo_failed + _new_cnf_needed=true + error "Konnte Konfigurationsdatei 'my.cnf' nicht vom alten in das neue Installations Verz.kopieren.." + + echononl "continue anyway [yes/no]: " + read OK + OK="$(echo "$OK" | tr '[:upper:]' '[:lower:]')" + while [[ "$OK" != "yes" ]] && [[ "$OK" != "no" ]] ; do + echononl "Wrong entry! - repeat [yes/nno]: " + read OK + done + [[ $OK = "yes" ]] || fatal "Abbruch durch User" + fi else - echo_failed - _new_cnf_needed=true - error "Konnte Konfigurationsdatei 'my.cnf' nicht vom alten in das neue Installations Verz.kopieren.." - fi + echo "cp -a \"$(realpath ${MYSQL_CUR_INSTALL_DIR})/my.cnf\" \"${MYSQL_INSTALL_DIR}/my.cnf\"" \ + >> ${logdir}/main.log + cp -a "$(realpath ${MYSQL_CUR_INSTALL_DIR})/my.cnf" "${MYSQL_INSTALL_DIR}/my.cnf" \ + >> ${logdir}/main.log 2>&1 + if [ "$?" = "0" ]; then + echo_ok + else + echo_failed + _new_cnf_needed=true + error "Konnte Konfigurationsdatei 'my.cnf' nicht vom alten in das neue Installations Verz.kopieren.." + + echononl "continue anyway [yes/no]: " + read OK + OK="$(echo "$OK" | tr '[:upper:]' '[:lower:]')" + while [[ "$OK" != "yes" ]] && [[ "$OK" != "no" ]] ; do + echononl "Wrong entry! - repeat [yes/nno]: " + read OK + done + [[ $OK = "yes" ]] || fatal "Abbruch durch User" + fi + fi # if [[ "$CURRENT_VERSION" = "$MYSQL_VERSION" ]] else echo_skipped + fi # if [[ -f "${MYSQL_CUR_INSTALL_DIR}/my.cnf" ]] + + if [[ ! -f "${MYSQL_INSTALL_DIR}/my.cnf" ]] ; then _new_cnf_needed=true fi fi @@ -1709,6 +1993,8 @@ if ! $UPDATE_MYSQL || $_new_cnf_needed ; then echononl "Erstelle Konfigurationsdatei ${MYSQL_INSTALL_DIR}/my.cnf.." echo "" >> ${logdir}/main.log + echo "## - Erstelle Konfigurationsdatei ${MYSQL_INSTALL_DIR}/my.cnf" >> ${logdir}/main.log + echo "## -" >> ${logdir}/main.log echo "_number_cpus=`grep "^processor" /proc/cpuinfo | sort -u | wc -l`" >> ${logdir}/main.log _number_cpus=`grep "^processor" /proc/cpuinfo | sort -u | wc -l` @@ -1719,6 +2005,809 @@ if ! $UPDATE_MYSQL || $_new_cnf_needed ; then echo "" >> ${logdir}/main.log echo "\$MYSQL_THREAD_CONCURRENCY = $MYSQL_THREAD_CONCURRENCY" >> ${logdir}/main.log + echo "cat << EOF > ${MYSQL_INSTALL_DIR}/my.cnf +# Example MySQL config file for very large systems. +# +# This is for a large system with memory of 1G-2G where the system runs mainly +# MySQL. +# +# You can copy this file to +# /etc/my.cnf to set global options, +# mysql-data-dir/my.cnf to set server-specific options (in this +# installation this directory is /var/lib/mysql) or +# ~/.my.cnf to set user-specific options. +# +# In this file, you can use all long options that a program supports. +# If you want to know which options a program supports, run the program +# with the \"--help\" option. + +# The following options will be passed to all MySQL clients +[client] +port = $MYSQL_PORT +socket = $MYSQL_UNIX_SOCKET + +# Here follows entries for some specific programs +# The following values assume you have at least 32M ram + +# This was formally known as [safe_mysqld]. Both versions are currently parsed. +[mysqld_safe] +socket = $MYSQL_UNIX_SOCKET +nice = 0 + +open-files-limit = $(ulimit -Hn) +innodb_open_files = $(ulimit -Hn) + + +# The MySQL server +[mysqld] +port = $MYSQL_PORT +socket = $MYSQL_UNIX_SOCKET + + +## - secure-file-priv +## - +## - This variable is used to limit the effect of data import and export operations, +## - such as those performed by the LOAD DATA and SELECT ... INTO OUTFILE statements +## - and the LOAD_FILE() function. These operations are permitted only to users who +## - have the FILE privilege. +## - +## - i.e.: GRANT FILE on *.* to piwik@localhost +## - +## - secure_file_priv may be set as follows: +## - +## - - If empty, the variable has no effect. (That means no restrictions). +## - This is not a secure setting. +## - - If set to the name of a directory, the server limits import and export +## - operations to work only with files in that directory. The directory +## - must exist; the server will not create it. +## - - If set to NULL, the server disables import and export operations. +## - This value is permitted as of MySQL 5.7.6. +## - +## - Since MySQL v 5.7.16 the default 'secure_file_priv' value has changed +## - +## - NULL (>= MySQL 5.7.16), empty (< MySQL 5.7.16) +## - +## - We use empty (\"\") +## - +## - Note: +## - We changed the default to empty (\"\") while building from source +## - using CMake option (-DINSTALL_SECURE_FILE_PRIVDIR=\"\"). So you can ignore +## - this option. +## - +#secure-file-priv = \"\" + + +## - local-infile +## - +## - This variable controls server-side LOCAL capability for LOAD DATA statements. +## - Depending on the local_infile setting, the server refuses or permits local data +## - loading by clients that have LOCAL enabled on the client side. +## - +## - You can check your 'local-infile' setting on mysql prompt: +## - +## - SHOW GLOBAL VARIABLES LIKE 'local_infile'; +## - +#local-infile = 1 + + +## - skip_external_locking +## - +## - Affects only MyISAM table access. +## - +## - This is OFF if mysqld uses external locking (system locking), +## - ON if external locking is disabled. +## - +## - Default: ON +## - +skip-external-locking + + +# Don't listen on a TCP/IP port at all. This can be a security enhancement, +# if all processes that need to connect to mysqld run on the same host. +# All interaction with mysqld must be made via Unix sockets or named pipes. +# Note that using this option without enabling named pipes on Windows +# (via the "enable-named-pipe" option) will render mysqld useless! +# +#skip-networking + + +# Instead of skip-networking the default is now to listen only on +# localhost which is more compatible and is not less secure. +# +#bind-address = 127.0.0.1 +bind-address = 127.0.0.1 + + +# Replication Master Server (default) +# binary logging is required for replication +#log-bin=mysql-bin + +# required unique id between 1 and 2^32 - 1 +# defaults to 1 if master-host is not set +# but will not function as a master if omitted +server-id = 1 + +# Replication Slave (comment out master section to use this) +# +# To configure this host as a replication slave, you can choose between +# two methods : +# +# 1) Use the CHANGE MASTER TO command (fully described in our manual) - +# the syntax is: +# +# CHANGE MASTER TO MASTER_HOST=, MASTER_PORT=, +# MASTER_USER=, MASTER_PASSWORD= ; +# +# where you replace , , by quoted strings and +# by the master's port number (3306 by default). +# +# Example: +# +# CHANGE MASTER TO MASTER_HOST='125.564.12.1', MASTER_PORT=3306, +# MASTER_USER='joe', MASTER_PASSWORD='secret'; +# +# OR +# +# 2) Set the variables below. However, in case you choose this method, then +# start replication for the first time (even unsuccessfully, for example +# if you mistyped the password in master-password and the slave fails to +# connect), the slave will create a master.info file, and any later +# change in this file to the variables' values below will be ignored and +# overridden by the content of the master.info file, unless you shutdown +# the slave server, delete master.info and restart the slaver server. +# For that reason, you may want to leave the lines below untouched +# (commented) and instead use CHANGE MASTER TO (see above) +# +# required unique id between 2 and 2^32 - 1 +# (and different from the master) +# defaults to 2 if master-host is set +# but will not function as a slave if omitted +#server-id = 2 +# +# The replication master for this slave - required +#master-host = +# +# The username the slave will use for authentication when connecting +# to the master - required +#master-user = +# +# The password the slave will authenticate with when connecting to +# the master - required +#master-password = +# +# The port the master is listening on. +# optional - defaults to 3306 +#master-port = +# +# binary logging - not required for slaves, but recommended +#log-bin=mysql-bin +# +# binary logging format - mixed recommended +#binlog_format=mixed + +# Point the following paths to different dedicated disks +#tmpdir = /tmp/ +#log-update = /path-to-dedicated-directory/hostname + + +## - max_connections +## - +## - Die zulässige Anzahl nebenläufiger Clientverbindungen. Wenn dieser Wert erhöht +## - wird, erhöht sich auch die Anzahl der Dateideskriptoren, die mysqld benötigt. +## - +## - Vorgabewert ist 100 +## - +#max_connections = 300 + + +## - explicit_defaults_for_timestamp +## - +## - This variable was added in MySQL 5.6.6 +## - +## - In MySQL, the TIMESTAMP data type differs in nonstandard ways +## - from other data types. See MySQL Dokumentation. +## - +## - [Warning] TIMESTAMP with implicit DEFAULT value is deprecated. +## - Please use --explicit_defaults_for_timestamp server option (see +## - documentation for more details). +## - +## - As indicated by the warning, to turn off the nonstandard behaviors, +## - enable the new . +## - +explicit_defaults_for_timestamp = TRUE + + +## - MySQL Fehlermeldungen +## - +## - !! Notice +## - erst ab für mysql 5.5.x +## - +## - lc-messages=de_DE +## - lc-messages-dir=$(dirname $MYSQL_INSTALL_DIR)/mysql/share +## - +## - bis 5.1.x +## - +## - language=$(dirname $MYSQL_INSTALL_DIR)/mysql/share/german +## - + + +## - low-priority-updates +## - +## - Give table-modifying operations (INSERT, REPLACE, DELETE, +## - UPDATE) lower priority than selects. +## - +## - +low-priority-updates = 1 + + +## - concurrent_insert +## - +## - If activated (1 or AUTO, the default), MySQL permits INSERT +## - and SELECT statements to run concurrently for MyISAM tables +## - that have no free blocks in the middle of the data file. +## - +## - If set to 2 or ALWAYS, MySQL enables concurrent inserts for +## - all MyISAM tables, even those that have holes. For a table with +## - a hole, new rows are inserted at the end of the table if it is +## - in use by another thread. Otherwise, MySQL acquires a normal +## - write lock and inserts the row into the hole. +## - +concurrent_insert = 2 + + +## - open-files-limit +## - +## - put the following lines into /etc/security/limits.conf +## - +## - @staff hard nofile 32768 +## - root hard nofile 32768 +## - +## - see also http://linux-vserver.org/Ulimit_Nofiles +## - +open-files-limit = $(ulimit -Hn) +innodb_open_files = $(ulimit -Hn) + + +## ------------------------- +## InnoDB specific variables + +## - innodb_file_per_table +## - +## - When innodb_file_per_table is enabled (the default in 5.6.6 and higher), +## - InnoDB stores the data and indexes for each newly created table in a +## - separate .ibd file, rather than in the system tablespace. +## - +innodb_file_per_table + +## - innodb_data_home_dir +## - +## - Default: MySQL data directory +## - +#innodb_data_home_dir = /data/mysql + +#innodb_data_file_path = ibdata1:2000M;ibdata2:10M:autoextend + +## - innodb_log_group_home_dir +## - +## - The directory path to the InnoDB redo log files, whose number +## - is specified by innodb_log_files_in_group. +## - +## - If you do not specify any InnoDB log variables, the default is +## - to create two files named ib_logfile0 and ib_logfile1 in the MySQL +## - data directory. Their size is given by the size of the +## - innodb_log_file_size system variable. +## - +#innodb_log_group_home_dir = /var/lib/mysql/ + +## - innodb_buffer_pool_size +## - +## - The size in bytes of the buffer pool, the memory area where InnoDB +## - caches table and index data. +## - +## - You can set .._buffer_pool_size up to 50 - 80 % +## - of RAM but beware of setting memory usage too high +## - +## - Note: +## - When the size of the buffer pool is greater than 1GB, setting +## - innodb_buffer_pool_instances to a value greater than 1 can improve +## - the scalability on a busy server. +## - +## - default: 134217728 (128M) +## - +#innodb_buffer_pool_size = 384M +#innodb_buffer_pool_size = 1024M + + +## - innodb_additional_mem_pool_size +## - +## - The size in bytes of a memory pool InnoDB uses to store data dictionary +## - information and other internal data structures. +## - +## - Default: 8388608 (8M) +## - +#innodb_additional_mem_pool_size = 20M +#innodb_additional_mem_pool_size = 40M + + +## - innodb_buffer_pool_instances +## - +## - The number of regions that the InnoDB buffer pool is divided into. +## - +## - Note: +## - For systems with buffer pools in the multi-gigabyte range, dividing +## - the buffer pool into separate instances can improve concurrency, by +## - reducing contention as different threads read and write to cached pages. +## - +## - Default: 1 +## - +#innodb_buffer_pool_instances = 1 + + +## - innodb_log_file_size +## - +## - The size in bytes of each log file in a log group. +## - +## - Default: 5242880 (5M) +## - +## (Set .._log_file_size to 25 % of buffer pool size) +## - +#innodb_log_file_size = 100M +#innodb_log_file_size = 256M + +## - innodb_log_buffer_size +## - +## - The size in bytes of the buffer that InnoDB uses to write to the +## - log files on disk. +## - +## - Default: 8388608 (8M) +## - +#innodb_log_buffer_size = 8M +#innodb_log_buffer_size = 32M + +## - innodb_flush_log_at_trx_commit +## - +## - Controls the balance between strict ACID compliance for commit +## - operations, and higher performance that is possible when +## - commit-related I/O operations are rearranged and done in batches. +## - You can achieve better performance by changing the default value, +## - but then you can lose up to one second worth of transactions in a crash. +## - +## - In case of extrem slowly restores set +## - +## - innodb_flush_log_at_trx_commit = 2 +## - innodb_log_file_size = 256M +## - +## - Also try to add (befor DROP/CREATE/INSET Statements) to the dumpfile: +## - +## - ... +## - SET FOREIGN_KEY_CHECKS=0; +## - SET unique_checks=0; +## - SET AUTOCOMMIT=0; +## - +## - DROP TABLE IF EXISTS.. +## - ... +## - +#innodb_flush_log_at_trx_commit = 1 +#innodb_flush_log_at_trx_commit = 2 + +## - innodb_lock_wait_timeout +## - +## - The length of time in seconds an InnoDB transaction waits for a row +## - lock before giving up. +## - +## - Default: 50 +## - +#innodb_lock_wait_timeout = 50 + +## InnoDB specific variables +## ------------------------- + + +## - sort_buffer_size +## - +## - Each session that needs to do a sort allocates a buffer of this size. +## - sort_buffer_size is not specific to any storage engine and applies +## - in a general manner for optimization. +## - +## - Default: 2097152 (2M) +## - +sort_buffer_size = 2M + + +## - key_buffer_size +## - +## - key_buffer_size is a MyISAM parameter ! +## - +## - Index blocks for MyISAM tables are buffered and are shared by all threads. +## - key_buffer_size is the size of the buffer used for index blocks. The key +## - buffer is also known as the key cache. +## - +## - Default: 8388608 (8M) +## - +key_buffer_size = 384M + + +## - read_buffer_size +## - +## - Each thread that does a sequential scan for a MyISAM table allocates +## - a buffer of this size (in bytes) for each table it scans. If you do +## - many sequential scans, you might want to increase this value. +## - +## - Default: 131072 (128K) +## - +read_buffer_size = 2M + +## - read_rnd_buffer_size +## - +## - This variable is used for reads from MyISAM tables, and, for any +## - storage engine, for Multi-Range Read optimization. +## - +## - Default: 262144 (256K) +## - +read_rnd_buffer_size = 8M + + +## - myisam_sort_buffer_size +## - +## - The size of the buffer that is allocated when sorting MyISAM indexes +## - during a REPAIR TABLE or when creating indexes with CREATE INDEX or +## - ALTER TABLE. +## - +## - Default: 8388608 (8M) +## - +myisam_sort_buffer_size = 64M + + +## - max_allowed_packet +## - +## - The maximum size of one packet or any generated/intermediate string, or +## - any parameter sent by the mysql_stmt_send_long_data() C API function. +## +## - Default: 4MB (MySQL 5.6.6), 1MB before that. +## - +#max_allowed_packet = 4M +max_allowed_packet = 32M + + +## - table_open_cache +## - +## - The number of open tables for all threads. Increasing this value +## - increases the number of file descriptors that mysqld requires. +## - +## - You can check whether you need to increase the table cache by checking +## - the Opened_tables status variable. If the value of Opened_tables is large +## - and you do not use FLUSH TABLES often (which just forces all tables to be +## - closed and reopened), then you should increase the value of the +## - table_open_cache variable. +## - +table_open_cache = 512 + +## - table_definition_cache +## - +## - The number of table definitions (from .frm files) that can be stored +## - in the definition cache. +## - +## - Default: (400 + (table_open_cache / 2) since 5.6.8, 400 before +## - +#table_definition_cache = 1680 + +## - max_connect_errors +## - +## - Default: 100 (5.6.6), 10 (before) +## - +max_connect_errors = 999999 + +## - thread_concurrency +## - +## - NOTE: +## - This variable is specific to Solaris 8 and earlier systems. +## - +## - This variable is deprecated as of MySQL 5.6.1 and is removed in MySQL 5.7. +## - You should remove this from MySQL configuration files whenever you see it +## - unless they are for Solaris 8 or earlier +## - +## - (Try number of CPU's*2 for thread_concurrency) +## - +#thread_concurrency = 16 + +## - thread_cache_size +## - +## - How many threads the server should cache for reuse. When a client +## - disconnects, the client's threads are put in the cache if there are +## - fewer than thread_cache_size threads there. +## - +## - Default: 8 + (max_connections / 100) (5.6.8) , 0 (before) +## - +thread_cache_size = 8 + +## - thread_stack +## - +## - The stack size for each thread. Many of the limits detected by +## - the crash-me test are dependent on this value. +## - +## - The default of 192KB (256KB for 64-bit systems) is large enough +## - for normal operation. If the thread stack size is too small, it +## - limits the complexity of the SQL statements that the server can handle, +## - the recursion depth of stored procedures, and other memory-consuming +## - actions. +## - Default: 262144 (256K) +## - +thread_stack = 262144 + + +## - Unbenutze Datenbank Engines deaktivieren +## - + +## - skip-innodb +## - +## - Deaktiviert die Unterstützung für InnoDB +## - +## - Sincs version 5.5, you have to set default-storage-engine +## - to MyISAM, if using skip-innodb +## - +#default-storage-engine=MyISAM +#skip-innodb + + +## - log-error +## - +## - Log errors and startup messages to this file. If you omit the file +## - name, MySQL uses host_name.err. If the file name has no extension, +## - the server adds an extension of .err. +## - +log-error = $_mysql_error_log + + +## - Query Log +## - +#general-log = on +#general_log_file = $_mysql_log + + +## - ft_min_word_len +## - +## - Die minimale Länge des Wortes, das in einem FULLTEXT-Index enthalten sein darf. +## - +## - Notice! +## - if you set +## - [mysqld] +## - ft_min_word_len=3 +## - +## - you should also set +## - [myisamchk] +## - ft_min_word_len=3 +## - +## - +## - Vorgabewert ist 4 +#ft_min_word_len = 3 + +## - ft_stopword_file +## - +## - Datei, aus der die Liste der Stoppwörter für die Volltextsuche ausgelesen wird. +## - Es werden alle Wörter aus der Datei verwendet; Kommentare hingegen werden nicht +## - berücksichtigt. Standardmäßig wird eine eingebaute Liste mit Stoppwörtern (wie +## - in der Datei myisam/ft_static.c definiert) verwendet. Wird diesee Variable auf den +## - Leer-String gesetzt (''), wird die Ausfilterung von Stoppwörtern deaktiviert. +## - +## - Hinweis: Wird diese Variable geändern oder den Inhalt der Stoppwortdatei selbst, +## - müssen die FULLTEXT-Indizes neu erstellt werden (REPAIR TABLE tbl_name QUICK. ). +## - +#ft_stopword_file = /usr/local/mysql/stopwords_utf8_iso8859-15.txt + + + +## ------------- +## - query cache + + +## - query_cache_type +## - +## - 0 : verhindert das Speichern von Abfragen im und +## - das Abrufen aus dem Cache +## - 1 : gestattet das Speichern von Abfragen im Cache. +## - Ausgenommen sind Anweisungen, die mit +## - SELECT SQL_NO_CACHE beginnen. +## - 2 : speichert nur diejenigen Anweisungen im Cache, +## - die mit SELECT SQL_CACHE beginnen. +query_cache_type = 1 + + +## - query_cache_limit +## - +## - Gibt die maximale Größe einzelner Abfrageergebnisse an, die im +## - Cache gespeichert werden können. +## - +## - Vorgeabewert ist 1Mbyte +## - +query_cache_limit = 4M + + +## - query_cache_min_res_unit +## - +## - Die im Abfrage-Cache abgelegten Ergebnisse, werden nicht am Stück +## - verwaltet. Der Abfrage-Cache reserviert Blöcke zur Speicherung dieser +## - Daten nach Bedarf, d. h. wenn ein Block voll ist, wird der nächste +## - zugewiesen. Da der Speicherreservierungsvorgang (in zeitlicher Hinsicht) +## - aufwändig ist, reserviert der Abfrage-Cache die Blöcke mit einer +## - Mindestgröße, die durch die Systemvariable query_cache_min_res_unit +## - festgelegt wird. Wird eine Abfrage ausgeführt, dann wird der letzte +## - Ergebnisblock auf die tatsächliche Datengröße zugeschnitten, sodass +## - unbenutzter Speicher freigegeben wird. +## - +## - Siehe auch http://dev.mysql.com/doc/refman/5.1/de/query-cache-configuration.html +## - +## - Vorgabewert ist 4Kbyte +## - +query_cache_min_res_unit = 8K + + +## - query_cache_size +## - +## - Die Größe des Abfrage-Caches. +## - +## - Wird query_cache_size auf einen Wert größer Null gesetzt, so ist zu beachten, +## - dass der Abfrage-Cache eine Mindestgröße von ca. 40 Kbyte benötigt, um seine +## - Strukturen zuzuweisen. (Der exakte Wert hängt von der Systemarchitektur ab.) +## - Wird der Wert zu niedrig angesetzt, wird eine Warnung ausgegeben. +## - +## - Vorgabewert ist 0, d. h. der Abfrage-Cache ist vorgabeseitig deaktiviert. +## - +#query_cache_size = 32M +query_cache_size = 128M + +## - query cache +## ------------- + + +## -------------- +## - slow queries + +## - slow_query_log +## - +## - Gibt an, ob das Logging für langsame Abfragen eingeschaltet (1 oder ON) +## - bzw ausgeschaltet (0 oder OFF) ist. +## - +## - Vorgabewert ist 0 oder OFF +## - +slow_query_log = 1 + + +## - long_query_time +## - +## - Wenn eine Abfrage länger dauert als durch diese Variable (in Sekunden) angegeben, +## - erhöht der Server die Statusvariable Slow_queries entsprechend. Wird die Option +## - --log-slow-queries verwendet, wird die Abfrage in der Logdatei für langsame Abfragen +## - protokolliert. Dieser Wert wird als Echtzeit (nicht als Prozessorzeit) gemessen, d. h. +## - eine Abfrage, die bei einem System mit geringer Belastung den Schwellwert +## - unterschreitet, kann bei einem stark belasteten System bereits darüber liegen. +## - Der Mindestwert ist 1. +## - +## - Vorgabewert ist 10 +## - +long_query_time = 1 + + +## - slow_query_log_file +## - +## - Name der Logdatei, in die langsame Abfragen gespeichert werden. +## - +## - Vorgabewert ist -slow.log +## - +slow_query_log_file = $_mysql_slow_query_log + + +## - log-queries-not-using-indexes +## - +## - Gibt an, ob Abfragen, die keine Indizes benutzen in der Logdatei +## - für langsame Abfragen mitgespeichert werden sollen. +## - +## - Vorgabewert ist 0 +## - +#log_queries_not_using_indexes = 1 +log_queries_not_using_indexes = 0 + +## - slow queries +## -------------- + +## - join_buffer_size +## - +## - Die Größe des Puffers, der für Joins benutzt wird, die keine Indizes verwenden +## - und deswegen vollständige Tabellenscans durchführen. Normalerweise besteht die +## - beste Möglichkeit der Realisierung schneller Joins darin, Indizes hinzuzufügen. +## - Erhöhen Sie den Wert von join_buffer_size, um einen schnelleren vollständigen +## - Join zu implementieren, wenn das Hinzufügen von Indizes nicht möglich ist. Für +## - jeden vollständigen Join zwischen zwei Tabellen wird ein Join-Puffer hinzugefügt. +## - Für einen komplexen Join zwischen mehreren Tabellen, für den Indizes nicht verwendet +## - werden, sind unter Umständen mehrere Join-Puffer erforderlich. +## - +## - Wird die Option --log-slow-queries (ON) verwendet, werden Abfragen, die keine +## - Indizes verwenden, in das Log für langsame Abfragen geschrieben. +## - +## - Vorgabewert ist 128K +## - +#join_buffer_size = 384K + + + +## - max_heap_table_size +## - +## - Diese Variable bestimmt die maximale Größe, auf die MEMORY-Tabellen anwachsen dürfen. +## - Der Wert der Variable wird zur Berechnung von MAX_ROWS-Werte für MEMORY-Tabellen +## - verwendet. Die Einstellung der Variable hat keine Auswirkungen auf bereits vorhandene +## - MEMORY-Tabellen, sofern diese nicht mit einer Anweisung wie CREATE TABLE neu erstellt +## - oder mit ALTER TABLE oder TRUNCATE TABLE modifiziert werden. +## - +## - Vorgabewert ist 16Mbyte +## - +#max_heap_table_size = 96M + + +## - tmp_table_size +## - +## - Überschreitet eine temporäre Tabelle im Arbeitsspeicher diese Größe, wandelt MySQL +## - sie automatisch in eine MyISAM-Tabelle auf der Festplatte um. +## - +## - Werden viele erweiterte GROUP-BY-Anfragen ausgeführt (und ist genügend Speicher +## - vorhanden), so sollte diese Variable erhöht werden. +## +## - Default: 16777216 (16M) +## - +## - Note: +## - Effective in-memory tmp_table_size is limited to max_heap_table_size. +## - +#tmp_table_size = 96M + + +## - angepasste Einstellungen +## ------------------------------------------ + + +[mysqldump] +quick +max_allowed_packet = 32M + +[mysql] +no-auto-rehash +# Remove the next comment character if you are not familiar with SQL +#safe-updates +local-infile = 1 + +[myisamchk] +key_buffer_size = 256M +sort_buffer_size = 256M +read_buffer = 2M +write_buffer = 2M + + +## ------------------------------------------ +## - angepasste Einstellungen + +## - ft_min_word_len +## - +## - Die minimale Länge des Wortes, das in einem FULLTEXT-Index enthalten sein darf. +## - +## - Notice! +## - if you set +## - [mysqld] +## - ft_min_word_len=3 +## - +## - you should also set +## - [myisamchk] +## - ft_min_word_len=3 +## - +## - +## - Vorgabewert ist 4 +ft_min_word_len = 3 + +## - angepasste Einstellungen +## ------------------------------------------ + + +[mysqlhotcopy] +interactive-timeout + +EOF" >> ${logdir}/main.log + cat << EOF > ${MYSQL_INSTALL_DIR}/my.cnf # Example MySQL config file for very large systems. # @@ -1748,8 +2837,8 @@ socket = $MYSQL_UNIX_SOCKET socket = $MYSQL_UNIX_SOCKET nice = 0 -open-files-limit = `ulimit -Hn` -innodb_open_files = `ulimit -Hn` +open-files-limit = $(ulimit -Hn) +innodb_open_files = $(ulimit -Hn) # The MySQL server @@ -1937,11 +3026,11 @@ explicit_defaults_for_timestamp = TRUE ## - erst ab für mysql 5.5.x ## - ## - lc-messages=de_DE -## - lc-messages-dir=`dirname $MYSQL_INSTALL_DIR`/mysql/share +## - lc-messages-dir=$(dirname $MYSQL_INSTALL_DIR)/mysql/share ## - ## - bis 5.1.x ## - -## - language=`dirname $MYSQL_INSTALL_DIR`/mysql/share/german +## - language=$(dirname $MYSQL_INSTALL_DIR)/mysql/share/german ## - @@ -1978,8 +3067,8 @@ concurrent_insert = 2 ## - ## - see also http://linux-vserver.org/Ulimit_Nofiles ## - -open-files-limit = `ulimit -Hn` -innodb_open_files = `ulimit -Hn` +open-files-limit = $(ulimit -Hn) +innodb_open_files = $(ulimit -Hn) ## ------------------------- @@ -2130,7 +3219,7 @@ sort_buffer_size = 2M ## - key_buffer_size ## - -## - key_buffer_size" is a MyISAM parameter ! +## - key_buffer_size is a MyISAM parameter ## - ## - Index blocks for MyISAM tables are buffered and are shared by all threads. ## - key_buffer_size is the size of the buffer used for index blocks. The key @@ -2530,10 +3619,13 @@ EOF fi -echononl "Kopiere \"stopwords_utf8_iso8859-15.txt\" -> ${MYSQL_INSTALL_DIR}.." +echononl "Kopiere 'stopwords_utf8_iso8859-15.txt' -> ${MYSQL_INSTALL_DIR}.." if [ -f "${MYSQL_SRC_BASE_DIR}/stopwords_utf8_iso8859-15.txt" ];then echo "" >> ${logdir}/main.log + echo "## - Kopiere 'stopwords_utf8_iso8859-15.txt' -> ${MYSQL_INSTALL_DIR}" >> ${logdir}/main.log + echo "## -" >> ${logdir}/main.log echo "cp ${MYSQL_SRC_BASE_DIR}/stopwords_utf8_iso8859-15.txt ${MYSQL_INSTALL_DIR}" >> ${logdir}/main.log + cp ${MYSQL_SRC_BASE_DIR}/stopwords_utf8_iso8859-15.txt ${MYSQL_INSTALL_DIR} if [ "$?" = "0" ]; then echo_ok @@ -2541,6 +3633,8 @@ if [ -f "${MYSQL_SRC_BASE_DIR}/stopwords_utf8_iso8859-15.txt" ];then echononl "Aktiviere Stopword Datei.." if ! grep -q -E "^\s*ft_stopword_file.*" "${MYSQL_INSTALL_DIR}/my.cnf" 2> /dev/null ; then echo "" >> ${logdir}/main.log + echo "## - Aktiviere Stopword Datei" >> ${logdir}/main.log + echo "## -" >> ${logdir}/main.log echo "perl -i -n -p -e \"s/^(\s*#\s*)(ft_stopword_file.*)/#\1\2\n\2/\" /usr/local/mysql/my.cnf" >> ${logdir}/main.log perl -i -n -p -e "s/^(\s*#\s*)(ft_stopword_file.*)/#\1\2\n\2/" /usr/local/mysql/my.cnf >> ${logdir}/main.log 2>&1 if [ "$?" = "0" ]; then @@ -2562,61 +3656,51 @@ else warn "Konnte ${MYSQL_SRC_BASE_DIR}/stopwords_utf8_iso8859-15.txt finden." fi -#echononl "Kopiere Startscript nach /etc/init.d/mysql.server.." -#echo "" >> ${logdir}/main.log -#echo "cp -a ${MYSQL_INSTALL_DIR}/support-files/mysql.server /etc/init.d/mysql.server" >> ${logdir}/main.log -#cp -a ${MYSQL_INSTALL_DIR}/support-files/mysql.server /etc/init.d/mysql.server >> ${logdir}/main.log 2>&1 -#if [ "$?" = "0" ]; then -# echo_ok -#else -# echo_failed -# fatal Konnte Startscript nicht nach /etc/init.d/mysql.server kopieren.. -#fi - -#echononl "Ersetze im Startscript: \"mysql-${_MYSQL_VERSION}\" durch \"mysql\".." -#echo "perl -i -n -p -e \"s/mysql-${_MYSQL_VERSION}/mysql/g\" /etc/init.d/mysql.server" >> ${logdir}/main.log -#perl -i -n -p -e "s/mysql-${_MYSQL_VERSION}/mysql/g" /etc/init.d/mysql.server >> ${logdir}/main.log 2>&1 -#if [ "$?" = "0" ]; then -# echo_ok -#else -# echo_failed -#fi -# -#echo "" >> ${logdir}/main.log -#echo "chown root:root /etc/init.d/mysql.server" >> ${logdir}/main.log -#chown root:root /etc/init.d/mysql.server >> ${logdir}/main.log 2>&1 -# -#echo "" >> ${logdir}/main.log -#echo "chmod 755 /etc/init.d/mysql.server" >> ${logdir}/main.log -#chmod 755 /etc/init.d/mysql.server >> ${logdir}/main.log 2>&1 -if ! $UPDATE_MYSQL ; then +if $INSTALL_SYSTEMD_SERVICE ; then - echononl "Starte MySQL Server beim Booten" + echononl "Kopiere Service File nach '/etc/systemd/system'.." echo "" >> ${logdir}/main.log - if $SYSTEMD_EXISTS ; then - echo "systemctl enable mysql.server" >> ${logdir}/main.log - systemctl enable mysql.server >> ${logdir}/main.log 2>&1 + echo "## - Kopiere Service File nach '/etc/systemd/system'" >> ${logdir}/main.log + echo "## -" >> ${logdir}/main.log + echo "cp \"${MYSQL_INSTALL_DIR}/lib/systemd/system/mysqld.service\" /etc/systemd/system/" >> ${logdir}/main.log + cp "${MYSQL_INSTALL_DIR}/lib/systemd/system/mysqld.service" /etc/systemd/system/ >> ${logdir}/main.log 2>&1 + + if [[ $? -eq 0 ]]; then + echo_ok else - echo "update-rc.d mysql.server defaults" >> ${logdir}/main.log - update-rc.d mysql.server defaults >> ${logdir}/main.log 2>&1 + echo_failed + error "Kopieren Service File nach '/etc/systemd/system' failed!" + + echononl "continue anyway [yes/no]: " + read OK + OK="$(echo "$OK" | tr '[:upper:]' '[:lower:]')" + while [[ "$OK" != "yes" ]] && [[ "$OK" != "no" ]] ; do + echononl "Wrong entry! - repeat [yes/nno]: " + read OK + done + [[ $OK = "yes" ]] || fatal "Abbruch durch User" fi + + + echononl "Aktiviere den MySQL Datenbank Service für den automatischem Start.." + echo "" >> ${logdir}/main.log + echo "## - Aktiviere den MySQL Datenban Service für den automatischem Start" >> ${logdir}/main.log + echo "## -" >> ${logdir}/main.log + echo "systemctl enable $MYSQL_SERVICE_FILE" >> ${logdir}/main.log + systemctl enable $MYSQL_SERVICE_FILE >> ${logdir}/main.log 2>&1 if [ "$?" = "0" ]; then echo_ok else echo_failed - if $SYSTEMD_EXISTS ; then - error "Konnte \"mysql.server\" im systemd nicht enablen.." - else - error "Konnte MySQL Init Script Links (autom. boot) nicht erstellen.." - fi + error "Aktivieren des MySQL Datenbank Service für den automatischem Start fehgeschalgen!" fi -fi -echononl "Run 'systemctl daemon-reload' to reload units." -if $SYSTEMD_EXISTS ; then + echononl "Run 'systemctl daemon-reload' to reload units." echo "" >> ${logdir}/main.log + echo "## - Run 'systemctl daemon-reload' to reload units." >> ${logdir}/main.log + echo "## -" >> ${logdir}/main.log echo "systemctl daemon-reload" >> ${logdir}/main.log systemctl daemon-reload >> ${logdir}/main.log 2>&1 if [ "$?" = "0" ]; then @@ -2625,39 +3709,206 @@ if $SYSTEMD_EXISTS ; then echo_failed error "Run 'systemctl daemon-reload' failed!" fi + + else - echo_skipped + + if [ -h "/etc/init.d/${MYSQL_SYSV_INIT_SCRIPT}" ]; then + echononl "Entferne vorhandenen Symlink \"/etc/init.d/${MYSQL_SYSV_INIT_SCRIPT}\".." + echo "" >> ${logdir}/main.log + echo "## - Entferne vorhandenen Symlink \"/etc/init.d/${MYSQL_SYSV_INIT_SCRIPT}\"" >> ${logdir}/main.log + echo "## -" >> ${logdir}/main.log + echo "rm /etc/init.d/${MYSQL_SYSV_INIT_SCRIPT}" >> ${logdir}/main.log + rm /etc/init.d/${MYSQL_SYSV_INIT_SCRIPT} >> ${logdir}/main.log 2>&1 + if [ "$?" = "0" ]; then + echo_ok + else + echo_failed + error Kann Symlink /etc/init.d/${MYSQL_SYSV_INIT_SCRIPT} nicht entfernen.. + fi + fi + + if [ -f "/etc/init.d/${MYSQL_SYSV_INIT_SCRIPT}" ]; then + echononl "Entferne vorhandenen Datei \"/etc/init.d/${MYSQL_SYSV_INIT_SCRIPT}\".." + echo "" >> ${logdir}/main.log + echo "## - Entferne vorhandenen Datei \"/etc/init.d/${MYSQL_SYSV_INIT_SCRIPT}\"" >> ${logdir}/main.log + echo "## -" >> ${logdir}/main.log + echo "rm /etc/init.d/${MYSQL_SYSV_INIT_SCRIPT}" >> ${logdir}/main.log + rm /etc/init.d/${MYSQL_SYSV_INIT_SCRIPT} >> ${logdir}/main.log 2>&1 + if [ "$?" = "0" ]; then + echo_ok + else + echo_failed + error Kann Datei /etc/init.d/${MYSQL_SYSV_INIT_SCRIPT} nicht entfernen.. + fi + fi + + + echononl "Erstelle Symlink \"/etc/init.d/${MYSQL_SYSV_INIT_SCRIPT}\".." + echo "" >> ${logdir}/main.log + echo "## - Erstelle Symlink \"/etc/init.d/${MYSQL_SYSV_INIT_SCRIPT}\"" >> ${logdir}/main.log + echo "## -" >> ${logdir}/main.log + echo "ln -s \"$(dirname $MYSQL_INSTALL_DIR)/mysql/support-files/${MYSQL_SYSV_INIT_SCRIPT}\" \"/etc/init.d/${MYSQL_SYSV_INIT_SCRIPT}\"" >> ${logdir}/main.log + ln -s "$(dirname $MYSQL_INSTALL_DIR)/mysql/support-files/${MYSQL_SYSV_INIT_SCRIPT}" /etc/init.d/${MYSQL_SYSV_INIT_SCRIPT} >> ${logdir}/main.log 2>&1 + if [ "$?" = "0" ]; then + echo_ok + else + echo_failed + error "Kann Symlink $MYSQL_INSTALL_DIR/support-files/${MYSQL_SYSV_INIT_SCRIPT} --> /etc/init.d/${MYSQL_SYSV_INIT_SCRIPT} nicht erstellen.." + fi + + echononl "Setze ulimit im Startscript.." + echo "" >> ${logdir}/main.log + echo "## - Setze ulimit im Startscript" >> ${logdir}/main.log + echo "## -" >> ${logdir}/main.log + echo "sed -i \"1 s/\(.*\)/\1\n\nulimit -n \\\`ulimit -Hn\\\`\n/\" /etc/init.d/${MYSQL_SYSV_INIT_SCRIPT}" >> ${logdir}/main.log + sed -i "1 s/\(.*\)/\1\n\nulimit -n \`ulimit -Hn\`\n/" $(realpath /etc/init.d/${MYSQL_SYSV_INIT_SCRIPT}) >> ${logdir}/main.log 2>&1 + if [ "$?" = "0" ]; then + echo_ok + else + echo_failed + error "Kann \"ulimit\" im Startscript nicht setzen /etc/init.d/${MYSQL_SYSV_INIT_SCRIPT} nicht setzen.." + fi + + echononl "Aktiviere den MySQL Datenbank Service für den automatischem Start" + echo "" >> ${logdir}/main.log + echo "## - Aktiviere den MySQL Datenbank Service für den automatischem Start" >> ${logdir}/main.log + echo "## -" >> ${logdir}/main.log + if $SYSTEMD_EXISTS ; then + echo "systemctl enable ${MYSQL_SYSV_INIT_SCRIPT}" >> ${logdir}/main.log + systemctl enable ${MYSQL_SYSV_INIT_SCRIPT} >> ${logdir}/main.log 2>&1 + else + echo "update-rc.d ${MYSQL_SYSV_INIT_SCRIPT} defaults" >> ${logdir}/main.log + update-rc.d ${MYSQL_SYSV_INIT_SCRIPT} defaults >> ${logdir}/main.log 2>&1 + fi + if [ "$?" = "0" ]; then + echo_ok + else + echo_failed + if $SYSTEMD_EXISTS ; then + error "Konnte \"${MYSQL_SYSV_INIT_SCRIPT}\" im systemd nicht aktivieren.." + else + error "Konnte MySQL Run Level Links (autom. boot) nicht erstellen.." + fi + fi + + echononl "Run 'systemctl daemon-reload' to reload units." + if $SYSTEMD_EXISTS ; then + echo "" >> ${logdir}/main.log + echo "## - Run 'systemctl daemon-reload' to reload units." >> ${logdir}/main.log + echo "## -" >> ${logdir}/main.log + echo "systemctl daemon-reload" >> ${logdir}/main.log + systemctl daemon-reload >> ${logdir}/main.log 2>&1 + if [ "$?" = "0" ]; then + echo_ok + else + echo_failed + error "Run 'systemctl daemon-reload' failed!" + fi + else + echo_skipped + fi + fi + +## ----- +## - Starte MySQL Datenbank Service +## ----- + +echo "" +echo "" +echo -e "\033[37m\033[1mStarte MySQL Datenbank Service\033[m" +echo "" + +echo "" >> ${logdir}/main.log +echo "" >> ${logdir}/main.log +echo "## -----" >> ${logdir}/main.log +echo "## - Starte MySQL Datenbank Service" >> ${logdir}/main.log +echo "## -----" >> ${logdir}/main.log + echononl "Starte MySQL Datenbankserver.." echo "" >> ${logdir}/main.log -if $SYSTEMD_EXISTS ; then - echo "systemctl start mysql.server" >> ${logdir}/main.log - systemctl start mysql.server >> ${logdir}/main.log 2>&1 +echo "## - Starte MySQL Datenbankserver" >> ${logdir}/main.log +echo "## -" >> ${logdir}/main.log +if $INSTALL_SYSTEMD_SERVICE ; then + echo "systemctl start \"$MYSQL_SERVICE_FILE\"" >> ${logdir}/main.log + systemctl start "$MYSQL_SERVICE_FILE" >> ${logdir}/main.log 2>&1 + if [[ $? -eq 0 ]]; then + echo_ok + else + echo_failed + error Konnte MySQL Datenbankserver nicht starten.. + fi else - echo "/etc/init.d/mysql.server start" >> ${logdir}/main.log - /etc/init.d/mysql.server start >> ${logdir}/main.log 2>&1 -fi -if [ "$?" = "0" ]; then - echo_ok -else - echo_failed - error Konnte MySQL Datenbankserver nicht starten.. + if $SYSTEMD_EXISTS ; then + echo "systemctl start ${MYSQL_SYSV_INIT_SCRIPT}" >> ${logdir}/main.log + systemctl start ${MYSQL_SYSV_INIT_SCRIPT} >> ${logdir}/main.log 2>&1 + else + echo "/etc/init.d/${MYSQL_SYSV_INIT_SCRIPT} start" >> ${logdir}/main.log + /etc/init.d/${MYSQL_SYSV_INIT_SCRIPT} start >> ${logdir}/main.log 2>&1 + fi + if [ "$?" = "0" ]; then + echo_ok + else + echo_failed + error Konnte MySQL Datenbankserver nicht starten.. + fi fi +sleep 2 + + + +## ----- +## - Konfiguration ( Teil 2) MySQL Installation +## ----- + +echo "" +echo "" +echo -e "\033[37m\033[1mKonfiguration (Teil 2) der MySQL $MYSQL_VERSION Installation\033[m" +echo "" + +echo "" >> ${logdir}/main.log +echo "" >> ${logdir}/main.log +echo "## -----" >> ${logdir}/main.log +echo "## - Konfiguration (Teil 2) der MySQL $MYSQL_VERSION Installation" >> ${logdir}/main.log +echo "## -----" >> ${logdir}/main.log + if ! $UPDATE_MYSQL ; then ## - Delete rows with empty 'User' from table mysql.user ## - + echononl "Delete rows with empty 'User' from table mysql.user.." echo "" >> ${logdir}/main.log + echo "## - Delete rows with empty 'User' from table mysql.user" >> ${logdir}/main.log + echo "## - " >> ${logdir}/main.log echo "${MYSQL_INSTALL_DIR}/bin/mysql -uroot mysql -N -s -e \"DELETE FROM user where User = ''\"" >> ${logdir}/main.log ${MYSQL_INSTALL_DIR}/bin/mysql -uroot mysql -N -s -e "DELETE FROM user where User = ''" >> ${logdir}/main.log 2>&1 + if [[ $? -eq 0 ]]; then + echo_ok + else + echo_failed + error "Deleting rows with empty 'User' from table mysql.user failed!" + + echononl "continue anyway [yes/no]: " + read OK + OK="$(echo "$OK" | tr '[:upper:]' '[:lower:]')" + while [[ "$OK" != "yes" ]] && [[ "$OK" != "no" ]] ; do + echononl "Wrong entry! - repeat [yes/nno]: " + read OK + done + [[ $OK = "yes" ]] || fatal "Abbruch durch User" + fi ## - Set root password ## - echononl "Setze root Passwort für den MySQL Zugang" echo "" >> ${logdir}/main.log + echo "## - Setze root Passwort für den MySQL Zugang" >> ${logdir}/main.log + echo "## -" >> ${logdir}/main.log echo "${MYSQL_INSTALL_DIR}/bin/mysql -uroot mysql -N -s -e \"UPDATE user set authentication_string = password('$MYSQL_ROOT_PW')\"" >> ${logdir}/main.log + ${MYSQL_INSTALL_DIR}/bin/mysql -uroot mysql -N -s -e "UPDATE user set authentication_string = password('$MYSQL_ROOT_PW')" \ >> ${logdir}/main.log 2>&1 if [ "$?" = "0" ]; then @@ -2665,12 +3916,23 @@ if ! $UPDATE_MYSQL ; then else echo_failed error Konnte MySQL root Zugang fü den MySQL Server nicht setzen.. + + echononl "continue anyway [yes/no]: " + read OK + OK="$(echo "$OK" | tr '[:upper:]' '[:lower:]')" + while [[ "$OK" != "yes" ]] && [[ "$OK" != "no" ]] ; do + echononl "Wrong entry! - repeat [yes/nno]: " + read OK + done + [[ $OK = "yes" ]] || fatal "Abbruch durch User" fi ## - Flush privileges ## - echononl "Neu Einlesen der Berechtigung (MySQL Server).." echo "" >> ${logdir}/main.log + echo "## - Neu Einlesen der Berechtigung (MySQL Server)" >> ${logdir}/main.log + echo "## -" >> ${logdir}/main.log echo "${MYSQL_INSTALL_DIR}/bin/mysql -uroot mysql -N -s -e \"FLUSH PRIVILEGES\"" >> ${logdir}/main.log ${MYSQL_INSTALL_DIR}/bin/mysql -uroot mysql -N -s -e "FLUSH PRIVILEGES" >> ${logdir}/main.log 2>&1 if [ "$?" = "0" ]; then @@ -2678,14 +3940,25 @@ if ! $UPDATE_MYSQL ; then else echo_failed error Das Laden/Erneuern der Berechtigungen für die MySQL Datenbank ist fehlgeschlagen.. + + echononl "continue anyway [yes/no]: " + read OK + OK="$(echo "$OK" | tr '[:upper:]' '[:lower:]')" + while [[ "$OK" != "yes" ]] && [[ "$OK" != "no" ]] ; do + echononl "Wrong entry! - repeat [yes/nno]: " + read OK + done + [[ $OK = "yes" ]] || fatal "Abbruch durch User" fi else ## - Run mysql_upgrade ## - - echononl "Run \"mysql_upgrade -uroot\" - this may take some (long) time.." + echononl "Run 'mysql_upgrade -uroot' - this may take some (long) time.." echo "" >> ${logdir}/main.log + echo "## - Run 'mysql_upgrade -uroot' - this may take some (long) time" >> ${logdir}/main.log + echo "## -" >> ${logdir}/main.log echo "${MYSQL_INSTALL_DIR}/bin/mysql_upgrade -uroot -p$MYSQL_ROOT_PW" >> ${logdir}/main.log ${MYSQL_INSTALL_DIR}/bin/mysql_upgrade -uroot -p$MYSQL_ROOT_PW >> ${logdir}/main.log 2>&1 ret_val=$? @@ -2693,10 +3966,19 @@ else echo_ok elif [[ $ret_val -eq 2 ]] ; then echo_skipped - warn "Return Code was '2' - it means MySQL is already upgraded to 5.7.20" + warn "Return Code was '2' - it means MySQL is already upgraded to ${MYSQL_VERSION}" else echo_failed error "Script \"mysql_upgrade -uroot\" failed!" + + echononl "continue anyway [yes/no]: " + read OK + OK="$(echo "$OK" | tr '[:upper:]' '[:lower:]')" + while [[ "$OK" != "yes" ]] && [[ "$OK" != "no" ]] ; do + echononl "Wrong entry! - repeat [yes/nno]: " + read OK + done + [[ $OK = "yes" ]] || fatal "Abbruch durch User" fi fi @@ -2707,19 +3989,53 @@ _sys_maint_cnf_needed=false if $UPDATE_MYSQL ; then echononl "Copy 'sys-maint.cnf from old installation to the new one.." echo "" >> ${logdir}/main.log - echo "cp -a \"$(realpath ${MYSQL_CUR_INSTALL_DIR}/sys-maint.cnf)\" \"${MYSQL_INSTALL_DIR}/sys-maint.cnf\"" \ - >> ${logdir}/main.log - if [[ -f "${MYSQL_CUR_INSTALL_DIR}/sys-maint.cnf" ]] ; then - cp -a "$(realpath ${MYSQL_CUR_INSTALL_DIR}/sys-maint.cnf)" "${MYSQL_INSTALL_DIR}/sys-maint.cnf" \ + echo "## - Copy 'sys-maint.cnf from old installation to the new one" >> ${logdir}/main.log + echo "## -" >> ${logdir}/main.log + if [[ "$CURRENT_VERSION" = "$MYSQL_VERSION" ]] ; then + echo "cp -a \"$MYSQL_INSTALL_DIR.$_backup_date/sys-maint.cnf\" \"${MYSQL_INSTALL_DIR}/sys-maint.cnf\"" \ >> ${logdir}/main.log + cp -a $MYSQL_INSTALL_DIR.$_backup_date/sys-maint.cnf "${MYSQL_INSTALL_DIR}/sys-maint.cnf" \ + >> ${logdir}/main.log 2>&1 if [ "$?" = "0" ]; then echo_ok else echo_failed _sys_maint_cnf_needed=true error "Konnte Konfigurationsdatei 'sys-maint.cnf' nicht vom alten in das neue Installations Verz.kopieren.." + + echononl "continue anyway [yes/no]: " + read OK + OK="$(echo "$OK" | tr '[:upper:]' '[:lower:]')" + while [[ "$OK" != "yes" ]] && [[ "$OK" != "no" ]] ; do + echononl "Wrong entry! - repeat [yes/nno]: " + read OK + done + [[ $OK = "yes" ]] || fatal "Abbruch durch User" fi else + echo "cp -a \"$(realpath ${MYSQL_CUR_INSTALL_DIR}/sys-maint.cnf)\" \"${MYSQL_INSTALL_DIR}/sys-maint.cnf\"" \ + >> ${logdir}/main.log + cp -a "$(realpath ${MYSQL_CUR_INSTALL_DIR}/sys-maint.cnf)" "${MYSQL_INSTALL_DIR}/sys-maint.cnf" \ + >> ${logdir}/main.log 2>&1 + if [ "$?" = "0" ]; then + echo_ok + else + echo_failed + _sys_maint_cnf_needed=true + error "Konnte Konfigurationsdatei 'sys-maint.cnf' nicht vom alten in das neue Installations Verz.kopieren.." + + echononl "continue anyway [yes/no]: " + read OK + OK="$(echo "$OK" | tr '[:upper:]' '[:lower:]')" + while [[ "$OK" != "yes" ]] && [[ "$OK" != "no" ]] ; do + echononl "Wrong entry! - repeat [yes/nno]: " + read OK + done + [[ $OK = "yes" ]] || fatal "Abbruch durch User" + fi + fi + + if [[ ! -f "${MYSQL_INSTALL_DIR}/sys-maint.cnf" ]] ; then _sys_maint_cnf_needed=true fi fi @@ -2728,6 +4044,8 @@ if ! $UPDATE_MYSQL || $_sys_maint_cnf_needed ; then echo echononl "Erstelle Passwort für maintance (MySQL) User.." echo "" >> ${logdir}/main.log + echo "## - Erstelle Passwort für maintance (MySQL) User" >> ${logdir}/main.log + echo "## -" >> ${logdir}/main.log PW_GEN=`which pwgen` if [ -z "$PW_GEN" ]; then echo "_maint_passwd=\`cat /dev/urandom|tr -dc \"a-zA-Z0-9-_\$\?\" | fold -w16 | head -n 1\`" >> ${logdir}/main.log @@ -2741,10 +4059,21 @@ if ! $UPDATE_MYSQL || $_sys_maint_cnf_needed ; then else echo_failed error Konnte Passwort für maintance \(MySQL\) User nicht erstellen.. + + echononl "continue anyway [yes/no]: " + read OK + OK="$(echo "$OK" | tr '[:upper:]' '[:lower:]')" + while [[ "$OK" != "yes" ]] && [[ "$OK" != "no" ]] ; do + echononl "Wrong entry! - repeat [yes/nno]: " + read OK + done + [[ $OK = "yes" ]] || fatal "Abbruch durch User" fi _maint_user=sys-maint - echononl "Erstelle maintance MySQL User \"${_maint_user}\" - localhost.." + echononl "Erstelle maintance MySQL User '${_maint_user}' - localhost.." + echo "" >> ${logdir}/main.log + echo "## - Erstelle maintance MySQL User '${_maint_user}' - localhost" >> ${logdir}/main.log echo "" >> ${logdir}/main.log echo "${MYSQL_INSTALL_DIR}/bin/mysql -uroot -p$MYSQL_ROOT_PW mysql -N -s -e \"GRANT ALL ON *.* TO '${_maint_user}'@'localhost' IDENTIFIED BY '$_maint_passwd'\"" >> ${logdir}/main.log ${MYSQL_INSTALL_DIR}/bin/mysql -uroot -p$MYSQL_ROOT_PW mysql -N -s -e "GRANT ALL ON *.* TO '${_maint_user}'@'localhost' IDENTIFIED BY '$_maint_passwd'" >> ${logdir}/main.log 2>&1 @@ -2753,10 +4082,21 @@ if ! $UPDATE_MYSQL || $_sys_maint_cnf_needed ; then else echo_failed error Konnte \(MySQL\) User \"${_maint_user}\" nicht erstellen.. + + echononl "continue anyway [yes/no]: " + read OK + OK="$(echo "$OK" | tr '[:upper:]' '[:lower:]')" + while [[ "$OK" != "yes" ]] && [[ "$OK" != "no" ]] ; do + echononl "Wrong entry! - repeat [yes/nno]: " + read OK + done + [[ $OK = "yes" ]] || fatal "Abbruch durch User" fi - echononl "Give \"Grant\" permission to MySQL User \"${_maint_user}\".." + echononl "Give 'Grant' permission to MySQL User '${_maint_user}'.." echo "" >> ${logdir}/main.log + echo "## - Give 'Grant' permission to MySQL User '${_maint_user}'" >> ${logdir}/main.log + echo "## -" >> ${logdir}/main.log echo "${MYSQL_INSTALL_DIR}/bin/mysql -uroot -p$MYSQL_ROOT_PW mysql -N -s -e \"UPDATE user SET Grant_priv = 'y' WHERE user = '${_maint_user}';\"" >> ${logdir}/main.log ${MYSQL_INSTALL_DIR}/bin/mysql -uroot -p$MYSQL_ROOT_PW mysql -N -s -e "UPDATE user SET Grant_priv = 'y' WHERE user = '${_maint_user}';" >> ${logdir}/main.log 2>&1 if [ "$?" = "0" ]; then @@ -2764,10 +4104,21 @@ if ! $UPDATE_MYSQL || $_sys_maint_cnf_needed ; then else echo_failed error Giving \"Grant\"-permission to \(MySQL\) User \"${_maint_user}\" failed + + echononl "continue anyway [yes/no]: " + read OK + OK="$(echo "$OK" | tr '[:upper:]' '[:lower:]')" + while [[ "$OK" != "yes" ]] && [[ "$OK" != "no" ]] ; do + echononl "Wrong entry! - repeat [yes/nno]: " + read OK + done + [[ $OK = "yes" ]] || fatal "Abbruch durch User" fi echononl "Neu Einlesen der Berechtigung (MySQL Server).." echo "" >> ${logdir}/main.log + echo "## - Neu Einlesen der Berechtigung (MySQL Server)" >> ${logdir}/main.log + echo "## -" >> ${logdir}/main.log echo "${MYSQL_INSTALL_DIR}/bin/mysql -uroot -p$MYSQL_ROOT_PW mysql -N -s -e \"FLUSH PRIVILEGES\"" >> ${logdir}/main.log ${MYSQL_INSTALL_DIR}/bin/mysql -uroot -p$MYSQL_ROOT_PW mysql -N -s -e "FLUSH PRIVILEGES" >> ${logdir}/main.log 2>&1 if [ "$?" = "0" ]; then @@ -2775,10 +4126,36 @@ if ! $UPDATE_MYSQL || $_sys_maint_cnf_needed ; then else echo_failed error Das Laden/Erneuern der Berechtigungen für die MySQL Datenbank ist fehlgeschlagen.. + + echononl "continue anyway [yes/no]: " + read OK + OK="$(echo "$OK" | tr '[:upper:]' '[:lower:]')" + while [[ "$OK" != "yes" ]] && [[ "$OK" != "no" ]] ; do + echononl "Wrong entry! - repeat [yes/nno]: " + read OK + done + [[ $OK = "yes" ]] || fatal "Abbruch durch User" fi echononl "Erstelle '${MYSQL_INSTALL_DIR}/sys-maint.cnf'.." + echo "" >> ${logdir}/main.log + echo "## - Erstelle '${MYSQL_INSTALL_DIR}/sys-maint.cnf'" >> ${logdir}/main.log + echo "## -" >> ${logdir}/main.log + echo "cat << EOF > ${MYSQL_INSTALL_DIR}/sys-maint.cnf +[client] +host = localhost +user = $_maint_user +password = $_maint_passwd +socket = $MYSQL_UNIX_SOCKET +[mysql_upgrade] +host = localhost +user = $_maint_user +password = $_maint_passwd +socket = $MYSQL_UNIX_SOCKET +basedir = /usr +EOF" >> ${logdir}/main.log + cat << EOF > ${MYSQL_INSTALL_DIR}/sys-maint.cnf [client] host = localhost @@ -2803,6 +4180,32 @@ fi sys_maint_file="$(dirname $MYSQL_INSTALL_DIR)/mysql/sys-maint.cnf" echononl "Erstelle Logrotate Definitionsdatei /etc/logrotate.d/mysql.." +echo "" >> ${logdir}/main.log +echo "## - Erstelle Logrotate Definitionsdatei /etc/logrotate.d/mysql" >> ${logdir}/main.log +echo "## -" >> ${logdir}/main.log +echo "cat << EOF > /etc/logrotate.d/mysql +$_mysql_log +$_mysql_error_log +$_mysql_slow_query_log +{ + daily + rotate 7 + missingok + create 644 $MYSQL_USER $MYSQL_GROUP + compress + sharedscripts + postrotate + MYSQL=\"$(dirname $MYSQL_INSTALL_DIR)/mysql/bin/mysql --defaults-file=$sys_maint_file\" + MYADMIN=\"$(dirname $MYSQL_INSTALL_DIR)/mysql/bin/mysqladmin --defaults-file=$sys_maint_file\" + if [ -z \"\$(\$MYADMIN ping 2>/dev/null)\" ]; then + echo "Warning: no mysqld running or missing sys-maint user?" + else + \$MYSQL -e 'select @@global.long_query_time into @lqt_save; set global long_query_time=2000; select sleep(2); FLUSH LOGS; select sleep(2); set global long_query_time=@lqt_save;' > /dev/null + fi + endscript +} +EOF" >> ${logdir}/main.log + cat << EOF > /etc/logrotate.d/mysql $_mysql_log $_mysql_error_log @@ -2833,8 +4236,10 @@ else fi echo -echononl "Enable crontab for user root" +echononl "Reenable crontab for user root .." echo "" >> ${logdir}/main.log +echo "Reenable crontab for user root" >> ${logdir}/main.log +echo "## -" >> ${logdir}/main.log echo "crontab -u root $_CRONTAB_BAKUP_FILE" >> ${logdir}/main.log crontab -u root $_CRONTAB_BAKUP_FILE >> ${logdir}/main.log 2>&1 if [ "$?" = "0" ]; then @@ -2843,8 +4248,10 @@ else echo_failed fi -echononl "Remove crontab backup file" +echononl "Remove crontab backup file .." echo "" >> ${logdir}/main.log +echo "## - Remove crontab backup file" >> ${logdir}/main.log +echo "## -" >> ${logdir}/main.log echo "rm $_CRONTAB_BAKUP_FILE" >> ${logdir}/main.log rm -f $_CRONTAB_BAKUP_FILE if [ "$?" = "0" ]; then @@ -2853,6 +4260,6 @@ else echo_failed fi +info "See '${logdir}/main.log' for more details." -echo clean_up 0