diff --git a/.gitignore b/.gitignore index d2dc280..ce12194 100644 --- a/.gitignore +++ b/.gitignore @@ -1,4 +1,7 @@ *.swp +*.tar.gz /BAK/* /log* /mysql* +/mariadb* +/percona* diff --git a/OLD/install_mariadb.sh b/OLD/install_mariadb.sh new file mode 100755 index 0000000..11c4ba2 --- /dev/null +++ b/OLD/install_mariadb.sh @@ -0,0 +1,4498 @@ +#!/usr/bin/env bash + +_backup_date="$(date +"%Y-%m-%d-%H%M")" + +_MARIADB_VERSION=10.2.13 + +_MARIADB_SRC_BASE_DIR="$(realpath $(dirname $0))" + +_MARIADB_LOG_DIR=/var/log/mysql + +_MARIADB_PORT=3306 +_MARIADB_UNIX_SOCKET=/tmp/mysql.sock + + +_MARIADB_USER=mysql +_MARIADB_GROUP=mysql + +_DISTRIBUTION=Debian + +_VSERVER_GUEST=nein + +_required_debian_packages="libevent-dev + libjemalloc-dev + libboost-all-dev + libreadline-gplv2-dev + libjudy-dev + libpam0g-dev + libpcre3-dev + libgroonga-dev + gnutls-dev + default-jdk" + +_CRONTAB_BAKUP_FILE="$(mktemp)" + +## - Let make use multiple cores (-j) +## - +export MAKEFLAGS=-j$(expr `grep "^processor" /proc/cpuinfo | sort -u | wc -l` + 1) + + +## --- Some functions +## --- +clean_up() { + + # Perform program exit housekeeping + if [[ -s "$_CRONTAB_BAKUP_FILE" ]]; then + crontab -u root $_CRONTAB_BAKUP_FILE + fi + rm -f $_CRONTAB_BAKUP_FILE + exit $1 +} + +echononl(){ + echo X\\c > /tmp/shprompt$$ + if [ `wc -c /tmp/shprompt$$ | awk '{print $1}'` -eq 1 ]; then + echo "$*\\c" 1>&2 + else + echo -e -n "$*" 1>&2 + fi + rm /tmp/shprompt$$ +} + +fatal(){ + echo "" + echo -e "fataler Fehler: $*" + echo "" + echo -e "\t\033[31m\033[1mInstalllation wird abgebrochen\033[m\033[m" + echo "" + exit 1 +} + +error(){ + echo "" + echo -e "\t[ \033[31m\033[1mFehler\033[m ]: $*" + echo "" +} + +warn (){ + echo "" + echo -e "\t[ \033[33m\033[1mWarning\033[m ]: $*" + echo "" +} + +info (){ + echo "" + echo -e "\t[ \033[32m\033[1mInfo\033[m ]: $*" + echo "" +} + + +echo_ok() { + echo -e "\033[75G[ \033[32mok\033[m ]" + ## echo -e " [ ok ]" +} +echo_failed(){ + echo -e "\033[75G[ \033[1;31mfailed\033[m ]" + ## echo -e " [ failed ]" +} +echo_skipped() { + echo -e "\033[75G[ \033[33m\033[1mskipped\033[m ]" +} +## --- +## --- END: functions + +trap clean_up SIGHUP SIGINT SIGTERM + +_curdir=`pwd` + + +clear +echo -e "\033[21G\033[32mInstallationsscript für die MariaDB Datenbank \033[m" +echo + +## - root user? +## - +if [ "$(id -u)" != "0" ]; then + fatal Skript muss als \"root\" ausgeführt werden +fi + +# - OS supports systemd ? +# - +_systemd="$(which systemd)" +_systemctl="$(which systemctl)" +if [[ -z "$_systemd" ]] && [[ -z "$_systemctl" ]]; then + SYSTEMD_EXISTS=false +else + SYSTEMD_EXISTS=true +fi + +DISTRIBUTION= +echo "" +echo -e "\033[32m--\033[m" +echo "" +echo "Um welche Linux Distribution handelt es sich?" +echo "" +echo "[1] Debian" +echo "[2] andere" +echo "" +echononl "Eingabe: " + +while [ "$DISTRIBUTION" != "Debian" -a "$DISTRIBUTION" != "other" ];do + read OPTION + case $OPTION in + 1) DISTRIBUTION="Debian" + ;; + 2) DISTRIBUTION="other" + ;; + *) echo "" + echo -e "\tFalsche Eingabe ! [ 1 = Debian ; 2 = andere ]" + echo "" + echononl "Eingabe:" + ;; + esac +done + +_UPDATE_MARIADB="" +echo "" +echo -e "\033[32m--\033[m" +echo "" +echo "Soll eine vorhanden MariaDB Installation geupdateted werden?" +echo "" +echo "[1] Neuinstallation" +echo "[2] Update vorhandener Installation" +echo "" +echononl "Eingabe: " + + +while [ "$_UPDATE_MARIADB" != "update" -a "$_UPDATE_MARIADB" != "new" ];do + read OPTION + case $OPTION in + 1) _UPDATE_MARIADB="new" + ;; + 2) _UPDATE_MARIADB="update" + ;; + *) echo "" + echo -e "\tFalsche Eingabe ! [ 1 = Neuinstallation ; 2 = Update ]" + echo "" + echononl "Eingabe:" + ;; + esac +done +if [ "$_UPDATE_MARIADB" = "update" ];then + UPDATE_MARIADB=true +else + UPDATE_MARIADB=false +fi + +if $UPDATE_MARIADB ; then + echo "" + echononl "Get current MARIADB Version.." + CURRENT_VERSION="$(mysql -V | grep -o -E "Distrib\s+[0-9]+\.[0-9]+\.[0-9]+" | awk '{print$2}')" + if [ "$?" = "0" ]; then + echo_ok + else + echo_failed + fatal "Getting current mariadb version failed!" + fi + echo "" +fi + + +#clear +#echo -e "\033[21G\033[32mInstallationsscript für die MariaDB Datenbank \033[m" +#echo "" +echo -e "\033[32m--\033[m" +echo "" +echo "Gib die Versionsnummer der MariaDB-Distribution an." +echo "" +MARIADB_VERSION= +while [ "X$MARIADB_VERSION" = "X" ] +do + echononl "MariaDB Version [$_MARIADB_VERSION]: " + read MARIADB_VERSION + if [ "X$MARIADB_VERSION" = "X" ]; then + MARIADB_VERSION=$_MARIADB_VERSION + fi + + _MARIADB_INSTALL_DIR=/usr/local/mariadb-$MARIADB_VERSION + _MARIADB_DATA_DIR=/data/mariadb-$MARIADB_VERSION + distfile=mariadb-${MARIADB_VERSION}.tar.gz +done +MARIADB_MAIN_VERSION=`echo $MARIADB_VERSION | cut -d '.' -f1,2` +MARIADB_MAJOR_VERSION=`echo $MARIADB_VERSION | cut -d '.' -f1` +MARIADB_MINOR_VERSION=`echo $MARIADB_VERSION | cut -d '.' -f2` +MARIADB_PATCH_LEVEL=`echo $MARIADB_VERSION | cut -d '.' -f2` + + +echo "" +echo -e "\033[32m--\033[m" +echo "" +echo "Gib den Namen des MariaDB Sourceverzeichnisses an." +echo "" +MARIADB_SRC_BASE_DIR= +while [ "X$MARIADB_SRC_BASE_DIR" = "X" ] +do + echononl "MariaDB Sourceverzeichnis [${_MARIADB_SRC_BASE_DIR}]: " + read MARIADB_SRC_BASE_DIR + if [ "X$MARIADB_SRC_BASE_DIR" = "X" ]; then + MARIADB_SRC_BASE_DIR=$_MARIADB_SRC_BASE_DIR + fi +done +MARIADB_SRC_DIR=${MARIADB_SRC_BASE_DIR}/mariadb-$MARIADB_VERSION + +echo "" +echo -e "\033[32m--\033[m" +echo "" +echo "Gib den Namen des Verzeichnisses in das MariaDB installiert werden soll an." +echo "" +MARIADB_INSTALL_DIR= +while [ "X$MARIADB_INSTALL_DIR" = "X" ] +do + echononl "MariaDB Installationsverzeichnis [${_MARIADB_INSTALL_DIR}]: " + read MARIADB_INSTALL_DIR + if [ "X$MARIADB_INSTALL_DIR" = "X" ]; then + MARIADB_INSTALL_DIR=$_MARIADB_INSTALL_DIR + LINK=yes + fi + + logdir=${MARIADB_SRC_BASE_DIR}/log-$MARIADB_VERSION + +done + +MY_CNF_FILE="${MARIADB_INSTALL_DIR}/etc/my.cnf" + +if $UPDATE_MARIADB ; then + echo "" + echononl "Ermittle Installations Verz. der existierenden MARIADB Installation." + if [[ -d "$(dirname "$MARIADB_INSTALL_DIR")/mariadb-$CURRENT_VERSION" ]]; then + MARIADB_CUR_INSTALL_DIR="$(dirname "$MARIADB_INSTALL_DIR")/mariadb-$CURRENT_VERSION" + echo_ok + else + echo_failed + fatal "Kann Installations Verz. der z.Zt. installierten Version nicht finden!" + fi + echo "" +fi + +echo "" +echo -e "\033[32m--\033[m" +echo "" +echo "Gib den Namen des Verzeichnisses für die MariaDB-Datenbanken an." +echo "" +MARIADB_DATA_DIR= +while [ "X$MARIADB_DATA_DIR" = "X" ] +do + echononl "MariaDB Datenbankverzeichnis [$_MARIADB_DATA_DIR]: " + read MARIADB_DATA_DIR + if [ "X$MARIADB_DATA_DIR" = "X" ]; then + MARIADB_DATA_DIR=$_MARIADB_DATA_DIR + fi +done + +if $UPDATE_MARIADB ; then + echo "" + echononl "Ermittle MARIADB-Datenbank Verz. der existierenden MARIADB Installation." + if [[ -d "$(dirname "$MARIADB_DATA_DIR")/mariadb-$CURRENT_VERSION" ]]; then + MARIADB_CUR_DATA_DIR="$(dirname "$MARIADB_DATA_DIR")/mariadb-$CURRENT_VERSION" + echo_ok + else + echo_failed + fatal "Kann Datenbank Verz. der installierten Version nicht finden!" + fi + echo "" +fi + + +echo "" +echo -e "\033[32m--\033[m" +echo "" +echo "Gib den Namen des LOG-Verzeichnisses für die MariaDB an. !! NICHT für binäre logfiles !!" +echo "" +MARIADB_LOG_DIR= +while [ "X$MARIADB_LOG_DIR" = "X" ] +do + echononl "MariaDB LOG Verzeichniss [$_MARIADB_LOG_DIR]: " + read MARIADB_LOG_DIR + if [ "X$MARIADB_LOG_DIR" = "X" ]; then + MARIADB_LOG_DIR=$_MARIADB_LOG_DIR + fi +done + +echo "" +echo -e "\033[32m--\033[m" +echo "" +echo "Gib den TCP Port für MariaDB an (voreingestell \"${MARIADB_PORT}\")." +echo "" +MARIADB_PORT= +while [ "X$MARIADB_PORT" = "X" ] +do + echononl "MariaDB TCP Port [$_MARIADB_PORT]: " + read MARIADB_PORT + if [ "X$MARIADB_PORT" = "X" ]; then + MARIADB_PORT=$_MARIADB_PORT + fi +done + +echo "" +echo -e "\033[32m--\033[m" +echo "" +echo "Gib den Unix Socket für MariaDB an (voreingestell \"${_MARIADB_UNIX_SOCKET}\")." +echo "" +MARIADB_UNIX_SOCKET= +while [ "X$MARIADB_UNIX_SOCKET" = "X" ] +do + echononl "MariaDB UNIX Socket [$_MARIADB_UNIX_SOCKET]: " + read MARIADB_UNIX_SOCKET + if [ "X$MARIADB_UNIX_SOCKET" = "X" ]; then + MARIADB_UNIX_SOCKET=$_MARIADB_UNIX_SOCKET + fi +done + +echo "" +echo "--" +echo "" +echo "Gib den User-Namen und die User-Gruppe unter dem der MariaDB-Daemon laufen soll an." +echo "" +MARIADB_USER= +while [ "X$MARIADB_USER" = "X" ] +do + echononl "MariaDB-User [${_MARIADB_USER}]: " + read MARIADB_USER + if [ "X$MARIADB_USER" = "X" ]; then + MARIADB_USER=$_MARIADB_USER + fi +done +MARIADB_GROUP= +while [ "X$MARIADB_GROUP" = "X" ] +do + echononl "MariaDB-Gruppe [$MARIADB_USER]: " + read MARIADB_GROUP + if [ "X$MARIADB_GROUP" = "X" ]; then + MARIADB_GROUP=$MARIADB_USER + fi +done + +#clear +#echo -e "\033[21G\033[32mInstallationsscript für die MariaDB Datenbank \033[m" + +echo "" +echo -e "\033[32m--\033[m" +echo "" +if ! $UPDATE_MARIADB ; then + echo "Gib ein Passwort für den root user an.." +else + echo "Gib das 'root' Passwort der bestehenden Installation an" +fi +echo "" +_MARIADB_ROOT_PW_1="X" +_MARIADB_ROOT_PW_2="Y" +while [ "$_MARIADB_ROOT_PW_1" != "$_MARIADB_ROOT_PW_2" ] +do + echononl "Passworteingabe: " + read -s _MARIADB_ROOT_PW_1 + echo + if [ "X$_MARIADB_ROOT_PW_1" = "X" ]; then + echo -e "\n\t\033[33m\033[1mPassworteingabe erforderlich!\033[m\n" + continue + fi + echononl "Passwortwiederholung: " + read -s _MARIADB_ROOT_PW_2 + echo + if [ "X$_MARIADB_ROOT_PW_2" = "X" ]; then + echo -e "\n\t\033[33m\033[1mPasswortwiederholung erforderlich!\033[m\n" + continue + fi + if [ "$_MARIADB_ROOT_PW_1" != "$_MARIADB_ROOT_PW_2" ];then + echo -e "\n\t\033[33m\033[1mPassworteingaben sind nicht identisch!\033[m\n" + else + if $UPDATE_MARIADB ; then + if $(pgrep mysqld_safe > /dev/null 2>&1) || $(pgrep mysqld > /dev/null 2>&1); then + if $(mysql --user="root" --password="$_MARIADB_ROOT_PW_1" -N -s -e 'quit' > /dev/null 2>&1) ; then + MARIADB_ROOT_PW=$_MARIADB_ROOT_PW_1 + else + echo -e "\n\t\033[33m\033[1mFalsches Passwort\033[m\n" + _MARIADB_ROOT_PW_1="" + fi + else + MARIADB_ROOT_PW=$_MARIADB_ROOT_PW_1 + fi + else + MARIADB_ROOT_PW=$_MARIADB_ROOT_PW_1 + fi + fi +done + + +__SYMLINK_INSTALL_DIR=ja +__SYMLINK_DATA_DIR=ja + +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 $MARIADB_INSTALL_DIR`/mysql" +echo "" + +echo "" +_SYMLINK_INSTALL_DIR="" +echononl "Sysmlink für das Installationsverzeichnis? (ja/nein) [${__SYMLINK_INSTALL_DIR}]: " +read _SYMLINK_INSTALL_DIR +if [ "X$_SYMLINK_INSTALL_DIR" = "X" ];then + _SYMLINK_INSTALL_DIR=$__SYMLINK_INSTALL_DIR +fi + +_SYMLINK_INSTALL_DIR="$(echo "$_SYMLINK_INSTALL_DIR" | tr '[:upper:]' '[:lower:]')" +while [ "$_SYMLINK_INSTALL_DIR" != "ja" -a "$_SYMLINK_INSTALL_DIR" != "nein" ]; do + echononl "Falsche Eingabe. (ja/nein): " + read _SYMLINK_INSTALL_DIR +done +if [ "$_SYMLINK_INSTALL_DIR" = "ja" -o "$_SYMLINK_INSTALL_DIR" = "Ja" ]; then + SYMLINK_INSTALL_DIR=true +else + SYMLINK_INSTALL_DIR=false +fi + +echo "" +_SYMLINK_DATA_DIR="" +echononl "Sysmlink für das Datenverzeichnis? (ja/nein) [${__SYMLINK_DATA_DIR}]: " +read _SYMLINK_DATA_DIR +if [ "X$_SYMLINK_DATA_DIR" = "X" ];then + _SYMLINK_DATA_DIR=$__SYMLINK_DATA_DIR +fi + +__SYMLINK_DATA_DIR="$(echo "$_SYMLINK_DATA_DIR" | tr '[:upper:]' '[:lower:]')" +while [ "$_SYMLINK_DATA_DIR" != "ja" -a "$_SYMLINK_DATA_DIR" != "nein" ]; do + echononl "Falsche Eingabe. (ja/nein): " + read _SYMLINK_DATA_DIR +done +if [ "$_SYMLINK_DATA_DIR" = "ja" -o "$_SYMLINK_DATA_DIR" = "Ja" ]; then + SYMLINK_DATA_DIR=true +else + SYMLINK_DATA_DIR=false +fi + + + +OK= +echo "" +echo -e "\033[32m--\033[m" +echo "" +echo "Ist dies ein VServer Gastsystem?" +echo "" +echononl "VServer Gastsystem (ja/nein) [$_VSERVER_GUEST]: " +read OK +if [ "X$OK" = "X" ]; then + OK=$_VSERVER_GUEST +fi +OK=`echo "$OK" | tr '[:upper:]' '[:lower:]'` +while [ "X$OK" != "Xja" -a "X$OK" != "Xnein" ]; do + echo "" + echononl "\twrong entry! [ja/nein]: " + read OK + OK=`echo "$OK" | tr '[:upper:]' '[:lower:]'` +done +if [ "$OK" = "ja" ]; then + SYSTEMD_EXISTS=false + VSERVER_GUEST=true +else + VSERVER_GUEST=false +fi + + + + + +if $SYSTEMD_EXISTS ; then + INSTALL_SYSTEMD_SERVICE="" + echo "" + echo -e "\033[32m--\033[m" + echo "" + echo "Wie soll der MariaDB (mysql) Datenbank Service getsartet werden?" + echo "" + echo "[1] SysVinit script mysql.server" + echo -e "[2] \033[37m\033[1mSystemd service mysqld.service\033[m" + echo "" + echo "" + echo "Type a number or press to choose highlighted value" + echo "" + echononl "Eingabe: " + + while [[ "$INSTALL_SYSTEMD_SERVICE" != "true" ]] && [[ "$INSTALL_SYSTEMD_SERVICE" != "false" ]]; do + + #while [[ -z "$INSTALL_SYSTEMD_SERVICE" ]];do + read OPTION + case $OPTION in + 1) INSTALL_SYSTEMD_SERVICE=false + ;; + 2) INSTALL_SYSTEMD_SERVICE=true + ;; + '') INSTALL_SYSTEMD_SERVICE=true + ;; + *) echo "" + echo -e "\tFalsche Eingabe ! [ 1 = Systemd Service ; 2 = SysVinit Script ]" + echo "" + echononl "Eingabe:" + ;; + esac + done + +else + INSTALL_SYSTEMD_SERVICE=false +fi + + +MARIADB_SERVICE_FILE="" +MARIADB_SYSV_INIT_SCRIPT="" +SYSTEMD_PID_DIR="" +if $INSTALL_SYSTEMD_SERVICE ; then + MARIADB_SERVICE_FILE="mariadb.service" + SYSTEMD_PID_DIR="$MARIADB_DATA_DIR" +else + MARIADB_SYSV_INIT_SCRIPT="mysql.server" +fi + + +clear +echo -e "\033[21G\033[32mStarte Installation mit folgenden Parametern:\033[m" +echo "" +if ! $UPDATE_MARIADB ; then + echo -e "-- \033[33m\033[1mNeusistallation\033[m --" +else + echo -e "-- \033[33m\033[1mUpdate\033[m (Erstzen einer vorhandenen Installation) --" + echo "" + echo "Current MariaDB Version...: $CURRENT_VERSION" + echo "Current data dir..........: $MARIADB_CUR_DATA_DIR" + echo "Current installation dir..: $MARIADB_CUR_INSTALL_DIR" + echo "" +fi +echo "" +echo "Linuxdistribution.........: $DISTRIBUTION" +echo "" +echo "MariaDB Versionsnummer....: $MARIADB_VERSION" +echo " MariaDB Main Verion.....: $MARIADB_MAIN_VERSION" +echo "" +echo "Sourcecodeverzeicnis......: $MARIADB_SRC_BASE_DIR" +echo "Installationsverzeichnis..: $MARIADB_INSTALL_DIR" +echo "Default file 'my.cnf'.....: $MY_CNF_FILE" +echo "Datenbankverzeichnis......: $MARIADB_DATA_DIR" +echo "Log Verzeichnis...........: $MARIADB_LOG_DIR" +echo "TCP Port..................: $MARIADB_PORT" +echo "Unix Socket...............: $MARIADB_UNIX_SOCKET" +echo "MariaDB-User..............: $MARIADB_USER" +echo "MariaDB-Gruppe............: $MARIADB_GROUP" +echo "" +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 "MariaDB Service File......: $MARIADB_SERVICE_FILE" + echo "Systemd pid directory.....: $SYSTEMD_PID_DIR" +else + echo "Starmethode...............: SysVinit Script" + echo "MariaDB SysyVinit Script..: $MARIADB_SYSV_INIT_SCRIPT" +fi +echo "" +echo "VServer guest system......: $VSERVER_GUEST" +echo "" +echononl "einverstanden [ja/nein]: " +read OK +while [ "X$OK" != "Xja" -a "X$OK" != "XJa" -a "X$OK" != "Xnein" -a "X$OK" != "XNein" ] +do + echononl "falsche Angabe! [ja/nein]: " + read OK +done +[ $OK = "ja" -o $OK = "Ja" ] || fatal wiederhole Installation zur Eingabe anderer Parameter + + + +## - Sorcecode Verzeichnis vorhanden? +## - +if [ ! -d ${MARIADB_SRC_BASE_DIR} ] ; then + fatal "Kann MariaDB Sourcecode Verzeichnis \"${MARIADB_SRC_BASE_DIR}\" nicht finden." +fi + + +## - Sorcecode vorhanden? +## - +if [ ! -f ${MARIADB_SRC_BASE_DIR}/$distfile ] ; then + + echo "" + + echononl "Download $distfile ..." + wget -O ${MARIADB_SRC_BASE_DIR}/$distfile http://ftp.hosteurope.de/mirror/archive.mariadb.org/mariadb-${MARIADB_VERSION}/source/$distfile 2>/dev/null + + if [ "$?" = "0" ]; then + echo_ok + else + echo_failed + fatal "Downloading $distfile (https://ftp.hosteurope.de/mirror/archive.mariadb.org/mariadb-${MARIADB_VERSION}/source/$distfile) Fehlgeschlagen." + fi +fi + +echo "" +echo "" + + +## - Erstelle Logverzeichnis +## - +if [ -d $logdir ]; then + echononl "Verschiebe exitierendes Logverzeichnis ..." + mv $logdir $logdir.`date +"%Y%m%d-%H%M"` + if [ "$?" = "0" ]; then + echo_ok + else + echo_failed + fatal Kann Logverzeichnis \"${logdir}\" nicht verschieben.. + fi +fi + +echononl "Erstelle Logverzeichnis \"${logdir}\".." +mkdir -p $logdir > /dev/null 2>&1 +if [ "$?" = "0" ]; then + echo_ok +else + echo_failed + fatal Kann Logverzeichnis \"${logdir}\" nicht erstellen.. +fi +touch ${logdir}/main.log +echo -e "## - Starte Installation mit folgenden Parametern:" >> ${logdir}/main.log +echo "## -" >> ${logdir}/main.log +if ! $UPDATE_MARIADB ; then + echo "## - Neusistallation" >> ${logdir}/main.log +else + echo "## - Update (Erstzen einer vorhandenen Installation)" >> ${logdir}/main.log + echo "## -" >> ${logdir}/main.log + echo "## - Current MariaDB Version...: $CURRENT_VERSION" >> ${logdir}/main.log + echo "## - Current installation dir..: $MARIADB_CUR_INSTALL_DIR" >> ${logdir}/main.log + echo "## - Current data dir..........: $MARIADB_CUR_DATA_DIR" >> ${logdir}/main.log + echo "## -" >> ${logdir}/main.log +fi +echo "## -" >> ${logdir}/main.log +echo "## - Linuxdistribution.........: $DISTRIBUTION" >> ${logdir}/main.log +echo "## - " >> ${logdir}/main.log +echo "## - MariaDB Versionsnummer....: $MARIADB_VERSION" >> ${logdir}/main.log +echo "## - MariaDB Main Verion....: $MARIADB_MAIN_VERSION" >> ${logdir}/main.log +echo "## - " >> ${logdir}/main.log +echo "## - Sourcecodeverzeicnis......: $MARIADB_SRC_BASE_DIR" >> ${logdir}/main.log +echo "## - Installationsverzeichnis..: $MARIADB_INSTALL_DIR" >> ${logdir}/main.log +echo "## - Default file 'my.cnf'.....: $MY_CNF_FILE" >> ${logdir}/main.log +echo "## - Datenbankverzeichnis......: $MARIADB_DATA_DIR" >> ${logdir}/main.log +echo "## - Log Verzeichnis...........: $MARIADB_LOG_DIR" >> ${logdir}/main.log +echo "## - TCP Port..................: $MARIADB_PORT" >> ${logdir}/main.log +echo "## - Unix Socket...............: $MARIADB_UNIX_SOCKET" >> ${logdir}/main.log +echo "## - MariaDB-User..............: $MARIADB_USER" >> ${logdir}/main.log +echo "## - MariaDB-Gruppe............: $MARIADB_GROUP" >> ${logdir}/main.log +echo "## - " >> ${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 +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 "## - MariaDB Service File......: $MARIADB_SERVICE_FILE" >> ${logdir}/main.log + echo "## - Systemd pid directory.....: $SYSTEMD_PID_DIR" >> ${logdir}/main.log +else + echo "## - Starmethode...............: SysVinit Script" >> ${logdir}/main.log + echo "## - MariaDB SysyVinit Script..: $MARIADB_SYSV_INIT_SCRIPT" >> ${logdir}/main.log +fi +echo "## -" >> ${logdir}/main.log +echo "## - VServer guest system......: $VSERVER_GUEST" >> ${logdir}/main.log +echo "" >> ${logdir}/main.log +echo "" >> ${logdir}/main.log + +echo "UPDATE_MARIADB=$UPDATE_MARIADB" >> ${logdir}/main.log +if ! $UPDATE_MARIADB ; then + echo "CURRENT_VERSION=$CURRENT_VERSION" >> ${logdir}/main.log + echo "MARIADB_CUR_DATA_DIR=$MARIADB_CUR_DATA_DIR" >> ${logdir}/main.log + echo "MARIADB_CUR_INSTALL_DIR=$MARIADB_CUR_INSTALL_DIR" >> ${logdir}/main.log +fi +echo "" >> ${logdir}/main.log +echo "DISTRIBUTION=$DISTRIBUTION" >> ${logdir}/main.log +echo "" >> ${logdir}/main.log +echo "MARIADB_VERSION=$MARIADB_VERSION" >> ${logdir}/main.log +echo "MARIADB_SRC_BASE_DIR=$MARIADB_SRC_BASE_DIR" >> ${logdir}/main.log +echo "MARIADB_INSTALL_DIR=$MARIADB_INSTALL_DIR" >> ${logdir}/main.log +echo "MY_CNF_FILE=$MY_CNF_FILE" >> ${logdir}/main.log +echo "MARIADB_DATA_DIR=$MARIADB_DATA_DIR" >> ${logdir}/main.log +echo "MARIADB_LOG_DIR=$MARIADB_LOG_DIR" >> ${logdir}/main.log +echo "MARIADB_PORT=$MARIADB_PORT" >> ${logdir}/main.log +echo "MARIADB_UNIX_SOCKET=$MARIADB_UNIX_SOCKET" >> ${logdir}/main.log +echo "MARIADB_USER=$MARIADB_USER" >> ${logdir}/main.log +echo "MARIADB_GROUP=$MARIADB_GROUP" >> ${logdir}/main.log +echo "" >> ${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 "MARIADB_SERVICE_FILE=$MARIADB_SERVICE_FILE" >> ${logdir}/main.log +echo "SYSTEMD_PID_DIR=$SYSTEMD_PID_DIR" >> ${logdir}/main.log +echo "MARIADB_SYSV_INIT_SCRIPT=$MARIADB_SYSV_INIT_SCRIPT" >> ${logdir}/main.log +echo "VSERVER_GUEST=$VSERVER_GUEST" >> ${logdir}/main.log + + +_MARIADB_INITSCRIPT= +if [ -f "/etc/init.d/$MARIADB_SYSV_INIT_SCRIPT" ];then + _MARIADB_INITSCRIPT="${MARIADB_SYSV_INIT_SCRIPT}" +elif [ -f /etc/init.d/mysql.server ];then + _MARIADB_INITSCRIPT="mysql.server" +elif [ -f /etc/init.d/mysql ];then + _MARIADB_INITSCRIPT="mysql" +fi + +_SYSTEMD_SERVICE_FILE= +if [[ -f "/etc/systemd/system/$MARIADB_SERVICE_FILE" ]]; then + _SYSTEMD_SERVICE_FILE="${MARIADB_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 "$_MARIADB_INITSCRIPT" ]] && [[ -z "$_SYSTEMD_SERVICE_FILE" ]] && $UPDATE_MARIADB ; 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 \"$MARIADB_GROUP\".." +if cat /etc/group | grep -e "^${MARIADB_GROUP}:" > /dev/null 2>&1 ; then + echo_skipped +else + echo "" >> ${logdir}/main.log + echo "## - Erstelle Gruppe \"$MARIADB_GROUP\"" >> ${logdir}/main.log + echo "## -" >> ${logdir}/main.log + echo "groupadd -r $MARIADB_GROUP" >> ${logdir}/main.log + groupadd -r $MARIADB_GROUP >> ${logdir}/main.log 2>&1 + if [ "$?" = "0" ]; then + echo_ok + else + echo_failed + fatal Kann Gruppe \"${MARIADB_GROUP}\" nicht erstellen.. + fi +fi + +echononl "Adding User \"$MARIADB_USER\".." +if id -u $MARIADB_USER > /dev/null 2>&1; then + echo_skipped +else + echo "" >> ${logdir}/main.log + echo "## - Erstelle User \"$MARIADB_USER\"" >> ${logdir}/main.log + echo "## -" >> ${logdir}/main.log + echo "useradd -r -M -d /noexistent -s /bin/false -g $MARIADB_GROUP $MARIADB_USER" >> ${logdir}/main.log + useradd -r -M -d /noexistent -s /bin/false -g $MARIADB_GROUP $MARIADB_USER >> ${logdir}/main.log 2>&1 + if [ "$?" = "0" ]; then + echo_ok + else + echo_failed + fatal Kann User \"${MARIADB_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 +echo "## - " >> ${logdir}/main.log +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 + if [[ ! -s "$_CRONTAB_BAKUP_FILE" ]] ; then + echo_skipped + warn "No crontab for user 'root'found." + else + echo_failed + error "Backup crontab failed" + fi +fi + +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 MariaDB Service if running +## - +echononl "Stop MariaDB Service.." +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 + 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 ${_MARIADB_INITSCRIPT}" >> ${logdir}/main.log + systemctl stop ${_MARIADB_INITSCRIPT} >> ${logdir}/main.log 2>&1 + fi + else + echo "/etc/init.d/$_MARIADB_INITSCRIPT stop" >> ${logdir}/main.log + /etc/init.d/$_MARIADB_INITSCRIPT stop >> ${logdir}/main.log 2>&1 + fi + + sleep 5 + + 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 + + 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 + + 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 "$_MARIADB_INITSCRIPT" ]] || [[ -n "$_SYSTEMD_SERVICE_FILE" ]]; then + echo "" + echo "" + echo -e "\033[37m\033[1mDeactivate starting MariaDB database service at boot time and" + echo -e "cleanup System from SysVinit script and/or Systemd service file.\033[m" + echo "" + + echo "" >> ${logdir}/main.log + echo "" >> ${logdir}/main.log + echo "## -----" >> ${logdir}/main.log + echo "## - Deactivate starting MariaDB 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${_MARIADB_INITSCRIPT}X" != "XX" ];then + + if [ -f "/etc/init.d/$_MARIADB_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/$_MARIADB_INITSCRIPT" >> ${logdir}/main.log + rm -f /etc/init.d/$_MARIADB_INITSCRIPT >> ${logdir}/main.log 2>&1 + if [ "$?" = "0" ]; then + echo_ok + else + echo_failed + fatal "Kann existierendes Initskript nicht entfernen." + fi + fi + + ## - 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 $_MARIADB_INITSCRIPT remove" >> ${logdir}/main.log + update-rc.d -f $_MARIADB_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 + +if [[ -n "$_SYSTEMD_SERVICE_FILE" ]]; then + + 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 + + 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 + + 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 + + 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 + + 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_MARIADB ; 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 + ## - + if [ "$DISTRIBUTION" = "Debian" ]; then + echononl "Deinstalliere Debian MySQL Pakete.." + _INSTALLED_MYSQL_DEB=`dpkg -l | grep mysql | grep -e "^i" | awk '{print$2}'` + INSTALLED_MYSQL_DEB= + for deb in $_INSTALLED_MYSQL_DEB ; do + INSTALLED_MYSQL_DEB="$INSTALLED_MYSQL_DEB $deb" + done + if [ -n "$INSTALLED_MYSQL_DEB" ]; then + echo "" >> ${logdir}/main.log + echo "apt-get remove --purge -q -y $INSTALLED_MYSQL_DEB" >> ${logdir}/main.log + apt-get remove --purge -q -y $INSTALLED_MYSQL_DEB >> ${logdir}/main.log 2>&1 + if [ "$?" = "0" ]; then + echo_ok + else + echo_failed + fatal Kann MySQL Pakete nicht deinstalieren.. + fi + else + echo_skipped + 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 + echo "## - Update index files of the debian repositories" >> ${logdir}/main.log + echo "## -" >> ${logdir}/main.log + echo "## - See: ${logdir}/apt-install.log" >> ${logdir}/main.log + echo "## -" >> ${logdir}/main.log + echo "apt-get update" >> ${logdir}/main.log + + echo "apt-get update" >> ${logdir}/apt-install.log + apt-get update >> ${logdir}/apt-install.log 2>&1 + if [ "$?" = "0" ]; then + echo_ok + echo "" >> ${logdir}/apt-install.log + else + echo_failed + fatal "\"apt-get update\" failed!" + fi + + + ## - Install cmake if not exists + ## + echononl "Installing \"cmake\".." + _cmake=`which cmake` + if [ "X$_cmake" = "X" ]; then + echo "" >> ${logdir}/main.log + echo "## - Installing \"cmake\"" >> ${logdir}/main.log + echo "## -" >> ${logdir}/main.log + echo "## - See: ${logdir}/apt-install.log" >> ${logdir}/main.log + echo "DEBIAN_FRONTEND=noninteractive apt-get install -q -y cmake" >> ${logdir}/main.log + + echo "DEBIAN_FRONTEND=noninteractive apt-get install -q -y cmake" >> ${logdir}/apt-install.log + DEBIAN_FRONTEND=noninteractive apt-get install -q -y cmake >> ${logdir}/apt-install.log 2>&1 + if [ "$?" = "0" ]; then + echo_ok + echo "" >> ${logdir}/apt-install.log + else + echo_failed + fatal Kann \"cmake\" nicht installieren.. + fi + else + echo_skipped + fi + + ## - Install further debian packages + ## - + declare -a deb_package_arr + for _debian_pkg in $_required_debian_packages ; do + deb_package_arr+=("$_debian_pkg") + done + + for _debian_pkg in ${deb_package_arr[@]} ; do + + echononl "Installing $_debian_pkg .." + if ! dpkg -l $_debian_pkg 2> /dev/null | grep -e "^ii" > /dev/null 2>&1 ; then + echo "" >> ${logdir}/main.log + echo "## - Installing $_debian_pkg" >> ${logdir}/main.log + echo "## -" >> ${logdir}/main.log + echo "## - See: ${logdir}/apt-install.log" >> ${logdir}/main.log + echo "## -" >> ${logdir}/main.log + echo "DEBIAN_FRONTEND=noninteractive apt-get install -q -y $_debian_pkg" >> ${logdir}/main.log + + echo "" >> ${logdir}/apt-install.log + echo "DEBIAN_FRONTEND=noninteractive apt-get install -q -y $_debian_pkg" >> ${logdir}/apt-install.log + + DEBIAN_FRONTEND=noninteractive apt-get install -q -y $_debian_pkg >> ${_logdir}/debian-install.log 2>&1 + if [ "$?" = 0 ]; then + echo_ok + echo "" >> ${logdir}/apt-install.log + else + echo_failed + fatal "Installing debian package \"$_debian_pkg\" failed!" + fi + else + echo_skipped + fi + done + + if ! grep -q -E "export\s*JAVA_HOME" /etc/profile.d/* > /dev/null 2>&1 ; then + echo "export JAVA_HOME=/usr/lib/jvm/default-java" >> /etc/profile.d/java.sh + export JAVA_HOME=/usr/lib/jvm/default-java + fi + + ## - Install dependency packages for \"mariadb-server\" + ## - + echononl "Installing dependency packages for \"mariadb-server\"" + echo "" >> ${logdir}/main.log + echo "## - Installing dependency packages for \"mariadb-server\"" >> ${logdir}/main.log + echo "## -" >> ${logdir}/main.log + echo "## - See: ${logdir}/apt-install.log" >> ${logdir}/main.log + echo "## - " >> ${logdir}/main.log + echo "DEBIAN_FRONTEND=noninteractive apt-get -q -y build-dep mariadb-server" >> ${logdir}/main.log + + echo "" >> ${logdir}/apt-install.log + echo "DEBIAN_FRONTEND=noninteractive apt-get -q -y build-dep mariadb-server" >> ${logdir}/apt-install.log 2>&1 + + DEBIAN_FRONTEND=noninteractive apt-get -q -y build-dep mariadb-server >> ${logdir}/apt-install.log 2>&1 + if [ "$?" = 0 ]; then + echo_ok + echo "" >> ${logdir}/apt-install.log + else + echo_failed + fatal "Installing dependency packages for \"mariadb-server\" failed!" + fi + +# if apt-cache search mariadb-server | grep -q -E "^mariadb-server" > /dev/null 2>&1 ; then +# echononl "Installing dependency packages for \"mariadb-server\"" +# echo "DEBIAN_FRONTEND=noninteractive apt-get -q -y build-dep mariadb-server" >> ${logdir}/apt-install.log 2>&1 +# +# DEBIAN_FRONTEND=noninteractive apt-get -q -y build-dep mariadb-server >> ${logdir}/apt-install.log 2>&1 +# if [ "$?" = 0 ]; then +# echo_ok +# echo "" >> ${logdir}/apt-install.log +# else +# echo_failed +# fatal "Installing dependency packages for \"mariadb-server\" failed!" +# fi +# fi + +fi # if ! $UPDATE_MARIADB + + +## ----- +## - Backup directories and files from existing installation +## ----- + +if $UPDATE_MARIADB ; 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 $MARIADB_DATA_DIR ]; then + echononl "Sichere exitierendes MariaDB Datenbank-Verzeichnis ..." + echo "" >> ${logdir}/main.log + echo "## - Sichere exitierendes MariaDB Datenbank-Verzeichnis" >> ${logdir}/main.log + echo "## -" >> ${logdir}/main.log + echo "cp -a $MARIADB_DATA_DIR ${MARIADB_DATA_DIR}.${_backup_date}" >> ${logdir}/main.log + cp -a $MARIADB_DATA_DIR ${MARIADB_DATA_DIR}.$_backup_date >> ${logdir}/main.log 2>&1 + if [ "$?" = "0" ]; then + echo_ok + else + echo_failed + fatal "Kann Datenbank-Verzeichnis \"${MARIADB_DATA_DIR}\" nicht verschieben.." + fi + elif [[ -d "$MARIADB_CUR_DATA_DIR" ]] ; then + echononl "Kopiere exitierendes MariaDB Datenbank-Verzeichnis ..." + echo "" >> ${logdir}/main.log + echo "## - Kopiere exitierendes MariaDB Datenbank-Verzeichnis" >> ${logdir}/main.log + echo "## -" >> ${logdir}/main.log + echo "cp -a \"$MARIADB_CUR_DATA_DIR\" \"$MARIADB_DATA_DIR\"" >> ${logdir}/main.log + cp -a "$MARIADB_CUR_DATA_DIR" "$MARIADB_DATA_DIR" >> ${logdir}/main.log + if [ "$?" = "0" ]; then + echo_ok + else + echo_failed + fatal "Kopieren \"$MARIADB_CUR_DATA_DIR\" --> \"${MARIADB_DATA_DIR}\" fehlgeschlagen.." + fi + else + echo_failed + fatal "Exitierendes MariaDB Datenbank-Verzeichnis nicht gefunden!" + fi + + + if [ -d ${MARIADB_INSTALL_DIR} ];then + echononl "Verschiebe exitierendes Installationsverzeichnis ..." + echo "" >> ${logdir}/main.log + echo "## - Verschiebe exitierendes Installationsverzeichnis" >> ${logdir}/main.log + echo "## -" >> ${logdir}/main.log + echo "mv $MARIADB_INSTALL_DIR $MARIADB_INSTALL_DIR.${_backup_date}" >> ${logdir}/main.log + mv $MARIADB_INSTALL_DIR $MARIADB_INSTALL_DIR.$_backup_date >> ${logdir}/main.log 2>&1 + if [ "$?" = "0" ]; then + echo_ok + else + echo_failed + fatal Kann Installationsverzeichnis \"${MARIADB_INSTALL_DIR}\" nicht verschieben.. + fi + fi + +fi # if $UPDATE_MARIADB + + +## ----- +## - 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_MARIADB ; then + if [ -d ${MARIADB_DATA_DIR} ];then + echononl "Verschiebe exitierendes MariaDB Datenverzeichnis ..." + echo "" >> ${logdir}/main.log + echo "## - Verschiebe exitierendes MariaDB Datenverzeichnis" >> ${logdir}/main.log + echo "## -" >> ${logdir}/main.log + echo "mv $MARIADB_DATA_DIR $MARIADB_DATA_DIR.${_backup_date}" >> ${logdir}/main.log + mv $MARIADB_DATA_DIR $MARIADB_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 MariaDB was already installed. anyway.." + else + echo_failed + fatal Kann MariaDB Datenverzeichnis \"${MARIADB_DATA_DIR}\" nicht verschieben.. + 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 \"$MARIADB_DATA_DIR\".." +echo "" >> ${logdir}/main.log +echo "## - Erstelle Datenbank-Verzeichnis \"$MARIADB_DATA_DIR\"" >> ${logdir}/main.log +echo "## -" >> ${logdir}/main.log +echo "mkdir -p $MARIADB_DATA_DIR" >> ${logdir}/main.log +mkdir -p $MARIADB_DATA_DIR >> ${logdir}/main.log 2>&1 +if [ "$?" = "0" ]; then + echo_ok +else + echo_failed + fatal Kann Datenbank-Verzeichnis \"${MARIADB_DATA_DIR}\" nicht erstellen.. +fi + + +echononl "Setze Besitzer \"${MARIADB_USER}:${MARIADB_GROUP}\" für Datenbank-Verzeichnis" +echo "" >> ${logdir}/main.log +echo "## - Setze Besitzer \"${MARIADB_USER}:${MARIADB_GROUP}\" für Datenbank-Verzeichnis" >> ${logdir}/main.log +echo "## -" >> ${logdir}/main.log +echo "chown -R ${MARIADB_USER}:${MARIADB_GROUP} ${MARIADB_DATA_DIR}" >> ${logdir}/main.log +chown -R ${MARIADB_USER}:${MARIADB_GROUP} ${MARIADB_DATA_DIR} >> ${logdir}/main.log 2>&1 +if [ "$?" = "0" ]; then + echo_ok +else + echo_failed + fatal Kann Besitzer für Datenbank-Verzeichnis \"${MARIADB_DATA_DIR}\" nicht ändern.. +fi + +echononl "Setze Verzeichnisrechte \"700\" für Datenbank-Verzeichnis" +echo "" >> ${logdir}/main.log +echo "## - Setze Verzeichnisrechte \"700\" für Datenbank-Verzeichnis" >> ${logdir}/main.log +echo "## -" >> ${logdir}/main.log +echo "chmod 700 ${MARIADB_DATA_DIR}" >> ${logdir}/main.log +chmod 700 ${MARIADB_DATA_DIR} >> ${logdir}/main.log 2>&1 +if [ "$?" = "0" ]; then + echo_ok +else + echo_failed + fatal Kann Verzeichnisrechte für Datenbank-Verzeichnis \"${MARIADB_DATA_DIR}\" nicht ändern.. +fi + + +echononl "Erstelle LOG Verzeichnis \"$MARIADB_LOG_DIR\".." +echo "" >> ${logdir}/main.log +echo "## - Erstelle LOG Verzeichnis \"$MARIADB_LOG_DIR\"" >> ${logdir}/main.log +echo "## -" >> ${logdir}/main.log +echo "mkdir -p $MARIADB_LOG_DIR" >> ${logdir}/main.log +mkdir -p $MARIADB_LOG_DIR >> ${logdir}/main.log 2>&1 +if [ "$?" = "0" ]; then + echo_ok + mariadb_log=${MARIADB_LOG_DIR}/mysql.log + mariadb_error_log=${MARIADB_LOG_DIR}/mysql.err + mariadb_slow_query_log=${MARIADB_LOG_DIR}/slow_query.log + mariadb_groonga_log=${MARIADB_LOG_DIR}/groonga.log +else + echo_failed + fatal Kann LOG Verzeichnis \"${MARIADB_LOG_DIR}\" nicht erstellen.. +fi + +echononl "Setze Besitzer \"${MARIADB_USER}:${MARIADB_GROUP}\" für LOG Verzeichnis" +echo "" >> ${logdir}/main.log +echo "## - Setze Besitzer \"${MARIADB_USER}:${MARIADB_GROUP}\" für LOG Verzeichnis" >> ${logdir}/main.log +echo "## -" >> ${logdir}/main.log +echo "chown -R ${MARIADB_USER}:${MARIADB_GROUP} ${MARIADB_LOG_DIR}" >> ${logdir}/main.log +chown -R ${MARIADB_USER}:${MARIADB_GROUP} ${MARIADB_LOG_DIR} >> ${logdir}/main.log 2>&1 +if [ "$?" = "0" ]; then + echo_ok +else + echo_failed + fatal Kann Besitzer für LOG Verzeichnis \"${MARIADB_LOG_DIR}\" nicht ändern.. +fi + +echononl "Setze Verzeichnisrechte \"2750\" für LOG Verzeichnis" +echo "" >> ${logdir}/main.log +echo "## - Setze Verzeichnisrechte \"2750\" für LOG Verzeichnis" >> ${logdir}/main.log +echo "## -" >> ${logdir}/main.log +echo "chmod 2750 ${MARIADB_LOG_DIR}" >> ${logdir}/main.log +chmod 2750 ${MARIADB_LOG_DIR} >> ${logdir}/main.log 2>&1 +if [ "$?" = "0" ]; then + echo_ok +else + echo_failed + fatal Kann Verzeichnisrechte für LOG Verzeichnis \"${MARIADB_LOG_DIR}\" nicht ändern.. +fi + + +if [ -d "${MARIADB_SRC_DIR}" ];then + echononl "Verschiebe exitierendes Sourceverzeichnis ..." + echo "" >> ${logdir}/main.log + echo "## - Verschiebe exitierendes Sourceverzeichnis" >> ${logdir}/main.log + echo "## -" >> ${logdir}/main.log + echo "mv ${MARIADB_SRC_DIR} ${MARIADB_SRC_DIR}.${_backup_date}" >> ${logdir}/main.log + mv ${MARIADB_SRC_DIR} ${MARIADB_SRC_DIR}.$_backup_date >> ${logdir}/main.log 2>&1 + if [ "$?" = "0" ]; then + echo_ok + else + echo_failed + fatal Kann Sourceverzeichnis \"${MARIADB_SRC_DIR}\" nicht verschieben.. + 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 + + 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 + + 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 $MARIADB_USER:${MARIADB_GROUP} \"${SYSTEMD_PID_DIR}\"" >> ${logdir}/main.log + + chown $MARIADB_USER:${MARIADB_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 + + +## ----- +## - Basis Installation MariaDB +## ----- + +echo "" +echo "" +echo -e "\033[37m\033[1mBasis Installation MariaDB $MARIADB_VERSION\033[m" +echo "" + +echo "" >> ${logdir}/main.log +echo "" >> ${logdir}/main.log +echo "## -----" >> ${logdir}/main.log +echo "## - Basis Installation MariaDB $MARIADB_VERSION" >> ${logdir}/main.log +echo "## -----" >> ${logdir}/main.log + +## - This step is redundant and should never bee happend. +## - +if [ -d ${MARIADB_INSTALL_DIR} ];then + echononl "Verschiebe exitierendes Installationsverzeichnis ..." + echo "" >> ${logdir}/main.log + echo "## - Verschiebe exitierendes Installationsverzeichnis" >> ${logdir}/main.log + echo "## -" >> ${logdir}/main.log + echo "mv $MARIADB_INSTALL_DIR $MARIADB_INSTALL_DIR.${_backup_date}" >> ${logdir}/main.log + mv $MARIADB_INSTALL_DIR $MARIADB_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 MariaDB was already installed. anyway.." + else + echo_failed + fatal Kann Installationsverzeichnis \"${MARIADB_INSTALL_DIR}\" nicht verschieben.. + fi +fi + + +echononl "Entpacke $distfile ..." +echo "" >> ${logdir}/main.log +echo "## - Entpacke $distfile" >> ${logdir}/main.log +echo "## -" >> ${logdir}/main.log +echo "gunzip < \"${MARIADB_SRC_BASE_DIR}/$distfile\" | tar -C \"$MARIADB_SRC_BASE_DIR\" -xf -" >> ${logdir}/main.log + +gunzip < "${MARIADB_SRC_BASE_DIR}/$distfile" | tar -C "$MARIADB_SRC_BASE_DIR" -xf - +if [ "$?" = "0" ]; then + echo_ok +else + echo_failed + fatal Kann MariaDB Sourcearchiv \"${distfile}\" nicht entpacken.. +fi + +echononl "Wechsle in das Verzeichnis '${MARIADB_SRC_DIR}'.." +echo "" >> ${logdir}/main.log +echo "## - Wechsle in das Verzeichnis '${MARIADB_SRC_DIR}'" >> ${logdir}/main.log +echo "## -" >> ${logdir}/main.log +echo "cd ${MARIADB_SRC_DIR}" >> ${logdir}/main.log +cd ${MARIADB_SRC_DIR} >> ${logdir}/main.log 2>&1 +if [ "$?" = "0" ]; then + echo_ok +else + echo_failed + fatal "Kann nicht in das Sourceverzeicnis '${MARIADB_SRC_DIR}' wechseln!" +fi + + +# - NOT supported (in contrast to original MySQL) +# - +# - -DINSTALL_SECURE_FILE_PRIVDIR=\"\" +# - -DDOWNLOAD_BOOST=1 +# - -DWITH_BOOST=$MARIADB_INSTALL_DIR +# - +# - -DSYSTEMD_PID_DIR=$SYSTEMD_PID_DIR" +# - +# - +# - Options enabled /not availabe at original MySQL) +# - +# - configured exactly as the binary releases from MariaDB +# - -DBUILD_CONFIG=mysql_release +# - creates libmysql* symbolic links: +# - -CONC_WITH_MYSQLCOMPAT=ON +# - groonga log file path +# - -GRN_LOG_PATH=${MARIADB_LOG_DIR}/groonga.log +# - +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=" + . + -DBUILD_CONFIG=mysql_release + -DCMAKE_INSTALL_PREFIX=$MARIADB_INSTALL_DIR + -DMYSQL_DATADIR=$MARIADB_DATA_DIR + -DENABLED_LOCAL_INFILE=ON + -DGRN_LOG_PATH=$mariadb_groonga_log + -DCONC_WITH_MYSQLCOMPAT=ON +" +if $INSTALL_SYSTEMD_SERVICE ; then + cmake_options="$cmake_options -DWITH_SYSTEMD=yes" +fi +echo "cmake_options=\"$cmake_options\"" >> ${logdir}/main.log +echo_ok + +echononl "Konfiguriere MariaDB (cmake).." +echo "" >> ${logdir}/main.log +echo "# - Konfiguriere MariaDB (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 +if [ "$?" = "0" ]; then + echo_ok +else + echo_failed + fatal Konfiguration fehlgeschlagen. Siehe ${logdir}/cmake-conf.log .. +fi + +echononl "Kompiliere MariaDB.." +echo "" >> ${logdir}/main.log +echo "## - Kompiliere MariaDB" >> ${logdir}/main.log +echo "## -" >> ${logdir}/main.log +echo "## - See: ${logdir}/make.log" >> ${logdir}/main.log +echo "## -" >> ${logdir}/main.log +echo "make" >> ${logdir}/main.log +make > ${logdir}/make.log 2>&1 +if [ "$?" = "0" ]; then + echo_ok +else + echo_failed + fatal Kompilieren der MariaDB Sourcen ist fehlgeschlagen. Siehe ${logdir}/make.log .. +fi + +echononl "Installiere MariaDB.." +echo "" >> ${logdir}/main.log +echo "## - Installiere MariaDB" >> ${logdir}/main.log +echo "## -" >> ${logdir}/main.log +echo "## - See: ${logdir}/make_install.log" >> ${logdir}/main.log +echo "## -" >> ${logdir}/main.log +echo "make install" >> ${logdir}/main.log +make install > ${logdir}/make_install.log 2>&1 +if [ "$?" = "0" ]; then + echo_ok +else + echo_failed + fatal Installieren von MariaDB ist fehlgeschlagen. Siehe ${logdir}/make_install.log .. +fi + + +## ----- +## - Einbinden der MariaDB Installation in das System +## ----- + +echo "" +echo "" +echo -e "\033[37m\033[1mEinbinden der MariaDB $MARIADB_VERSION Installation in das System\033[m" +echo "" + +echo "" >> ${logdir}/main.log +echo "" >> ${logdir}/main.log +echo "## -----" >> ${logdir}/main.log +echo "## - Einbinden der MariaDB $MARIADB_VERSION Installation in das System" >> ${logdir}/main.log +echo "## -----" >> ${logdir}/main.log + +echononl "Konfiguriere Manpages.." +_done=false +if [ -f /etc/manpath.config ];then + if ! grep /usr/local/mysql/man /etc/manpath.config > /dev/null 2<&1 ; then + echo "## - Konfiguriere Manpages" >> ${logdir}/main.log + echo "## -" >> ${logdir}/main.log + echo "## - Fuege folgend Zeilen am Ende der Datei \"/etc/manpath.config\" hinzu:" >> ${logdir}/main.log + echo "## -" >> ${logdir}/main.log + echo "## - MANDATORY_MANPATH /usr/local/mysql/man /var/cache/man" >> ${logdir}/main.log + echo "## - MANPATH_MAP /usr/local/mysql/bin /usr/local/mysql/man" >> ${logdir}/main.log + echo "## - MANPATH_MAP /usr/local/mysql/bin /usr/local/mysql/man" >> ${logdir}/main.log + echo "## -" >> ${logdir}/main.log + + echo >> /etc/manpath.config + echo "MANDATORY_MANPATH /usr/local/mysql/man /var/cache/man" >> /etc/manpath.config + echo "MANPATH_MAP /usr/local/mysql/bin /usr/local/mysql/man" >> /etc/manpath.config + echo "MANDB_MAP /usr/local/mysql/man /var/cache/man" >> /etc/manpath.config + + _done=true + fi +elif [ -f /etc/man.conf];then + if ! grep /opt/apache2/man /etc/man.conf > /dev/null 2<&1 ; then + echo "## - Konfiguriere Manpages" >> ${logdir}/main.log + echo "## -" >> ${logdir}/main.log + echo "## - Fuege folgend Zeilen am Ende der Datei \"/etc/man.conf\" hinzu:" >> ${logdir}/main.log + echo "## -" >> ${logdir}/main.log + echo "## - MANPATH /opt/mysql/man /var/cache/man" >> ${logdir}/main.log + echo "## - MANPATH_MAP /opt/mysql/bin /opt/apache2/man" >> ${logdir}/main.log + echo "## -" >> ${logdir}/main.log + + echo >> /etc/man.conf + echo "MANPATH /opt/mysql/man /var/cache/man" >> /etc/man.conf + echo "MANPATH_MAP /opt/mysql/bin /opt/apache2/man" >> /etc/man.conf + + _done=true + fi +fi +if $_done ; then + echo_ok +else + echo_skipped +fi + +## - Symlink Installationsverzeichnis (i.d.R. /usr/local/mysql) +## - +if $SYMLINK_INSTALL_DIR ; then + + echononl "Entferne vorhandenen Symlink `dirname $MARIADB_INSTALL_DIR`/mysql.." + if [[ -h "$(dirname $MARIADB_INSTALL_DIR)/mysql" ]]; then + echo "" >> ${logdir}/main.log + echo "## - Entferne vorhandenen Symlink `dirname $MARIADB_INSTALL_DIR`/mysql" >> ${logdir}/main.log + echo "## -" >> ${logdir}/main.log + echo "rm \"$(dirname $MARIADB_INSTALL_DIR)/mysql\"" >> ${logdir}/main.log + rm "$(dirname $MARIADB_INSTALL_DIR)/mysql" >> ${logdir}/main.log 2>&1 + if [ "$?" = "0" ]; then + echo_ok + else + echo_failed + error Kann Symlink `dirname $MARIADB_INSTALL_DIR`/mysql nicht entfernen.. + fi + else + echo_skipped + fi + + echononl "Verschiebe Verzeichnis '$(dirname $MARIADB_INSTALL_DIR)/mysql' ..." + if [ -d "$(dirname $MARIADB_INSTALL_DIR)/mysql" ]; then + echo "" >> ${logdir}/main.log + echo "## - Verschiebe Verzeichnis '$(dirname $MARIADB_INSTALL_DIR)/mysql'" >> ${logdir}/main.log + echo "## -" >> ${logdir}/main.log + echo "mv \"$(dirname $MARIADB_INSTALL_DIR)/mysql)\" \"$(dirname $MARIADB_INSTALL_DIR)/mysql.$(date +"%Y%m%d-%H%M")" \ + >> ${logdir}/main.log + mv "$(dirname $MARIADB_INSTALL_DIR)/mysql" "$(dirname $MARIADB_INSTALL_DIR)/mysql.$(date +"%Y%m%d-%H%M")" \ + >> ${logdir}/main.log 2>&1 + if [ "$?" = "0" ]; then + echo_ok + else + echo_failed + error Kann Installationsverzeichnis \"${MARIADB_INSTALL_DIR}\" nicht verschieben.. + fi + else + echo_skipped + fi + + echononl "Erstelle Symlink $(dirname $MARIADB_INSTALL_DIR)/mysql --> $MARIADB_INSTALL_DIR" + echo "" >> ${logdir}/main.log + echo "## - Erstelle Symlink $(dirname $MARIADB_INSTALL_DIR)/mysql --> $MARIADB_INSTALL_DIR" >> ${logdir}/main.log + echo "## -" >> ${logdir}/main.log + echo "ln -s \"$(basename $MARIADB_INSTALL_DIR)\" \"$(dirname $MARIADB_INSTALL_DIR)/mysql\"" >> ${logdir}/main.log + ln -s "$(basename $MARIADB_INSTALL_DIR)" "$(dirname $MARIADB_INSTALL_DIR)/mysql" >> ${logdir}/main.log 2>&1 + if [ "$?" = "0" ]; then + echo_ok + else + echo_failed + error Kann Symlink `basename $MARIADB_INSTALL_DIR` --> `dirname $MARIADB_INSTALL_DIR`/mysql nicht erstellen .. + fi +fi + +## - Symlink Datenverzeichnis +## - +if $SYMLINK_DATA_DIR ; then + + if [ -h "$(dirname $MARIADB_DATA_DIR)/mysql" ]; then + echononl "Entferne vorhandenen Symlink '$(dirname $MARIADB_DATA_DIR)/mysql'.." + echo "" >> ${logdir}/main.log + echo "## - Entferne vorhandenen Symlink '$(dirname $MARIADB_DATA_DIR)/mysql'" >> ${logdir}/main.log + echo "## -" >> ${logdir}/main.log + echo "rm $(dirname $MARIADB_DATA_DIR)/mysql" >> ${logdir}/main.log + rm $(dirname $MARIADB_DATA_DIR)/mysql >> ${logdir}/main.log 2>&1 + if [ "$?" = "0" ]; then + echo_ok + else + echo_failed + error Kann Symlink `dirname $MARIADB_DATA_DIR`/mysql nicht entfernen.. + fi + fi + + if [ -d "$(dirname $MARIADB_DATA_DIR)/mysql" ]; then + echononl "Verschiebe Verzeichnis '$(dirname $MARIADB_DATA_DIR)/mysql' ..." + echo "" >> ${logdir}/main.log + echo "## - Verschiebe Verzeichnis '$(dirname $MARIADB_DATA_DIR)/mysql'" >> ${logdir}/main.log + echo "## -" >> ${logdir}/main.log + echo "mv \"$(dirname $MARIADB_DATA_DIR)/mysql\" \"$(dirname $MARIADB_DATA_DIR)/mysql.$(date +"%Y%m%d-%H%M")" \ + >> ${logdir}/main.log + mv "$(dirname $MARIADB_DATA_DIR)/mysql" "$(dirname $MARIADB_DATA_DIR)/mysql.$(date +"%Y%m%d-%H%M")" \ + >> ${logdir}/main.log 2>&1 + if [ "$?" = "0" ]; then + echo_ok + else + echo_failed + error Kann Datenverzeichnis \"${MARIADB_DATA_DIR}\" nicht verschieben.. + fi + fi + + echononl "Erstelle Symlink `dirname $MARIADB_DATA_DIR`/mysql --> $MARIADB_DATA_DIR" + echo "" >> ${logdir}/main.log + echo "## - Erstelle Symlink `dirname $MARIADB_DATA_DIR`/mysql --> $MARIADB_DATA_DIR" >> ${logdir}/main.log + echo "## -" >> ${logdir}/main.log + echo "ln -s \"$(basename $MARIADB_DATA_DIR)\" \"$(dirname $MARIADB_DATA_DIR)/mysql\"" >> ${logdir}/main.log + ln -s "$(basename $MARIADB_DATA_DIR)" "$(dirname $MARIADB_DATA_DIR)/mysql" >> ${logdir}/main.log 2>&1 + if [ "$?" = "0" ]; then + echo_ok + else + echo_failed + error "Kann Symlink $(basename $MARIADB_DATA_DIR) --> $(dirname $MARIADB_DATA_DIR)/mysql nicht erstellen .." + fi +fi + + +_checkdir="$(dirname "$MARIADB_INSTALL_DIR")/mysql/bin" +echononl "Füge '$_checkdir' zur PATH Variable hinzu .." +if [ -f /etc/profile ]; then + if ! grep -e "$_checkdir" /etc/profile > /dev/null 2<&1 ; then + echo "" >> ${logdir}/main.log + echo "## - Füge `dirname $MARIADB_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=\$_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 $_checkdir >> ${logdir}/main.log 2>&1 ; then + export PATH=${_checkdir}:$PATH + fi + + else + echo_skipped + fi +else + echo_skipped +fi + + +## ----- +## - Konfiguration ( Teil 1) MariaDB Installation +## ----- + +echo "" +echo "" +echo -e "\033[37m\033[1mKonfiguration (Teil 1) der MariaDB $MARIADB_VERSION Installation\033[m" +echo "" + +echo "" >> ${logdir}/main.log +echo "" >> ${logdir}/main.log +echo "## -----" >> ${logdir}/main.log +echo "## - Konfiguration (Teil 1) der MariaDB $MARIADB_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 +echo "## -" >> ${logdir}/main.log +echo "cat << EOF >/etc/ld.so.conf.d/mysql.conf +`dirname $MARIADB_INSTALL_DIR`/mysql/lib +EOF" >> ${logdir}/main.log + +cat << EOF >/etc/ld.so.conf.d/mysql.conf +`dirname $MARIADB_INSTALL_DIR`/mysql/lib +EOF +if [ "$?" = "0" ]; then + echo_ok +else + echo_failed + error Kann Datei /etc/ld.so.conf.d/mysql.conf für dynamischen Linker nicht erstellen .. +fi + +echononl "Erstelle symbolische Links auf Libraries (ldconfig).." +echo "" >> ${logdir}/main.log +echo "## - Erstelle symbolische Links auf Libraries (ldconfig)" >> ${logdir}/main.log +echo "## -" >> ${logdir}/main.log +echo "ldconfig" >> ${logdir}/main.log +ldconfig >> ${logdir}/main.log 2>&1 +if [ "$?" = "0" ]; then + echo_ok +else + echo_failed + error "Der Befehl \"ldconfig\" ist fehgeschlagen" +fi + +echo +echononl "Richte MariaDB Systemtabellen ein.." +if ! $UPDATE_MARIADB ; then + cd $MARIADB_INSTALL_DIR + echo "" >> ${logdir}/main.log + echo "## - Richte MariaDB Systemtabellen ein" >> ${logdir}/main.log + echo "## -" >> ${logdir}/main.log + echo "${MARIADB_INSTALL_DIR}/scripts/mysql_install_db \ " >> ${logdir}/main.log + echo " --user=$MARIADB_USER \ " >> ${logdir}/main.log + echo " --basedir=$MARIADB_INSTALL_DIR \ " >> ${logdir}/main.log + echo " --datadir=$MARIADB_DATA_DIR \ " >> ${logdir}/main.log + echo " --language=$MARIADB_INSTALL_DIR/share/german" >> ${logdir}/main.log + echo "" >> ${logdir}/main.log + + ${MARIADB_INSTALL_DIR}/scripts/mysql_install_db \ + --user=$MARIADB_USER \ + --basedir=$MARIADB_INSTALL_DIR \ + --datadir=$MARIADB_DATA_DIR \ + --lc-messages-dir=$MARIADB_INSTALL_DIR/share/german \ + >> ${logdir}/main.log 2>&1 + if [ "$?" = "0" ]; then + echo_ok + else + echo_failed + error Das Einrichten der MariaDB 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 +fi + + +echononl "Create directory \"etc\".." +cd $MARIADB_INSTALL_DIR +echo "" >> ${logdir}/main.log +echo "## - Create directory \"etc\"" >> ${logdir}/main.log +echo "## -" >> ${logdir}/main.log +echo "cd $MARIADB_INSTALL_DIR" >> ${logdir}/main.log +echo "mkdir ${MARIADB_INSTALL_DIR}/etc" >> ${logdir}/main.log +mkdir ${MARIADB_INSTALL_DIR}/etc >> ${logdir}/main.log 2>&1 +if [ "$?" = "0" ]; then + echo_ok +else + echo_failed +fi + +echononl "Change permissions (755) to directory \"etc\".." +echo "" >> ${logdir}/main.log +echo "## - Change permissions (755) to directory \"etc\"" >> ${logdir}/main.log +echo "## -" >> ${logdir}/main.log +echo "chmod 755 ${MARIADB_INSTALL_DIR}/etc" >> ${logdir}/main.log +chmod 755 ${MARIADB_INSTALL_DIR}/etc >> ${logdir}/main.log 2>&1 +if [ "$?" = "0" ]; then + echo_ok +else + echo_failed +fi + + +echononl "Create directory \"mysql-files\".." +cd $MARIADB_INSTALL_DIR +echo "" >> ${logdir}/main.log +echo "## - Create directory \"mysql-files\"" >> ${logdir}/main.log +echo "## -" >> ${logdir}/main.log +echo "cd $MARIADB_INSTALL_DIR" >> ${logdir}/main.log +echo "mkdir ${MARIADB_INSTALL_DIR}/mysql-files" >> ${logdir}/main.log +mkdir ${MARIADB_INSTALL_DIR}/mysql-files >> ${logdir}/main.log 2>&1 +if [ "$?" = "0" ]; then + echo_ok +else + echo_failed +fi + +echononl "Change permissions (770) to directory \"mysql-files\".." +echo "" >> ${logdir}/main.log +echo "## - Change permissions (770) to directory \"mysql-files\"" >> ${logdir}/main.log +echo "## -" >> ${logdir}/main.log +echo "chmod 770 ${MARIADB_INSTALL_DIR}/mysql-files" >> ${logdir}/main.log +chmod 770 ${MARIADB_INSTALL_DIR}/mysql-files >> ${logdir}/main.log 2>&1 +if [ "$?" = "0" ]; then + echo_ok +else + echo_failed +fi + +echononl "Change owner ($MARIADB_USER) of directory 'mysql-files'.." +echo "" >> ${logdir}/main.log +echo "## - Change owner ($MARIADB_USER) of directory 'mysql-files'" >> ${logdir}/main.log +echo "## -" >> ${logdir}/main.log +echo "chown $MARIADB_USER ${MARIADB_INSTALL_DIR}/mysql-files" >> ${logdir}/main.log +chown $MARIADB_USER ${MARIADB_INSTALL_DIR}/mysql-files >> ${logdir}/main.log 2>&1 +if [ "$?" = "0" ]; then + echo_ok +else + echo_failed +fi + +echononl "Generate MariaDB SSL Certificate and RSA Key.." +echo "" >> ${logdir}/main.log +echo "## - Generate MariaDB SSL Certificate and RSA Key" >> ${logdir}/main.log +echo "## -" >> ${logdir}/main.log +echo "cd $MARIADB_INSTALL_DIR" >> ${logdir}/main.log +cd $MARIADB_INSTALL_DIR +echo "${MARIADB_INSTALL_DIR}/bin/mysql_ssl_rsa_setup --datadir=$MARIADB_DATA_DIR .." >> ${logdir}/main.log +if [[ -x "${MARIADB_INSTALL_DIR}/bin/mysql_ssl_rsa_setup" ]] ; then + ${MARIADB_INSTALL_DIR}/bin/mysql_ssl_rsa_setup --datadir=$MARIADB_DATA_DIR >> ${logdir}/main.log 2>&1 + if [ "$?" = "0" ]; then + echo_ok + else + echo_failed + error "Generating MariaDB 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 +else + echo_skipped + warn "Script for generating certificates (mysql_ssl_rsa_setup) is not supported" +fi + +echononl "Setze Besitzer/Gruppe für das Datenbankverzeichnis.." +echo "" >> ${logdir}/main.log +echo "## - Setze Besitzer/Gruppe für das Datenbankverzeichnis" >> ${logdir}/main.log +echo "## -" >> ${logdir}/main.log +echo "chown -R ${MARIADB_USER}:$MARIADB_GROUP $MARIADB_DATA_DIR" >> ${logdir}/main.log +chown -R ${MARIADB_USER}:$MARIADB_GROUP $MARIADB_DATA_DIR >> ${logdir}/main.log 2>&1 +if [ "$?" = "0" ]; then + echo_ok +else + echo_failed + error Konnte Besitzer/Gruppe für das Datenbankverzeichnis $MARIADB_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 + + +_new_cnf_needed=false +if $UPDATE_MARIADB ; then + + _my_cnf_old= + if [[ "$CURRENT_VERSION" = "$MARIADB_VERSION" ]] ; then + if [[ -f "$(realpath ${MARIADB_CUR_INSTALL_DIR}).${_backup_date}/etc/my.cnf" ]]; then + _my_cnf_old="$(realpath ${MARIADB_CUR_INSTALL_DIR}).${_backup_date}/etc/my.cnf" + elif [[ -f "$(realpath ${MARIADB_CUR_INSTALL_DIR}).${_backup_date}/my.cnf" ]]; then + _my_cnf_old="$(realpath ${MARIADB_CUR_INSTALL_DIR}).${_backup_date}/my.cnf" + fi + else + if [[ -f "$(realpath ${MARIADB_CUR_INSTALL_DIR})/etc/my.cnf" ]]; then + _my_cnf_old="$(realpath ${MARIADB_CUR_INSTALL_DIR})/etc/my.cnf" + elif [[ -f "$(realpath ${MARIADB_CUR_INSTALL_DIR})/my.cnf" ]]; then + _my_cnf_old="$(realpath ${MARIADB_CUR_INSTALL_DIR})/my.cnf" + fi + fi + + echononl "Copy 'my.cnf from old installation to the new one.." + if [[ -f "$_my_cnf_old" ]] ; 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 \"$_my_cnf_old\" \"${MY_CNF_FILE}\"" >> ${logdir}/main.log + cp -a "$_my_cnf_old" "${MY_CNF_FILE}" >> ${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_skipped + fi + + if [[ ! -f "$MY_CNF_FILE" ]] ; then + _new_cnf_needed=true + else + + proof_var="thread_concurrency" + echononl "Deaktiviere '${proof_var} .." + if grep -q -E "^\s*${proof_var}.*" "$MY_CNF_FILE" 2> /dev/null ; then + echo "" >> ${logdir}/main.log + echo "## - Deaktiviere '${proof_var} .." >> ${logdir}/main.log + echo "## -" >> ${logdir}/main.log + echo "perl -i -n -p -e \"s/^(\s*)(${proof_var}.*)/#\1\2/\" \"$MY_CNF_FILE\"" >> ${logdir}/main.log + perl -i -n -p -e "s/^(\s*)(${proof_var}.*)/#\1\2/" "$MY_CNF_FILE" >> ${logdir}/main.log 2>&1 + if [ "$?" = "0" ]; then + echo_ok + else + echo_failed + warn "Konnte '${proof_var}' nicht deaktivieren." + fi + else + echo_skipped + fi + + proof_var="innodb_additional_mem_pool_size" + echononl "Deaktiviere '${proof_var} .." + if grep -q -E "^\s*${proof_var}.*" "$MY_CNF_FILE" 2> /dev/null ; then + echo "" >> ${logdir}/main.log + echo "## - Deaktiviere '${proof_var} .." >> ${logdir}/main.log + echo "## -" >> ${logdir}/main.log + echo "perl -i -n -p -e \"s/^(\s*)(${proof_var}.*)/#\1\2/\" \"$MY_CNF_FILE\"" >> ${logdir}/main.log + perl -i -n -p -e "s/^(\s*)(${proof_var}.*)/#\1\2/" "$MY_CNF_FILE" >> ${logdir}/main.log 2>&1 + if [ "$?" = "0" ]; then + echo_ok + else + echo_failed + warn "Konnte '${proof_var}' nicht deaktivieren." + fi + else + echo_skipped + fi + + fi +fi + + + +if ! $UPDATE_MARIADB || $_new_cnf_needed ; then + echononl "Erstelle Konfigurationsdatei ${MARIADB_INSTALL_DIR}/etc/my.cnf.." + + echo "" >> ${logdir}/main.log + echo "## - Erstelle Konfigurationsdatei ${MARIADB_INSTALL_DIR}/etc/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` + + echo "" >> ${logdir}/main.log + echo "let MARIADB_THREAD_CONCURRENCY=$_number_cpus*2" >> ${logdir}/main.log + let MARIADB_THREAD_CONCURRENCY=$_number_cpus*2 + + echo "" >> ${logdir}/main.log + echo "\$MARIADB_THREAD_CONCURRENCY = $MARIADB_THREAD_CONCURRENCY" >> ${logdir}/main.log + + echo "cat << EOF > ${MARIADB_INSTALL_DIR}/etc/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 = $MARIADB_PORT +socket = $MARIADB_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 = $MARIADB_UNIX_SOCKET +nice = 0 + +open-files-limit = $(ulimit -Hn) +innodb_open_files = $(ulimit -Hn) + + +# The MySQL server +[mysqld] +port = $MARIADB_PORT +socket = $MARIADB_UNIX_SOCKET + + +## - sql-mode +## - +## - To be compartible with older programming on mysql 5.6 +## - +#sql-mode = \"ONLY_FULL_GROUP_BY,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION\" + + +## - 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 $MARIADB_INSTALL_DIR)/mysql/share +## - +## - bis 5.1.x +## - +## - language=$(dirname $MARIADB_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 = $mariadb_error_log + + +## - Query Log +## - +#general-log = on +#general_log_file = $mariadb_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 = $mariadb_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 + + +## - sql-mode +## - +## - To be compartible with older programming on mysql 5.6 +## - +#sql-mode = "ONLY_FULL_GROUP_BY,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION" + +EOF" >> ${logdir}/main.log + + cat << EOF > ${MARIADB_INSTALL_DIR}/etc/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 = $MARIADB_PORT +socket = $MARIADB_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 = $MARIADB_UNIX_SOCKET +nice = 0 + +open-files-limit = $(ulimit -Hn) +innodb_open_files = $(ulimit -Hn) + + +# The MySQL server +[mysqld] +port = $MARIADB_PORT +socket = $MARIADB_UNIX_SOCKET + + +## - sql-mode +## - +## - To be compartible with older programming on mysql 5.6 +## - +#sql-mode = "ONLY_FULL_GROUP_BY,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION" + + +## - 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 $MARIADB_INSTALL_DIR)/mysql/share +## - +## - bis 5.1.x +## - +## - language=$(dirname $MARIADB_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 = $mariadb_error_log + + +## - Query Log +## - +#general-log = on +#general_log_file = $mariadb_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 = $mariadb_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 + + +## - sql-mode +## - +## - To be compartible with older programming on mysql 5.6 +## - +#sql-mode = "ONLY_FULL_GROUP_BY,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION" + +EOF + if [ "$?" = "0" ]; then + echo_ok + else + echo_failed + error Konnte Konfigurationsdatei \"${MARIADB_INSTALL_DIR}/etc/my.cnf\" nicht erstellen.. + fi + +fi + +if [[ ! -d "/etc/mysql" ]]; then + + echononl "Erstelle Verzeichnis '/etc/mysql' .." + echo "" >> ${logdir}/main.log + echo "## - Erstelle Verzeichnis '/etc/mysql' .." >> ${logdir}/main.log + echo "## -" >> ${logdir}/main.log + echo "mkdir \"/etc/mysql\"" >> ${logdir}/main.log + mkdir "/etc/mysql" >> ${logdir}/main.log 2>&1 + if [ "$?" = "0" ]; then + echo_ok + else + echo_failed + error "Konnte Verzeichnis '/etc/mysql' nicht erstellen" + fi + +else + + if [[ -f "/etc/mysql/my.cnf" ]]; then + echononl "Backup Symlink/Datei '/etc/mysql/my.cnf' .." + echo "" >> ${logdir}/main.log + echo "## - Backup Symlink/Datei '/etc/mysql/my.cnf' .." >> ${logdir}/main.log + echo "## -" >> ${logdir}/main.log + echo "## -" >> ${logdir}/main.log + echo "mv \"/etc/mysql/my.cnf\" \"/etc/mysql/my.cnf.${_backup_date}\"" >> ${logdir}/main.log + mv "/etc/mysql/my.cnf" "/etc/mysql/my.cnf.${_backup_date}" >> ${logdir}/main.log 2>&1 + if [ "$?" = "0" ]; then + echo_ok + else + echo_failed + error "Konnte Symlink/Datei '/etc/mysql/my.cnf' nicht sichern." + fi + fi + +fi + +echononl "Erstelle Symlink /etc/mysql/my.cnf --> ${MARIADB_INSTALL_DIR}/etc/my.cnf" +echo "" >> ${logdir}/main.log +echo "## - Erstelle Symlink /etc/mysql/my.cnf --> ${MARIADB_INSTALL_DIR}/etc/my.cnf" >> ${logdir}/main.log +echo "## -" >> ${logdir}/main.log +echo "ln -s \"$(dirname \"${MARIADB_INSTALL_DIR}\")/mysql/etc/my.cnf\" \"/etc/mysql/\"" >> ${logdir}/main.log +ln -s "$(dirname "${MARIADB_INSTALL_DIR}")/mysql/etc/my.cnf" "/etc/mysql/my.cnf" >> ${logdir}/main.log 2>&1 +if [ "$?" = "0" ]; then + echo_ok +else + echo_failed + error "Konnte Symlink /etc/mysql/my.cnf --> ${MARIADB_INSTALL_DIR}/etc/my.cnf nicht erstellen." +fi + + +echononl "Kopiere 'stopwords_utf8_iso8859-15.txt' -> ${MARIADB_INSTALL_DIR}.." +if [ -f "${MARIADB_SRC_BASE_DIR}/stopwords_utf8_iso8859-15.txt" ];then + echo "" >> ${logdir}/main.log + echo "## - Kopiere 'stopwords_utf8_iso8859-15.txt' -> ${MARIADB_INSTALL_DIR}" >> ${logdir}/main.log + echo "## -" >> ${logdir}/main.log + echo "cp ${MARIADB_SRC_BASE_DIR}/stopwords_utf8_iso8859-15.txt ${MARIADB_INSTALL_DIR}" >> ${logdir}/main.log + + cp ${MARIADB_SRC_BASE_DIR}/stopwords_utf8_iso8859-15.txt ${MARIADB_INSTALL_DIR} + if [ "$?" = "0" ]; then + echo_ok + + echononl "Aktiviere Stopword Datei.." + if ! grep -q -E "^\s*ft_stopword_file.*" "${MARIADB_INSTALL_DIR}/etc/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/\" ${MARIADB_INSTALL_DIR}/etc/my.cnf" >> ${logdir}/main.log + perl -i -n -p -e "s/^(\s*#\s*)(ft_stopword_file.*)/#\1\2\n\2/" ${MARIADB_INSTALL_DIR}/etc/my.cnf >> ${logdir}/main.log 2>&1 + if [ "$?" = "0" ]; then + echo_ok + else + echo_failed + warn "Konnte Stopword Datei \"stopwords_utf8_iso8859-15.txt\" nicht aktivieren." + fi + else + echo_skipped + fi + + else + echo_failed + warn "Konnte stopwords_utf8_iso8859-15.txt nicht nach ${MARIADB_INSTALL_DIR} kopieren" + fi +else + echo_skipped + warn "Konnte ${MARIADB_SRC_BASE_DIR}/stopwords_utf8_iso8859-15.txt finden." +fi + + +if $INSTALL_SYSTEMD_SERVICE ; then + + echononl "Kopiere Service File nach '/etc/systemd/system'.." + echo "" >> ${logdir}/main.log + echo "## - Kopiere Service File nach '/etc/systemd/system'" >> ${logdir}/main.log + echo "## -" >> ${logdir}/main.log + echo "cp \"${MARIADB_INSTALL_DIR}/support-files/systemd/mariadb.service\" /etc/systemd/system/$MARIADB_SERVICE_FILE" >> ${logdir}/main.log + cp "${MARIADB_INSTALL_DIR}/support-files/systemd/mariadb.service" /etc/systemd/system/$MARIADB_SERVICE_FILE >> ${logdir}/main.log 2>&1 + + if [[ $? -eq 0 ]]; then + echo_ok + else + echo_failed + error "Kopieren Service File nach '/etc/systemd/system/${MARIADB_SERVICE_FILE}' 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 "Set open_files_limit (LimitNOFILE) to $(ulimit -Hn) .." + echo "" >> ${logdir}/main.log + echo "## - Set open_files_limit (LimitNOFILE) to $(ulimit -Hn) .." >> ${logdir}/main.log + echo "## -" >> ${logdir}/main.log + + if grep -q -E "^\s*LimitNOFILE\s*=" /etc/systemd/system/$MARIADB_SERVICE_FILE ; then + echo "perl -i -n -p -e \"s/^(\s*LimitNOFILE\s*=.*)/#\1\nLimitNOFILE = $(ulimit -Hn)/\" /etc/systemd/system/$MARIADB_SERVICE_FILE" >> ${logdir}/main.log + perl -i -n -p -e "s/^(\s*LimitNOFILE\s*=.*)/#\1\nLimitNOFILE = $(ulimit -Hn)/" \ + /etc/systemd/system/$MARIADB_SERVICE_FILE >> ${logdir}/main.log 2>&1 + _retval=$? + else + echo "LimitNOFILE = $(ulimit -Hn)" >> /etc/systemd/system/$MARIADB_SERVICE_FILE + _retval=$? + fi + if [ "$_retval" = "0" ]; then + echo_ok + else + echo_failed + error "Setting open_files_limit (LimitNOFILE) to $(ulimit -Hn) failed!" + fi + + echononl "Aktiviere den MariaDB Datenbank Service für den automatischem Start.." + echo "" >> ${logdir}/main.log + echo "## - Aktiviere den MariaDB Datenban Service für den automatischem Start" >> ${logdir}/main.log + echo "## -" >> ${logdir}/main.log + echo "systemctl enable $MARIADB_SERVICE_FILE" >> ${logdir}/main.log + systemctl enable $MARIADB_SERVICE_FILE >> ${logdir}/main.log 2>&1 + if [ "$?" = "0" ]; then + echo_ok + else + echo_failed + error "Aktivieren des MariaDB Datenbank Service für den automatischem Start fehgeschalgen!" + fi + + 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 + echo_ok + else + echo_failed + error "Run 'systemctl daemon-reload' failed!" + fi + + +else + + if [ -h "/etc/init.d/${MARIADB_SYSV_INIT_SCRIPT}" ]; then + echononl "Entferne vorhandenen Symlink \"/etc/init.d/${MARIADB_SYSV_INIT_SCRIPT}\".." + echo "" >> ${logdir}/main.log + echo "## - Entferne vorhandenen Symlink \"/etc/init.d/${MARIADB_SYSV_INIT_SCRIPT}\"" >> ${logdir}/main.log + echo "## -" >> ${logdir}/main.log + echo "rm /etc/init.d/${MARIADB_SYSV_INIT_SCRIPT}" >> ${logdir}/main.log + rm /etc/init.d/${MARIADB_SYSV_INIT_SCRIPT} >> ${logdir}/main.log 2>&1 + if [ "$?" = "0" ]; then + echo_ok + else + echo_failed + error Kann Symlink /etc/init.d/${MARIADB_SYSV_INIT_SCRIPT} nicht entfernen.. + fi + fi + + if [ -f "/etc/init.d/${MARIADB_SYSV_INIT_SCRIPT}" ]; then + echononl "Entferne vorhandenen Datei \"/etc/init.d/${MARIADB_SYSV_INIT_SCRIPT}\".." + echo "" >> ${logdir}/main.log + echo "## - Entferne vorhandenen Datei \"/etc/init.d/${MARIADB_SYSV_INIT_SCRIPT}\"" >> ${logdir}/main.log + echo "## -" >> ${logdir}/main.log + echo "rm /etc/init.d/${MARIADB_SYSV_INIT_SCRIPT}" >> ${logdir}/main.log + rm /etc/init.d/${MARIADB_SYSV_INIT_SCRIPT} >> ${logdir}/main.log 2>&1 + if [ "$?" = "0" ]; then + echo_ok + else + echo_failed + error Kann Datei /etc/init.d/${MARIADB_SYSV_INIT_SCRIPT} nicht entfernen.. + fi + fi + + + echononl "Erstelle Symlink \"/etc/init.d/${MARIADB_SYSV_INIT_SCRIPT}\".." + echo "" >> ${logdir}/main.log + echo "## - Erstelle Symlink \"/etc/init.d/${MARIADB_SYSV_INIT_SCRIPT}\"" >> ${logdir}/main.log + echo "## -" >> ${logdir}/main.log + echo "ln -s \"$(dirname $MARIADB_INSTALL_DIR)/mysql/support-files/${MARIADB_SYSV_INIT_SCRIPT}\" \"/etc/init.d/${MARIADB_SYSV_INIT_SCRIPT}\"" >> ${logdir}/main.log + ln -s "$(dirname $MARIADB_INSTALL_DIR)/mysql/support-files/${MARIADB_SYSV_INIT_SCRIPT}" /etc/init.d/${MARIADB_SYSV_INIT_SCRIPT} >> ${logdir}/main.log 2>&1 + if [ "$?" = "0" ]; then + echo_ok + else + echo_failed + error "Kann Symlink $MARIADB_INSTALL_DIR/support-files/${MARIADB_SYSV_INIT_SCRIPT} --> /etc/init.d/${MARIADB_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/${MARIADB_SYSV_INIT_SCRIPT}" >> ${logdir}/main.log + sed -i "1 s/\(.*\)/\1\n\nulimit -n \`ulimit -Hn\`\n/" $(realpath /etc/init.d/${MARIADB_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/${MARIADB_SYSV_INIT_SCRIPT} nicht setzen.." + fi + + echononl "Aktiviere den MariaDB Datenbank Service für den automatischem Start" + echo "" >> ${logdir}/main.log + echo "## - Aktiviere den MariaDB Datenbank Service für den automatischem Start" >> ${logdir}/main.log + echo "## -" >> ${logdir}/main.log + if $SYSTEMD_EXISTS ; then + echo "systemctl enable ${MARIADB_SYSV_INIT_SCRIPT}" >> ${logdir}/main.log + systemctl enable ${MARIADB_SYSV_INIT_SCRIPT} >> ${logdir}/main.log 2>&1 + else + echo "update-rc.d ${MARIADB_SYSV_INIT_SCRIPT} defaults" >> ${logdir}/main.log + update-rc.d ${MARIADB_SYSV_INIT_SCRIPT} defaults >> ${logdir}/main.log 2>&1 + fi + if [ "$?" = "0" ]; then + echo_ok + else + echo_failed + if $SYSTEMD_EXISTS ; then + error "Konnte \"${MARIADB_SYSV_INIT_SCRIPT}\" im systemd nicht aktivieren.." + else + error "Konnte MariaDB 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 MariaDB Datenbank Service +## ----- + +echo "" +echo "" +echo -e "\033[37m\033[1mStarte MariaDB Datenbank Service\033[m" +echo "" + +echo "" >> ${logdir}/main.log +echo "" >> ${logdir}/main.log +echo "## -----" >> ${logdir}/main.log +echo "## - Starte MariaDB Datenbank Service" >> ${logdir}/main.log +echo "## -----" >> ${logdir}/main.log + +echononl "Starte MariaDB Datenbankserver.." +echo "" >> ${logdir}/main.log +echo "## - Starte MariaDB Datenbankserver" >> ${logdir}/main.log +echo "## -" >> ${logdir}/main.log +if $INSTALL_SYSTEMD_SERVICE ; then + echo "systemctl start \"$MARIADB_SERVICE_FILE\"" >> ${logdir}/main.log + systemctl start "$MARIADB_SERVICE_FILE" >> ${logdir}/main.log 2>&1 + if [[ $? -eq 0 ]]; then + echo_ok + else + echo_failed + error Konnte MariaDB Datenbankserver nicht starten.. + + 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 + if $SYSTEMD_EXISTS ; then + echo "systemctl start ${MARIADB_SYSV_INIT_SCRIPT}" >> ${logdir}/main.log + systemctl start ${MARIADB_SYSV_INIT_SCRIPT} >> ${logdir}/main.log 2>&1 + else + echo "/etc/init.d/${MARIADB_SYSV_INIT_SCRIPT} start" >> ${logdir}/main.log + /etc/init.d/${MARIADB_SYSV_INIT_SCRIPT} start >> ${logdir}/main.log 2>&1 + fi + if [ "$?" = "0" ]; then + echo_ok + else + echo_failed + error Konnte MariaDB Datenbankserver nicht starten.. + + 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 + +sleep 2 + + + +## ----- +## - Konfiguration ( Teil 2) MariaDB Installation +## ----- + +echo "" +echo "" +echo -e "\033[37m\033[1mKonfiguration (Teil 2) der MariaDB $MARIADB_VERSION Installation\033[m" +echo "" + +echo "" >> ${logdir}/main.log +echo "" >> ${logdir}/main.log +echo "## -----" >> ${logdir}/main.log +echo "## - Konfiguration (Teil 2) der MariaDB $MARIADB_VERSION Installation" >> ${logdir}/main.log +echo "## -----" >> ${logdir}/main.log + +if ! $UPDATE_MARIADB ; 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 "${MARIADB_INSTALL_DIR}/bin/mysql -uroot mysql -N -s -e \"DELETE FROM user where User = ''\"" >> ${logdir}/main.log + ${MARIADB_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 + + ## - Drop database test + ## - + if [[ -d "${MARIADB_DATA_DIR}/test" ]]; then + echononl "Delete database 'test'.." + echo "" >> ${logdir}/main.log + echo "## - Delete database 'test'.." >> ${logdir}/main.log + echo "## - " >> ${logdir}/main.log + echo "${MARIADB_INSTALL_DIR}/bin/mysql -uroot mysql -N -s -e \"DROP DATABASE test\"" >> ${logdir}/main.log + ${MARIADB_INSTALL_DIR}/bin/mysql -uroot mysql -N -s -e "DROP DATABASE test" >> ${logdir}/main.log 2>&1 + if [[ $? -eq 0 ]]; then + echo_ok + else + echo_failed + error "Deleting database 'test' 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 "Delete rows concerning database 'test' from table 'mysql.db'.." + echo "" >> ${logdir}/main.log + echo "## - Delete rows concerning database 'test' from table 'mysql.db'.." >> ${logdir}/main.log + echo "## - " >> ${logdir}/main.log + echo "${MARIADB_INSTALL_DIR}/bin/mysql -uroot mysql -N -s -e \"DELETE FROM db WHERE Db LIKE 'test%'\"" >> ${logdir}/main.log + ${MARIADB_INSTALL_DIR}/bin/mysql -uroot mysql -N -s -e "DELETE FROM db WHERE Db LIKE 'test%'" >> ${logdir}/main.log 2>&1 + if [[ $? -eq 0 ]]; then + echo_ok + else + echo_failed + error "Deleting rows concerning database 'test' from table 'mysql.db' 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 + + ## - Set root password + ## - + echononl "Setze root Passwort für den MariaDB Zugang" + echo "" >> ${logdir}/main.log + echo "## - Setze root Passwort für den MariaDB Zugang" >> ${logdir}/main.log + echo "## -" >> ${logdir}/main.log + echo "${MARIADB_INSTALL_DIR}/bin/mysql -uroot mysql -N -s -e \"UPDATE user SET Password = password('$MARIADB_ROOT_PW') WHERE User = 'root'\"" >> ${logdir}/main.log + + ${MARIADB_INSTALL_DIR}/bin/mysql -uroot mysql -N -s -e "UPDATE user SET Password = password('$MARIADB_ROOT_PW') WHERE User = 'root'" \ + >> ${logdir}/main.log 2>&1 + if [ "$?" = "0" ]; then + echo_ok + else + echo_failed + error Konnte root Passwort für den MariaDB 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 (MariaDB Server).." + echo "" >> ${logdir}/main.log + echo "## - Neu Einlesen der Berechtigung (MariaDB Server)" >> ${logdir}/main.log + echo "## -" >> ${logdir}/main.log + echo "${MARIADB_INSTALL_DIR}/bin/mysql -uroot mysql -N -s -e \"FLUSH PRIVILEGES\"" >> ${logdir}/main.log + ${MARIADB_INSTALL_DIR}/bin/mysql -uroot mysql -N -s -e "FLUSH PRIVILEGES" >> ${logdir}/main.log 2>&1 + if [ "$?" = "0" ]; then + echo_ok + else + echo_failed + error Das Laden/Erneuern der Berechtigungen für die MariaDB 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.." + echo "" >> ${logdir}/main.log + echo "## - Run 'mysql_upgrade -uroot' - this may take some (long) time" >> ${logdir}/main.log + echo "## -" >> ${logdir}/main.log + echo "${MARIADB_INSTALL_DIR}/bin/mysql_upgrade -uroot -p$MARIADB_ROOT_PW" >> ${logdir}/main.log + ${MARIADB_INSTALL_DIR}/bin/mysql_upgrade -uroot -p$MARIADB_ROOT_PW >> ${logdir}/main.log 2>&1 + ret_val=$? + if [[ $ret_val -eq 0 ]] ; then + echo_ok + elif [[ $ret_val -eq 2 ]] ; then + echo_skipped + warn "Return Code was '2' - it means MariaDB is already upgraded to ${MARIADB_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 + + + +_sys_maint_cnf_needed=false +if $UPDATE_MARIADB ; then + echononl "Copy 'sys-maint.cnf' from old installation to the new one.." + echo "" >> ${logdir}/main.log + echo "## - Copy 'sys-maint.cnf' from old installation to the new one" >> ${logdir}/main.log + echo "## -" >> ${logdir}/main.log + if [[ "$CURRENT_VERSION" = "$MARIADB_VERSION" ]] ; then + echo "cp -a \"$MARIADB_INSTALL_DIR.$_backup_date/sys-maint.cnf\" \"${MARIADB_INSTALL_DIR}/sys-maint.cnf\"" \ + >> ${logdir}/main.log + cp -a $MARIADB_INSTALL_DIR.$_backup_date/sys-maint.cnf "${MARIADB_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 "${MARIADB_CUR_INSTALL_DIR}/sys-maint.cnf")\" \"${MARIADB_INSTALL_DIR}/sys-maint.cnf\"" \ + >> ${logdir}/main.log + cp -a "$(realpath "${MARIADB_CUR_INSTALL_DIR}/sys-maint.cnf")" "${MARIADB_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 "${MARIADB_INSTALL_DIR}/sys-maint.cnf" ]] ; then + _sys_maint_cnf_needed=true + fi +fi + +if ! $UPDATE_MARIADB || $_sys_maint_cnf_needed ; then + echo + echononl "Erstelle Passwort für maintance (MariaDB) User.." + echo "" >> ${logdir}/main.log + echo "## - Erstelle Passwort für maintance (MariaDB) 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 + _maint_passwd=`cat /dev/urandom|tr -dc "a-zA-Z0-9-_\$\?" | fold -w16 | head -n 1` >> ${logdir}/main.log 2>&1 + else + echo "_maint_passwd=\`$PW_GEN -v -B 16 1\`" >> ${logdir}/main.log + _maint_passwd=`$PW_GEN -v -B 16 1` >> ${logdir}/main.log 2>&1 + fi + if [ "$?" = "0" ]; then + echo_ok + else + echo_failed + error Konnte Passwort für maintance \(MariaDB\) 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 MariaDB User '${_maint_user}' - localhost.." + echo "" >> ${logdir}/main.log + echo "## - Erstelle maintance MariaDB User '${_maint_user}' - localhost" >> ${logdir}/main.log + echo "" >> ${logdir}/main.log + echo "${MARIADB_INSTALL_DIR}/bin/mysql -uroot -p$MARIADB_ROOT_PW mysql -N -s -e \"GRANT ALL ON *.* TO '${_maint_user}'@'localhost' IDENTIFIED BY '$_maint_passwd'\"" >> ${logdir}/main.log + ${MARIADB_INSTALL_DIR}/bin/mysql -uroot -p$MARIADB_ROOT_PW mysql -N -s -e "GRANT ALL ON *.* TO '${_maint_user}'@'localhost' IDENTIFIED BY '$_maint_passwd'" >> ${logdir}/main.log 2>&1 + if [ "$?" = "0" ]; then + echo_ok + else + echo_failed + error Konnte \(MariaDB\) 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 MariaDB User '${_maint_user}'.." + echo "" >> ${logdir}/main.log + echo "## - Give 'Grant' permission to MariaDB User '${_maint_user}'" >> ${logdir}/main.log + echo "## -" >> ${logdir}/main.log + echo "${MARIADB_INSTALL_DIR}/bin/mysql -uroot -p$MARIADB_ROOT_PW mysql -N -s -e \"UPDATE user SET Grant_priv = 'y' WHERE user = '${_maint_user}';\"" >> ${logdir}/main.log + ${MARIADB_INSTALL_DIR}/bin/mysql -uroot -p$MARIADB_ROOT_PW mysql -N -s -e "UPDATE user SET Grant_priv = 'y' WHERE user = '${_maint_user}';" >> ${logdir}/main.log 2>&1 + if [ "$?" = "0" ]; then + echo_ok + else + echo_failed + error Giving \"Grant\"-permission to \(MariaDB\) 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 (MariaDB Server).." + echo "" >> ${logdir}/main.log + echo "## - Neu Einlesen der Berechtigung (MariaDB Server)" >> ${logdir}/main.log + echo "## -" >> ${logdir}/main.log + echo "${MARIADB_INSTALL_DIR}/bin/mysql -uroot -p$MARIADB_ROOT_PW mysql -N -s -e \"FLUSH PRIVILEGES\"" >> ${logdir}/main.log + ${MARIADB_INSTALL_DIR}/bin/mysql -uroot -p$MARIADB_ROOT_PW mysql -N -s -e "FLUSH PRIVILEGES" >> ${logdir}/main.log 2>&1 + if [ "$?" = "0" ]; then + echo_ok + else + echo_failed + error Das Laden/Erneuern der Berechtigungen für die MariaDB 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 '${MARIADB_INSTALL_DIR}/sys-maint.cnf'.." + echo "" >> ${logdir}/main.log + echo "## - Erstelle '${MARIADB_INSTALL_DIR}/sys-maint.cnf'" >> ${logdir}/main.log + echo "## -" >> ${logdir}/main.log + echo "cat << EOF > ${MARIADB_INSTALL_DIR}/sys-maint.cnf +[client] +host = localhost +user = $_maint_user +password = $_maint_passwd +socket = $MARIADB_UNIX_SOCKET +[mysql_upgrade] +host = localhost +user = $_maint_user +password = $_maint_passwd +socket = $MARIADB_UNIX_SOCKET +basedir = /usr +EOF" >> ${logdir}/main.log + + cat << EOF > ${MARIADB_INSTALL_DIR}/sys-maint.cnf +[client] +host = localhost +user = $_maint_user +password = $_maint_passwd +socket = $MARIADB_UNIX_SOCKET +[mysql_upgrade] +host = localhost +user = $_maint_user +password = $_maint_passwd +socket = $MARIADB_UNIX_SOCKET +basedir = /usr +EOF + if [ "$?" = "0" ]; then + echo_ok + else + echo_failed + error Konnte Konfigurationsdatei \"${MARIADB_INSTALL_DIR}/sys-maint.cnf\" nicht erstellen.. + fi +fi + + +sys_maint_file="$(dirname $MARIADB_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 +$mariadb_log +$mariadb_error_log +$mariadb_slow_query_log +$mariadb_groonga_log +{ + daily + rotate 7 + missingok + create 644 $MARIADB_USER $MARIADB_GROUP + compress + sharedscripts + postrotate + MYSQL=\"$(dirname $MARIADB_INSTALL_DIR)/mysql/bin/mysql --defaults-file=$sys_maint_file\" + MYADMIN=\"$(dirname $MARIADB_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 +$mariadb_log +$mariadb_error_log +$mariadb_slow_query_log +$mariadb_groonga_log +{ + daily + rotate 7 + missingok + create 644 $MARIADB_USER $MARIADB_GROUP + compress + sharedscripts + postrotate + MYSQL="$(dirname $MARIADB_INSTALL_DIR)/mysql/bin/mysql --defaults-file=$sys_maint_file" + MYADMIN="$(dirname $MARIADB_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 +if [ "$?" = "0" ]; then + echo_ok +else + echo_failed + error Konnte Logrotate Definitionsdatei \"/etc/logrotate.d/mysql\" nicht erstellen.. +fi + +echo +echononl "Reenable crontab for user root .." +if $_crontab_found ; then + 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 + echo_ok + else + echo_failed + fi + + 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 + echo_ok + else + echo_failed + fi +else + echo_skipped +fi + +info "See '${logdir}/main.log' for more details." + +clean_up 0 diff --git a/OLD/install_mysql.sh b/OLD/install_mysql.sh new file mode 100755 index 0000000..1cd5086 --- /dev/null +++ b/OLD/install_mysql.sh @@ -0,0 +1,4498 @@ +#!/usr/bin/env bash + +_backup_date="$(date +"%Y-%m-%d-%H%M")" + +_MYSQL_VERSION=5.7.20 + +_MYSQL_SRC_BASE_DIR=$(dirname $(realpath $0)) + +_MYSQL_LOG_DIR=/var/log/mysql + +_MYSQL_PORT=3306 +_MYSQL_UNIX_SOCKET=/tmp/mysql.sock + + +_MYSQL_USER=mysql +_MYSQL_GROUP=mysql + +_DISTRIBUTION=Debian + +_VSERVER_GUEST=nein + +_required_debian_packages="libevent-dev + libjemalloc-dev + libboost-all-dev + libreadline-gplv2-dev + libjudy-dev + libpam0g-dev + libpcre3-dev + gnutls-dev + default-jdk" + + +_CRONTAB_BAKUP_FILE="$(mktemp)" + +## - Let make use multiple cores (-j) +## - +export MAKEFLAGS=-j$(expr `grep "^processor" /proc/cpuinfo | sort -u | wc -l` + 1) + + +## --- Some functions +## --- +clean_up() { + + # Perform program exit housekeeping + if [[ -s "$_CRONTAB_BAKUP_FILE" ]]; then + crontab -u root $_CRONTAB_BAKUP_FILE + fi + rm -f $_CRONTAB_BAKUP_FILE + exit $1 +} + +echononl(){ + echo X\\c > /tmp/shprompt$$ + if [ `wc -c /tmp/shprompt$$ | awk '{print $1}'` -eq 1 ]; then + echo "$*\\c" 1>&2 + else + echo -e -n "$*" 1>&2 + fi + rm /tmp/shprompt$$ +} + +fatal(){ + echo "" + echo -e "fataler Fehler: $*" + echo "" + echo -e "\t\033[31m\033[1mInstalllation wird abgebrochen\033[m\033[m" + echo "" + clean_up 1 +} + +error(){ + echo "" + echo -e "\t[ \033[31m\033[1mFehler\033[m ]: $*" + echo "" +} + +warn (){ + echo "" + echo -e "\t[ \033[33m\033[1mWarning\033[m ]: $*" + echo "" +} + +info (){ + echo "" + echo -e "\t[ \033[32m\033[1mInfo\033[m ]: $*" + echo "" +} + + +echo_ok() { + echo -e "\033[75G[ \033[32mok\033[m ]" + ## echo -e " [ ok ]" +} +echo_failed(){ + echo -e "\033[75G[ \033[1;31mfailed\033[m ]" + ## echo -e " [ failed ]" +} +echo_skipped() { + echo -e "\033[75G[ \033[33m\033[1mskipped\033[m ]" +} +## --- +## --- END: functions + +trap clean_up SIGHUP SIGINT SIGTERM + +_curdir=`pwd` + + +clear +echo -e "\033[21G\033[32mInstallationsscript für die Mysql Datenbank \033[m" +echo + +## - root user? +## - +if [ "$(id -u)" != "0" ]; then + fatal Skript muss als \"root\" ausgeführt werden +fi + +# - OS supports systemd ? +# - +_systemd="$(which systemd)" +_systemctl="$(which systemctl)" +if [[ -z "$_systemd" ]] && [[ -z "$_systemctl" ]]; then + SYSTEMD_EXISTS=false +else + SYSTEMD_EXISTS=true +fi + +DISTRIBUTION= +echo "" +echo -e "\033[32m--\033[m" +echo "" +echo "Um welche Linux Distribution handelt es sich?" +echo "" +echo "[1] Debian" +echo "[2] andere" +echo "" +echononl "Eingabe: " + +while [ "$DISTRIBUTION" != "Debian" -a "$DISTRIBUTION" != "other" ];do + read OPTION + case $OPTION in + 1) DISTRIBUTION="Debian" + ;; + 2) DISTRIBUTION="other" + ;; + *) echo "" + echo -e "\tFalsche Eingabe ! [ 1 = Debian ; 2 = andere ]" + echo "" + echononl "Eingabe:" + ;; + esac +done + +_UPDATE_MYSQL="" +echo "" +echo -e "\033[32m--\033[m" +echo "" +echo "Soll eine vorhanden MySQL Installation geupdateted werden?" +echo "" +echo "[1] Neuinstallation" +echo "[2] Update vorhandener Installation" +echo "" +echononl "Eingabe: " + + +while [ "$_UPDATE_MYSQL" != "update" -a "$_UPDATE_MYSQL" != "new" ];do + read OPTION + case $OPTION in + 1) _UPDATE_MYSQL="new" + ;; + 2) _UPDATE_MYSQL="update" + ;; + *) echo "" + echo -e "\tFalsche Eingabe ! [ 1 = Neuinstallation ; 2 = Update ]" + echo "" + echononl "Eingabe:" + ;; + esac +done +if [ "$_UPDATE_MYSQL" = "update" ];then + UPDATE_MYSQL=true +else + UPDATE_MYSQL=false +fi + +if $UPDATE_MYSQL ; then + echo "" + echononl "Get current MySQL Version.." + CURRENT_VERSION="$(mysql -V | grep -o -E "Distrib\s+[3-9]+\.[0-9]+\.[0-9]+" | awk '{print$2}')" + if [ "$?" = "0" ]; then + echo_ok + else + echo_failed + fatal "Getting current mysql version failed!" + fi + echo "" +fi + + +#clear +#echo -e "\033[21G\033[32mInstallationsscript für die Mysql Datenbank \033[m" +#echo "" +echo -e "\033[32m--\033[m" +echo "" +echo "Gib die Versionsnummer der zu installierenden MySQL-Distribution an." +echo "" +MYSQL_VERSION= +while [ "X$MYSQL_VERSION" = "X" ] +do + echononl "MySQL Version [$_MYSQL_VERSION]: " + read MYSQL_VERSION + if [ "X$MYSQL_VERSION" = "X" ]; then + MYSQL_VERSION=$_MYSQL_VERSION + fi + + _MYSQL_INSTALL_DIR=/usr/local/mysql-$MYSQL_VERSION + _MYSQL_DATA_DIR=/data/mysql-$MYSQL_VERSION + distfile=mysql-${MYSQL_VERSION}.tar.gz +done +MYSQL_MAIN_VERSION=`echo $MYSQL_VERSION | cut -d '.' -f1,2` +MYSQL_MAJOR_VERSION=`echo $MYSQL_VERSION | cut -d '.' -f1` +MYSQL_MINOR_VERSION=`echo $MYSQL_VERSION | cut -d '.' -f2` +MYSQL_PATCH_LEVEL=`echo $MYSQL_VERSION | cut -d '.' -f2` + + +echo "" +echo -e "\033[32m--\033[m" +echo "" +echo "Gib den Namen des MySQL Sourceverzeichnisses an." +echo "" +MYSQL_SRC_BASE_DIR= +while [ "X$MYSQL_SRC_BASE_DIR" = "X" ] +do + echononl "MySQL Sourceverzeichnis [${_MYSQL_SRC_BASE_DIR}]: " + read MYSQL_SRC_BASE_DIR + if [ "X$MYSQL_SRC_BASE_DIR" = "X" ]; then + MYSQL_SRC_BASE_DIR=$_MYSQL_SRC_BASE_DIR + fi +done +MYSQL_SRC_DIR=${MYSQL_SRC_BASE_DIR}/mysql-$MYSQL_VERSION + +echo "" +echo -e "\033[32m--\033[m" +echo "" +echo "Gib den Namen des Verzeichnisses in das MySQL installiert werden soll an." +echo "" +MYSQL_INSTALL_DIR= +while [ "X$MYSQL_INSTALL_DIR" = "X" ] +do + echononl "MySQL Installationsverzeichnis [${_MYSQL_INSTALL_DIR}]: " + read MYSQL_INSTALL_DIR + if [ "X$MYSQL_INSTALL_DIR" = "X" ]; then + MYSQL_INSTALL_DIR=$_MYSQL_INSTALL_DIR + LINK=yes + fi + + logdir=${MYSQL_SRC_BASE_DIR}/log-$MYSQL_VERSION + +done + +MY_CNF_FILE="${MYSQL_INSTALL_DIR}/etc/my.cnf" + +if $UPDATE_MYSQL ; then + echo "" + echononl "Ermittle Installations Verz. der existierenden MySQL Installation." + if [[ -d "$(dirname "$MYSQL_INSTALL_DIR")/mysql-$CURRENT_VERSION" ]]; then + MYSQL_CUR_INSTALL_DIR="$(dirname "$MYSQL_INSTALL_DIR")/mysql-$CURRENT_VERSION" + echo_ok + else + echo_failed + fatal "Kann Installations Verz. der z.Zt. installierten Version nicht finden!" + fi + echo "" +fi + +echo "" +echo -e "\033[32m--\033[m" +echo "" +echo "Gib den Namen des Verzeichnisses für die MySQL-Datenbanken an." +echo "" +MYSQL_DATA_DIR= +while [ "X$MYSQL_DATA_DIR" = "X" ] +do + echononl "MySQL Datenbankverzeichnis [$_MYSQL_DATA_DIR]: " + read MYSQL_DATA_DIR + if [ "X$MYSQL_DATA_DIR" = "X" ]; then + MYSQL_DATA_DIR=$_MYSQL_DATA_DIR + fi +done + +if $UPDATE_MYSQL ; then + echo "" + echononl "Ermittle MySQL-Datenbank Verz. der existierenden MySQL Installation." + if [[ -d "$(dirname "$MYSQL_DATA_DIR")/mysql-$CURRENT_VERSION" ]]; then + MYSQL_CUR_DATA_DIR="$(dirname "$MYSQL_DATA_DIR")/mysql-$CURRENT_VERSION" + echo_ok + else + echo_failed + fatal "Kann Datenbank Verz. der installierten Version nicht finden!" + fi + echo "" +fi + + +echo "" +echo -e "\033[32m--\033[m" +echo "" +echo "Gib den Namen des LOG-Verzeichnisses für die MySQL an. !! NICHT für binäre logfiles !!" +echo "" +MYSQL_LOG_DIR= +while [ "X$MYSQL_LOG_DIR" = "X" ] +do + echononl "MySQL LOG Verzeichniss [$_MYSQL_LOG_DIR]: " + read MYSQL_LOG_DIR + if [ "X$MYSQL_LOG_DIR" = "X" ]; then + MYSQL_LOG_DIR=$_MYSQL_LOG_DIR + fi +done + +echo "" +echo -e "\033[32m--\033[m" +echo "" +echo "Gib den TCP Port für MySQL an (voreingestell \"${MYSQL_PORT}\")." +echo "" +MYSQL_PORT= +while [ "X$MYSQL_PORT" = "X" ] +do + echononl "MySQL TCP Port [$_MYSQL_PORT]: " + read MYSQL_PORT + if [ "X$MYSQL_PORT" = "X" ]; then + MYSQL_PORT=$_MYSQL_PORT + fi +done + +echo "" +echo -e "\033[32m--\033[m" +echo "" +echo "Gib den Unix Socket für MySQL an (voreingestell \"${_MYSQL_UNIX_SOCKET}\")." +echo "" +MYSQL_UNIX_SOCKET= +while [ "X$MYSQL_UNIX_SOCKET" = "X" ] +do + echononl "MySQL UNIX Socket [$_MYSQL_UNIX_SOCKET]: " + read MYSQL_UNIX_SOCKET + if [ "X$MYSQL_UNIX_SOCKET" = "X" ]; then + MYSQL_UNIX_SOCKET=$_MYSQL_UNIX_SOCKET + fi +done + +echo "" +echo "--" +echo "" +echo "Gib den User-Namen und die User-Gruppe unter dem der MySQL-Daemon laufen soll an." +echo "" +MYSQL_USER= +while [ "X$MYSQL_USER" = "X" ] +do + echononl "MySQL-User [${_MYSQL_USER}]: " + read MYSQL_USER + if [ "X$MYSQL_USER" = "X" ]; then + MYSQL_USER=$_MYSQL_USER + fi +done +MYSQL_GROUP= +while [ "X$MYSQL_GROUP" = "X" ] +do + echononl "MySQL-Gruppe [$MYSQL_USER]: " + read MYSQL_GROUP + if [ "X$MYSQL_GROUP" = "X" ]; then + MYSQL_GROUP=$MYSQL_USER + fi +done + +#clear +#echo -e "\033[21G\033[32mInstallationsscript für die Mysql Datenbank \033[m" + +echo "" +echo -e "\033[32m--\033[m" +echo "" +if ! $UPDATE_MYSQL ; then + echo "Gib ein Passwort für den root user an.." +else + echo "Gib das 'root' Passwort der bestehenden Installation an" +fi +echo "" +_MYSQL_ROOT_PW_1="X" +_MYSQL_ROOT_PW_2="Y" +while [ "$_MYSQL_ROOT_PW_1" != "$_MYSQL_ROOT_PW_2" ] +do + echononl "Passworteingabe: " + read -s _MYSQL_ROOT_PW_1 + echo + if [ "X$_MYSQL_ROOT_PW_1" = "X" ]; then + echo -e "\n\t\033[33m\033[1mPassworteingabe erforderlich!\033[m\n" + continue + fi + echononl "Passwortwiederholung: " + read -s _MYSQL_ROOT_PW_2 + echo + if [ "X$_MYSQL_ROOT_PW_2" = "X" ]; then + echo -e "\n\t\033[33m\033[1mPasswortwiederholung erforderlich!\033[m\n" + continue + fi + if [ "$_MYSQL_ROOT_PW_1" != "$_MYSQL_ROOT_PW_2" ];then + echo -e "\n\t\033[33m\033[1mPassworteingaben sind nicht identisch!\033[m\n" + else + if $UPDATE_MYSQL ; then + if $(pgrep mysqld_safe > /dev/null 2>&1) || $(pgrep mysqld > /dev/null 2>&1); then + if $(mysql --user="root" --password="$_MYSQL_ROOT_PW_1" -N -s -e 'quit' > /dev/null 2>&1) ; then + MYSQL_ROOT_PW=$_MYSQL_ROOT_PW_1 + else + echo -e "\n\t\033[33m\033[1mFalsches Passwort\033[m\n" + _MYSQL_ROOT_PW_1="" + fi + else + MYSQL_ROOT_PW=$_MYSQL_ROOT_PW_1 + fi + else + MYSQL_ROOT_PW=$_MYSQL_ROOT_PW_1 + fi + fi +done + + +__SYMLINK_INSTALL_DIR=ja +__SYMLINK_DATA_DIR=ja + +echo -e "\033[32m--\033[m" +echo "" +echo "Symlinks:" +echo "" +echo " - Setze Sysmlink for das Installationsverzeichnis `dirname $MYSQL_INSTALL_DIR`/mysql" +echo " - Setze Sysmlink for das Datenverzeichnis `dirname $MYSQL_DATA_DIR`/mysql" +echo "" + +echo "" +_SYMLINK_INSTALL_DIR="" +echononl "Sysmlink für das Installationsverzeichnis? (ja/nein) [${__SYMLINK_INSTALL_DIR}]: " +read _SYMLINK_INSTALL_DIR +if [ "X$_SYMLINK_INSTALL_DIR" = "X" ];then + _SYMLINK_INSTALL_DIR=$__SYMLINK_INSTALL_DIR +fi + +_SYMLINK_INSTALL_DIR="$(echo "$_SYMLINK_INSTALL_DIR" | tr '[:upper:]' '[:lower:]')" +while [ "$_SYMLINK_INSTALL_DIR" != "ja" -a "$_SYMLINK_INSTALL_DIR" != "nein" ]; do + echononl "Falsche Eingabe. (ja/nein): " + read _SYMLINK_INSTALL_DIR +done +if [ "$_SYMLINK_INSTALL_DIR" = "ja" -o "$_SYMLINK_INSTALL_DIR" = "Ja" ]; then + SYMLINK_INSTALL_DIR=true +else + SYMLINK_INSTALL_DIR=false +fi + +echo "" +_SYMLINK_DATA_DIR="" +echononl "Sysmlink für das Datenverzeichnis? (ja/nein) [${__SYMLINK_DATA_DIR}]: " +read _SYMLINK_DATA_DIR +if [ "X$_SYMLINK_DATA_DIR" = "X" ];then + _SYMLINK_DATA_DIR=$__SYMLINK_DATA_DIR +fi + +__SYMLINK_DATA_DIR="$(echo "$_SYMLINK_DATA_DIR" | tr '[:upper:]' '[:lower:]')" +while [ "$_SYMLINK_DATA_DIR" != "ja" -a "$_SYMLINK_DATA_DIR" != "nein" ]; do + echononl "Falsche Eingabe. (ja/nein): " + read _SYMLINK_DATA_DIR +done +if [ "$_SYMLINK_DATA_DIR" = "ja" -o "$_SYMLINK_DATA_DIR" = "Ja" ]; then + SYMLINK_DATA_DIR=true +else + SYMLINK_DATA_DIR=false +fi + + + +OK= +echo "" +echo -e "\033[32m--\033[m" +echo "" +echo "Ist dies ein VServer Gastsystem?" +echo "" +echononl "VServer Gastsystem (ja/nein) [$_VSERVER_GUEST]: " +read OK +if [ "X$OK" = "X" ]; then + OK=$_VSERVER_GUEST +fi +OK=`echo "$OK" | tr '[:upper:]' '[:lower:]'` +while [ "X$OK" != "Xja" -a "X$OK" != "Xnein" ]; do + echo "" + echononl "\twrong entry! [ja/nein]: " + read OK + OK=`echo "$OK" | tr '[:upper:]' '[:lower:]'` +done +if [ "$OK" = "ja" ]; then + SYSTEMD_EXISTS=false + VSERVER_GUEST=true +else + VSERVER_GUEST=false +fi + +if [[ "$MYSQL_MAJOR_VERSION" -lt 5 ]] \ + || ( [[ "$MYSQL_MAJOR_VERSION" -eq 5 ]] && [[ "$MYSQL_MINOR_VERSION" -lt 7 ]] ) ; then + INSTALL_SYSTEMD_SERVICE=false +else + if $SYSTEMD_EXISTS ; then + INSTALL_SYSTEMD_SERVICE="" + echo "" + echo -e "\033[32m--\033[m" + echo "" + echo "Wie soll der MySQL Datenbank Service getsartet werden?" + echo "" + echo "[1] SysVinit script mysql.server" + echo -e "[2] \033[37m\033[1mSystemd service mysqld.service\033[m" + echo "" + echo "" + echo "Type a number or press to choose highlighted value" + echo "" + echononl "Eingabe: " + + while [[ "$INSTALL_SYSTEMD_SERVICE" != "true" ]] && [[ "$INSTALL_SYSTEMD_SERVICE" != "false" ]]; do + + #while [[ -z "$INSTALL_SYSTEMD_SERVICE" ]];do + read OPTION + case $OPTION in + 1) INSTALL_SYSTEMD_SERVICE=false + ;; + 2) INSTALL_SYSTEMD_SERVICE=true + ;; + '') INSTALL_SYSTEMD_SERVICE=true + ;; + *) echo "" + echo -e "\tFalsche Eingabe ! [ 1 = Systemd Service ; 2 = SysVinit Script ]" + echo "" + echononl "Eingabe:" + ;; + esac + done + + else + INSTALL_SYSTEMD_SERVICE=false + fi +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" +echo "" +if ! $UPDATE_MYSQL ; then + echo -e "-- \033[33m\033[1mNeusistallation\033[m --" +else + echo -e "-- \033[33m\033[1mUpdate\033[m (Ersetzen einer vorhandenen Installation) --" + echo "" + echo "Current MySQL Version.....: $CURRENT_VERSION" + echo "Current data dir..........: $MYSQL_CUR_DATA_DIR" + echo "Current installation dir..: $MYSQL_CUR_INSTALL_DIR" + echo "" +fi +echo "" +echo "Linuxdistribution.........: $DISTRIBUTION" +echo "" +echo "MySQL Versionsnummer......: $MYSQL_VERSION" +echo " MySQL Major Verion......: $MYSQL_MAIN_VERSION" +echo "" +echo "Sourcecodeverzeicnis......: $MYSQL_SRC_BASE_DIR" +echo "Installationsverzeichnis..: $MYSQL_INSTALL_DIR" +echo "Default file 'my.cnf'.....: $MY_CNF_FILE" +echo "Datenbankverzeichnis......: $MYSQL_DATA_DIR" +echo "Log Verzeichnis...........: $MYSQL_LOG_DIR" +echo "TCP Port..................: $MYSQL_PORT" +echo "Unix Socket...............: $MYSQL_UNIX_SOCKET" +echo "MySQL-User................: $MYSQL_USER" +echo "MySQL-Gruppe..............: $MYSQL_GROUP" +echo "" +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 "" +echo "VServer guest system......: $VSERVER_GUEST" +echo "" +echononl "einverstanden [ja/nein]: " +read OK +while [ "X$OK" != "Xja" -a "X$OK" != "XJa" -a "X$OK" != "Xnein" -a "X$OK" != "XNein" ] +do + echononl "falsche Angabe! [ja/nein]: " + read OK +done +[ $OK = "ja" -o $OK = "Ja" ] || fatal wiederhole Installation zur Eingabe anderer Parameter + + + +## - Sorcecode Verzeichnis vorhanden? +## - +if [ ! -d ${MYSQL_SRC_BASE_DIR} ] ; then + fatal "Kann MySQL Sourcecode Verzeichnis \"${MYSQL_SRC_BASE_DIR}\" nicht finden." +fi + + +## - Sorcecode vorhanden? +## - +if [ ! -f ${MYSQL_SRC_BASE_DIR}/$distfile ] ; then + + echo "" + + echononl "Download $distfile ..." + wget -O ${MYSQL_SRC_BASE_DIR}/$distfile https://dev.mysql.com/get/Downloads/MySQL-${MYSQL_MAIN_VERSION}/$distfile 2>/dev/null + + if [ "$?" = "0" ]; then + echo_ok + else + echo_failed + fatal "Downloading $distfile (https://dev.mysql.com/get/Downloads/MySQL-${MYSQL_MAIN_VERSION}/$distfile) Fehlgeschlagen." + fi +fi + +echo "" +echo "" + + +## - Erstelle Logverzeichnis +## - +if [ -d $logdir ]; then + echononl "Verschiebe exitierendes Logverzeichnis ..." + mv "$logdir" "${logdir}.$_backup_date" + if [ "$?" = "0" ]; then + echo_ok + else + echo_failed + fatal Kann Logverzeichnis \"${logdir}\" nicht verschieben.. + fi +fi + +echononl "Erstelle Logverzeichnis \"${logdir}\".." +mkdir -p $logdir > /dev/null 2>&1 +if [ "$?" = "0" ]; then + echo_ok +else + echo_failed + fatal Kann Logverzeichnis \"${logdir}\" nicht erstellen.. +fi +touch ${logdir}/main.log +echo -e "## - Starte Installation mit folgenden Parametern:" >> ${logdir}/main.log +echo "## -" >> ${logdir}/main.log +if ! $UPDATE_MYSQL ; then + echo "## - Neusistallation" >> ${logdir}/main.log +else + echo "## - Update (Ersetzen einer vorhandenen Installation)" >> ${logdir}/main.log + echo "## -" >> ${logdir}/main.log + echo "## - Current MySQL Version.....: $CURRENT_VERSION" >> ${logdir}/main.log + echo "## - Current installation dir..: $MYSQL_CUR_INSTALL_DIR" >> ${logdir}/main.log + echo "## - Current data dir..........: $MYSQL_CUR_DATA_DIR" >> ${logdir}/main.log + echo "## -" >> ${logdir}/main.log +fi +echo "## -" >> ${logdir}/main.log +echo "## - Linuxdistribution.........: $DISTRIBUTION" >> ${logdir}/main.log +echo "## - " >> ${logdir}/main.log +echo "## - MySQL Versionsnummer......: $MYSQL_VERSION" >> ${logdir}/main.log +echo "## - MySQL Major Verion.....: $MYSQL_MAIN_VERSION" >> ${logdir}/main.log +echo "## - " >> ${logdir}/main.log +echo "## - Sourcecodeverzeicnis......: $MYSQL_SRC_BASE_DIR" >> ${logdir}/main.log +echo "## - Installationsverzeichnis..: $MYSQL_INSTALL_DIR" >> ${logdir}/main.log +echo "## - Default file 'my.cnf'.....: $MY_CNF_FILE" >> ${logdir}/main.log +echo "## - Datenbankverzeichnis......: $MYSQL_DATA_DIR" >> ${logdir}/main.log +echo "## - Log Verzeichnis...........: $MYSQL_LOG_DIR" >> ${logdir}/main.log +echo "## - TCP Port..................: $MYSQL_PORT" >> ${logdir}/main.log +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 Installationsverz.: $SYMLINK_INSTALL_DIR" >> ${logdir}/main.log +echo "## - Symlink Datenverzeichnis..: $SYMLINK_DATA_DIR" >> ${logdir}/main.log +echo "## -" >> ${logdir}/main.log +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 "## - VServer guest system......: $VSERVER_GUEST" >> ${logdir}/main.log +echo "" >> ${logdir}/main.log +echo "" >> ${logdir}/main.log + +echo "UPDATE_MYSQL=$UPDATE_MYSQL" >> ${logdir}/main.log +if ! $UPDATE_MYSQL ; then + echo "CURRENT_VERSION=$CURRENT_VERSION" >> ${logdir}/main.log + echo "MYSQL_CUR_DATA_DIR=$MYSQL_CUR_DATA_DIR" >> ${logdir}/main.log + echo "MYSQL_CUR_INSTALL_DIR=$MYSQL_CUR_INSTALL_DIR" >> ${logdir}/main.log +fi +echo "" >> ${logdir}/main.log +echo "DISTRIBUTION=$DISTRIBUTION" >> ${logdir}/main.log +echo "" >> ${logdir}/main.log +echo "MYSQL_VERSION=$MYSQL_VERSION" >> ${logdir}/main.log +echo "MYSQL_SRC_BASE_DIR=$MYSQL_SRC_BASE_DIR" >> ${logdir}/main.log +echo "MYSQL_INSTALL_DIR=$MYSQL_INSTALL_DIR" >> ${logdir}/main.log +echo "MY_CNF_FILE=$MY_CNF_FILE" >> ${logdir}/main.log +echo "MYSQL_DATA_DIR=$MYSQL_DATA_DIR" >> ${logdir}/main.log +echo "MYSQL_LOG_DIR=$MYSQL_LOG_DIR" >> ${logdir}/main.log +echo "MYSQL_PORT=$MYSQL_PORT" >> ${logdir}/main.log +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_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 +echo "VSERVER_GUEST=$VSERVER_GUEST" >> ${logdir}/main.log + + +_MYSQL_INITSCRIPT= +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/$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 +echo "## - " >> ${logdir}/main.log +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 + if [[ ! -s "$_CRONTAB_BAKUP_FILE" ]] ; then + echo_skipped + warn "No crontab for user 'root'found." + else + echo_failed + error "Backup crontab failed" + fi +fi + +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.." +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 + 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 + fi + + sleep 5 + + 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 + + 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 + + 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 "" + + 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 [ -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 + fi + + ## - 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 + +if [[ -n "$_SYSTEMD_SERVICE_FILE" ]]; then + + 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 + + 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 + + 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 + + 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 + + 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 + ## - + if [ "$DISTRIBUTION" = "Debian" ]; then + echononl "Deinstalliere Debian MySQL Pakete.." + _INSTALLED_MYSQL_DEB=`dpkg -l | grep mysql | grep -e "^i" | awk '{print$2}'` + INSTALLED_MYSQL_DEB= + for deb in $_INSTALLED_MYSQL_DEB ; do + INSTALLED_MYSQL_DEB="$INSTALLED_MYSQL_DEB $deb" + done + if [ -n "$INSTALLED_MYSQL_DEB" ]; then + echo "" >> ${logdir}/main.log + echo "apt-get remove --purge -q -y $INSTALLED_MYSQL_DEB" >> ${logdir}/main.log + apt-get remove --purge -q -y $INSTALLED_MYSQL_DEB >> ${logdir}/main.log 2>&1 + if [ "$?" = "0" ]; then + echo_ok + else + echo_failed + fatal Kann MySQL Pakete nicht deinstalieren.. + fi + else + echo_skipped + 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 + echo "## - Update index files of the debian repositories" >> ${logdir}/main.log + echo "## -" >> ${logdir}/main.log + echo "## - See: ${logdir}/apt-install.log" >> ${logdir}/main.log + echo "## -" >> ${logdir}/main.log + echo "apt-get update" >> ${logdir}/main.log + + echo "apt-get update" >> ${logdir}/apt-install.log + apt-get update >> ${logdir}/apt-install.log 2>&1 + if [ "$?" = "0" ]; then + echo_ok + echo "" >> ${logdir}/apt-install.log + else + echo_failed + fatal "\"apt-get update\" failed!" + fi + + + ## - Install cmake if not exists + ## + echononl "Installing \"cmake\".." + _cmake=`which cmake` + if [ "X$_cmake" = "X" ]; then + echo "" >> ${logdir}/main.log + echo "## - Installing \"cmake\"" >> ${logdir}/main.log + echo "## -" >> ${logdir}/main.log + echo "## - See: ${logdir}/apt-install.log" >> ${logdir}/main.log + echo "DEBIAN_FRONTEND=noninteractive apt-get install -q -y cmake" >> ${logdir}/main.log + + echo "DEBIAN_FRONTEND=noninteractive apt-get install -q -y cmake" >> ${logdir}/apt-install.log + DEBIAN_FRONTEND=noninteractive apt-get install -q -y cmake >> ${logdir}/apt-install.log 2>&1 + if [ "$?" = "0" ]; then + echo_ok + echo "" >> ${logdir}/apt-install.log + else + echo_failed + fatal Kann \"cmake\" nicht installieren.. + fi + else + echo_skipped + fi + + ## - Install further debian packages + ## - + declare -a deb_package_arr + for _debian_pkg in $_required_debian_packages ; do + deb_package_arr+=("$_debian_pkg") + done + + for _debian_pkg in ${deb_package_arr[@]} ; do + + echononl "Installing $_debian_pkg .." + if ! dpkg -l $_debian_pkg 2> /dev/null | grep -e "^ii" > /dev/null 2>&1 ; then + echo "" >> ${logdir}/main.log + echo "## - Installing $_debian_pkg" >> ${logdir}/main.log + echo "## -" >> ${logdir}/main.log + echo "## - See: ${logdir}/apt-install.log" >> ${logdir}/main.log + echo "## -" >> ${logdir}/main.log + echo "DEBIAN_FRONTEND=noninteractive apt-get install -q -y $_debian_pkg" >> ${logdir}/main.log + + echo "" >> ${logdir}/apt-install.log + echo "DEBIAN_FRONTEND=noninteractive apt-get install -q -y $_debian_pkg" >> ${logdir}/apt-install.log + + DEBIAN_FRONTEND=noninteractive apt-get install -q -y $_debian_pkg >> ${_logdir}/debian-install.log 2>&1 + if [ "$?" = 0 ]; then + echo_ok + echo "" >> ${logdir}/apt-install.log + else + echo_failed + fatal "Installing debian package \"$_debian_pkg\" failed!" + fi + else + echo_skipped + fi + done + + if ! grep -q -E "export\s*JAVA_HOME" /etc/profile.d/* > /dev/null 2>&1 ; then + echo "export JAVA_HOME=/usr/lib/jvm/default-java" >> /etc/profile.d/java.sh + export JAVA_HOME=/usr/lib/jvm/default-java + fi + + ## - Install dependency packages for \"mysql-server\" + ## - + echononl "Installing dependency packages for \"mysql-server\"" + echo "" >> ${logdir}/main.log + echo "## - Installing dependency packages for \"mysql-server\"" >> ${logdir}/main.log + echo "## -" >> ${logdir}/main.log + echo "## - See: ${logdir}/apt-install.log" >> ${logdir}/main.log + echo "## - " >> ${logdir}/main.log + echo "DEBIAN_FRONTEND=noninteractive apt-get -q -y build-dep mysql-server" >> ${logdir}/main.log + + echo "" >> ${logdir}/apt-install.log + echo "DEBIAN_FRONTEND=noninteractive apt-get -q -y build-dep mysql-server" >> ${logdir}/apt-install.log 2>&1 + + DEBIAN_FRONTEND=noninteractive apt-get -q -y build-dep mysql-server >> ${logdir}/apt-install.log 2>&1 + if [ "$?" = 0 ]; then + echo_ok + echo "" >> ${logdir}/apt-install.log + else + echo_failed + fatal "Installing dependency packages for \"mysql-server\" failed!" + fi + +# if apt-cache search mariadb-server | grep -q -E "^mariadb-server" > /dev/null 2>&1 ; then +# echononl "Installing dependency packages for \"mariadb-server\"" +# echo "DEBIAN_FRONTEND=noninteractive apt-get -q -y build-dep mariadb-server" >> ${logdir}/apt-install.log 2>&1 +# +# DEBIAN_FRONTEND=noninteractive apt-get -q -y build-dep mariadb-server >> ${logdir}/apt-install.log 2>&1 +# if [ "$?" = 0 ]; then +# echo_ok +# echo "" >> ${logdir}/apt-install.log +# else +# echo_failed +# fatal "Installing dependency packages for \"mariadb-server\" failed!" +# fi +# fi + +fi # 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 + echo "## - Sichere exitierendes MySQL Datenbank-Verzeichnis" >> ${logdir}/main.log + echo "## -" >> ${logdir}/main.log + echo "cp -a $MYSQL_DATA_DIR ${MYSQL_DATA_DIR}.${_backup_date}" >> ${logdir}/main.log + cp -a $MYSQL_DATA_DIR ${MYSQL_DATA_DIR}.$_backup_date >> ${logdir}/main.log 2>&1 + if [ "$?" = "0" ]; then + echo_ok + else + echo_failed + fatal "Kann Datenbank-Verzeichnis \"${MYSQL_DATA_DIR}\" nicht verschieben.." + fi + elif [[ -d "$MYSQL_CUR_DATA_DIR" ]] ; then + echononl "Kopiere exitierendes MySQL Datenbank-Verzeichnis ..." + echo "" >> ${logdir}/main.log + echo "## - Kopiere exitierendes MySQL Datenbank-Verzeichnis" >> ${logdir}/main.log + echo "## -" >> ${logdir}/main.log + echo "cp -a \"$MYSQL_CUR_DATA_DIR\" \"$MYSQL_DATA_DIR\"" >> ${logdir}/main.log + cp -a "$MYSQL_CUR_DATA_DIR" "$MYSQL_DATA_DIR" >> ${logdir}/main.log + if [ "$?" = "0" ]; then + echo_ok + else + echo_failed + fatal "Kopieren \"$MYSQL_CUR_DATA_DIR\" --> \"${MYSQL_DATA_DIR}\" fehlgeschlagen.." + fi + else + echo_failed + fatal "Exitierendes MySQL Datenbank-Verzeichnis nicht gefunden!" + fi + + + 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 # 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 + +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 +echo "## - Erstelle Datenbank-Verzeichnis \"$MYSQL_DATA_DIR\"" >> ${logdir}/main.log +echo "## -" >> ${logdir}/main.log +echo "mkdir -p $MYSQL_DATA_DIR" >> ${logdir}/main.log +mkdir -p $MYSQL_DATA_DIR >> ${logdir}/main.log 2>&1 +if [ "$?" = "0" ]; then + echo_ok +else + echo_failed + fatal Kann Datenbank-Verzeichnis \"${MYSQL_DATA_DIR}\" nicht erstellen.. +fi + + +echononl "Setze Besitzer \"${MYSQL_USER}:${MYSQL_GROUP}\" für Datenbank-Verzeichnis" +echo "" >> ${logdir}/main.log +echo "## - Setze Besitzer \"${MYSQL_USER}:${MYSQL_GROUP}\" für Datenbank-Verzeichnis" >> ${logdir}/main.log +echo "## -" >> ${logdir}/main.log +echo "chown -R ${MYSQL_USER}:${MYSQL_GROUP} ${MYSQL_DATA_DIR}" >> ${logdir}/main.log +chown -R ${MYSQL_USER}:${MYSQL_GROUP} ${MYSQL_DATA_DIR} >> ${logdir}/main.log 2>&1 +if [ "$?" = "0" ]; then + echo_ok +else + echo_failed + fatal Kann Besitzer für Datenbank-Verzeichnis \"${MYSQL_DATA_DIR}\" nicht ändern.. +fi + +echononl "Setze Verzeichnisrechte \"700\" für Datenbank-Verzeichnis" +echo "" >> ${logdir}/main.log +echo "## - Setze Verzeichnisrechte \"700\" für Datenbank-Verzeichnis" >> ${logdir}/main.log +echo "## -" >> ${logdir}/main.log +echo "chmod 700 ${MYSQL_DATA_DIR}" >> ${logdir}/main.log +chmod 700 ${MYSQL_DATA_DIR} >> ${logdir}/main.log 2>&1 +if [ "$?" = "0" ]; then + echo_ok +else + echo_failed + fatal Kann Verzeichnisrechte für Datenbank-Verzeichnis \"${MYSQL_DATA_DIR}\" nicht ändern.. +fi + + +echononl "Erstelle LOG Verzeichnis \"$MYSQL_LOG_DIR\".." +echo "" >> ${logdir}/main.log +echo "## - Erstelle LOG Verzeichnis \"$MYSQL_LOG_DIR\"" >> ${logdir}/main.log +echo "## -" >> ${logdir}/main.log +echo "mkdir -p $MYSQL_LOG_DIR" >> ${logdir}/main.log +mkdir -p $MYSQL_LOG_DIR >> ${logdir}/main.log 2>&1 +if [ "$?" = "0" ]; then + echo_ok + _mysql_log=${MYSQL_LOG_DIR}/mysql.log + _mysql_error_log=${MYSQL_LOG_DIR}/mysql.err + _mysql_slow_query_log=${MYSQL_LOG_DIR}/slow_query.log +else + echo_failed + fatal Kann LOG Verzeichnis \"${MYSQL_LOG_DIR}\" nicht erstellen.. +fi + + +echononl "Setze Besitzer \"${MYSQL_USER}:${MYSQL_GROUP}\" für LOG Verzeichnis" +echo "" >> ${logdir}/main.log +echo "## - Setze Besitzer \"${MYSQL_USER}:${MYSQL_GROUP}\" für LOG Verzeichnis" >> ${logdir}/main.log +echo "## -" >> ${logdir}/main.log +echo "chown -R ${MYSQL_USER}:${MYSQL_GROUP} ${MYSQL_LOG_DIR}" >> ${logdir}/main.log +chown -R ${MYSQL_USER}:${MYSQL_GROUP} ${MYSQL_LOG_DIR} >> ${logdir}/main.log 2>&1 +if [ "$?" = "0" ]; then + echo_ok +else + echo_failed + fatal Kann Besitzer für LOG Verzeichnis \"${MYSQL_LOG_DIR}\" nicht ändern.. +fi + +echononl "Setze Verzeichnisrechte \"2750\" für LOG Verzeichnis" +echo "" >> ${logdir}/main.log +echo "## - Setze Verzeichnisrechte \"2750\" für LOG Verzeichnis" >> ${logdir}/main.log +echo "## -" >> ${logdir}/main.log +echo "chmod 2750 ${MYSQL_LOG_DIR}" >> ${logdir}/main.log +chmod 2750 ${MYSQL_LOG_DIR} >> ${logdir}/main.log 2>&1 +if [ "$?" = "0" ]; then + echo_ok +else + echo_failed + fatal Kann Verzeichnisrechte für LOG Verzeichnis \"${MYSQL_LOG_DIR}\" nicht ändern.. +fi + + +if [ -d "${MYSQL_SRC_DIR}" ];then + echononl "Verschiebe exitierendes Sourceverzeichnis ..." + echo "" >> ${logdir}/main.log + echo "## - Verschiebe exitierendes Sourceverzeichnis" >> ${logdir}/main.log + echo "## -" >> ${logdir}/main.log + echo "mv ${MYSQL_SRC_DIR} ${MYSQL_SRC_DIR}.${_backup_date}" >> ${logdir}/main.log + mv ${MYSQL_SRC_DIR} ${MYSQL_SRC_DIR}.$_backup_date >> ${logdir}/main.log 2>&1 + if [ "$?" = "0" ]; then + echo_ok + else + echo_failed + fatal Kann Sourceverzeichnis \"${MYSQL_SRC_DIR}\" nicht verschieben.. + 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 + + 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 + + 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 + + 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 + + +## ----- +## - 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 + 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 + 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 + + +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 +# - +# - To get a complete list of available options, type +# - shell> cmake . -LH | tee ~/mysql_cmake_options.txt +# - +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 + . + -DINSTALL_SECURE_FILE_PRIVDIR=\"\" + -DENABLED_LOCAL_INFILE=1 + -DDOWNLOAD_BOOST=1 + -DWITH_BOOST=$MYSQL_INSTALL_DIR +" +if $INSTALL_SYSTEMD_SERVICE ; then + cmake_options="$cmake_options -DWITH_SYSTEMD=1 + -DSYSTEMD_PID_DIR=$SYSTEMD_PID_DIR" +fi +echo "cmake_options=\"$cmake_options\"" >> ${logdir}/main.log +echo_ok + +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 +if [ "$?" = "0" ]; then + echo_ok +else + echo_failed + fatal Konfiguration fehlgeschlagen. Siehe ${logdir}/cmake-conf.log .. +fi + +echononl "Kompiliere MySQL.." +echo "" >> ${logdir}/main.log +echo "## - Kompiliere MySQL" >> ${logdir}/main.log +echo "## -" >> ${logdir}/main.log +echo "## - See: ${logdir}/make.log" >> ${logdir}/main.log +echo "## -" >> ${logdir}/main.log +echo "make" >> ${logdir}/main.log +make > ${logdir}/make.log 2>&1 +if [ "$?" = "0" ]; then + echo_ok +else + echo_failed + fatal Kompilieren der MySQL Sourcen ist fehlgeschlagen. Siehe ${logdir}/make.log .. +fi + +echononl "Installiere MySQL.." +echo "" >> ${logdir}/main.log +echo "## - Installiere MySQL" >> ${logdir}/main.log +echo "## -" >> ${logdir}/main.log +echo "## - See: ${logdir}/make_install.log" >> ${logdir}/main.log +echo "## -" >> ${logdir}/main.log +echo "make install" >> ${logdir}/main.log +make install > ${logdir}/make_install.log 2>&1 +if [ "$?" = "0" ]; then + echo_ok +else + echo_failed + 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 + if ! grep /usr/local/mysql/man /etc/manpath.config > /dev/null 2<&1 ; then + echo "## - Konfiguriere Manpages" >> ${logdir}/main.log + echo "## -" >> ${logdir}/main.log + echo "## - Fuege folgend Zeilen am Ende der Datei \"/etc/manpath.config\" hinzu:" >> ${logdir}/main.log + echo "## -" >> ${logdir}/main.log + echo "## - MANDATORY_MANPATH /usr/local/mysql/man /var/cache/man" >> ${logdir}/main.log + echo "## - MANPATH_MAP /usr/local/mysql/bin /usr/local/mysql/man" >> ${logdir}/main.log + echo "## - MANPATH_MAP /usr/local/mysql/bin /usr/local/mysql/man" >> ${logdir}/main.log + echo "## -" >> ${logdir}/main.log + + echo >> /etc/manpath.config + echo "MANDATORY_MANPATH /usr/local/mysql/man /var/cache/man" >> /etc/manpath.config + echo "MANPATH_MAP /usr/local/mysql/bin /usr/local/mysql/man" >> /etc/manpath.config + echo "MANDB_MAP /usr/local/mysql/man /var/cache/man" >> /etc/manpath.config + + _done=true + fi +elif [ -f /etc/man.conf];then + if ! grep /opt/apache2/man /etc/man.conf > /dev/null 2<&1 ; then + echo "## - Konfiguriere Manpages" >> ${logdir}/main.log + echo "## -" >> ${logdir}/main.log + echo "## - Fuege folgend Zeilen am Ende der Datei \"/etc/man.conf\" hinzu:" >> ${logdir}/main.log + echo "## -" >> ${logdir}/main.log + echo "## - MANPATH /opt/mysql/man /var/cache/man" >> ${logdir}/main.log + echo "## - MANPATH_MAP /opt/mysql/bin /opt/apache2/man" >> ${logdir}/main.log + echo "## -" >> ${logdir}/main.log + + echo >> /etc/man.conf + echo "MANPATH /opt/mysql/man /var/cache/man" >> /etc/man.conf + echo "MANPATH_MAP /opt/mysql/bin /opt/apache2/man" >> /etc/man.conf + + _done=true + fi +fi +if $_done ; then + echo_ok +else + echo_skipped +fi + +## - Symlink Installationsverzeichnis (i.d.R. /usr/local/mysql) +## - +if $SYMLINK_INSTALL_DIR ; then + + echononl "Entferne vorhandenen Symlink `dirname $MYSQL_INSTALL_DIR`/mysql.." + if [[ -h "$(dirname $MYSQL_INSTALL_DIR)/mysql" ]]; then + echo "" >> ${logdir}/main.log + echo "## - Entferne vorhandenen Symlink `dirname $MYSQL_INSTALL_DIR`/mysql" >> ${logdir}/main.log + echo "## -" >> ${logdir}/main.log + echo "rm \"$(dirname $MYSQL_INSTALL_DIR)/mysql\"" >> ${logdir}/main.log + rm "$(dirname $MYSQL_INSTALL_DIR)/mysql" >> ${logdir}/main.log 2>&1 + if [ "$?" = "0" ]; then + echo_ok + else + echo_failed + error Kann Symlink `dirname $MYSQL_INSTALL_DIR`/mysql nicht entfernen.. + fi + else + echo_skipped + fi + + echononl "Verschiebe Verzeichnis '$(dirname $MYSQL_INSTALL_DIR)/mysql' ..." + if [ -d "$(dirname $MYSQL_INSTALL_DIR)/mysql" ]; then + echo "" >> ${logdir}/main.log + echo "## - Verschiebe Verzeichnis '$(dirname $MYSQL_INSTALL_DIR)/mysql'" >> ${logdir}/main.log + echo "## -" >> ${logdir}/main.log + echo "mv \"$(dirname $MYSQL_INSTALL_DIR)/mysql)\" \"$(dirname $MYSQL_INSTALL_DIR)/mysql.$(date +"%Y%m%d-%H%M")" \ + >> ${logdir}/main.log + mv "$(dirname $MYSQL_INSTALL_DIR)/mysql" "$(dirname $MYSQL_INSTALL_DIR)/mysql.$(date +"%Y%m%d-%H%M")" \ + >> ${logdir}/main.log 2>&1 + if [ "$?" = "0" ]; then + echo_ok + else + echo_failed + error Kann Installationsverzeichnis \"${MYSQL_INSTALL_DIR}\" nicht verschieben.. + fi + else + echo_skipped + fi + + echononl "Erstelle Symlink $(dirname $MYSQL_INSTALL_DIR)/mysql --> $MYSQL_INSTALL_DIR" + echo "" >> ${logdir}/main.log + echo "## - Erstelle Symlink $(dirname $MYSQL_INSTALL_DIR)/mysql --> $MYSQL_INSTALL_DIR" >> ${logdir}/main.log + echo "## -" >> ${logdir}/main.log + echo "ln -s \"$(basename $MYSQL_INSTALL_DIR)\" \"$(dirname $MYSQL_INSTALL_DIR)/mysql\"" >> ${logdir}/main.log + ln -s "$(basename $MYSQL_INSTALL_DIR)" "$(dirname $MYSQL_INSTALL_DIR)/mysql" >> ${logdir}/main.log 2>&1 + if [ "$?" = "0" ]; then + echo_ok + else + echo_failed + error Kann Symlink `basename $MYSQL_INSTALL_DIR` --> `dirname $MYSQL_INSTALL_DIR`/mysql nicht erstellen .. + fi +fi + +## - Symlink Datenverzeichnis +## - +if $SYMLINK_DATA_DIR ; then + + if [ -h "$(dirname $MYSQL_DATA_DIR)/mysql" ]; then + echononl "Entferne vorhandenen Symlink '$(dirname $MYSQL_DATA_DIR)/mysql'.." + echo "" >> ${logdir}/main.log + echo "## - Entferne vorhandenen Symlink '$(dirname $MYSQL_DATA_DIR)/mysql'" >> ${logdir}/main.log + echo "## -" >> ${logdir}/main.log + echo "rm $(dirname $MYSQL_DATA_DIR)/mysql" >> ${logdir}/main.log + rm $(dirname $MYSQL_DATA_DIR)/mysql >> ${logdir}/main.log 2>&1 + if [ "$?" = "0" ]; then + echo_ok + else + echo_failed + error Kann Symlink `dirname $MYSQL_DATA_DIR`/mysql nicht entfernen.. + fi + fi + + if [ -d "$(dirname $MYSQL_DATA_DIR)/mysql" ]; then + echononl "Verschiebe Verzeichnis '$(dirname $MYSQL_DATA_DIR)/mysql' ..." + echo "" >> ${logdir}/main.log + echo "## - Verschiebe Verzeichnis '$(dirname $MYSQL_DATA_DIR)/mysql'" >> ${logdir}/main.log + echo "## -" >> ${logdir}/main.log + echo "mv \"$(dirname $MYSQL_DATA_DIR)/mysql\" \"$(dirname $MYSQL_DATA_DIR)/mysql.$(date +"%Y%m%d-%H%M")" \ + >> ${logdir}/main.log + mv "$(dirname $MYSQL_DATA_DIR)/mysql" "$(dirname $MYSQL_DATA_DIR)/mysql.$(date +"%Y%m%d-%H%M")" \ + >> ${logdir}/main.log 2>&1 + if [ "$?" = "0" ]; then + echo_ok + else + echo_failed + error Kann Datenverzeichnis \"${MYSQL_DATA_DIR}\" nicht verschieben.. + fi + fi + + echononl "Erstelle Symlink `dirname $MYSQL_DATA_DIR`/mysql --> $MYSQL_DATA_DIR" + echo "" >> ${logdir}/main.log + echo "## - Erstelle Symlink `dirname $MYSQL_DATA_DIR`/mysql --> $MYSQL_DATA_DIR" >> ${logdir}/main.log + echo "## -" >> ${logdir}/main.log + echo "ln -s \"$(basename $MYSQL_DATA_DIR)\" \"$(dirname $MYSQL_DATA_DIR)/mysql\"" >> ${logdir}/main.log + ln -s "$(basename $MYSQL_DATA_DIR)" "$(dirname $MYSQL_DATA_DIR)/mysql" >> ${logdir}/main.log 2>&1 + if [ "$?" = "0" ]; then + echo_ok + else + echo_failed + error "Kann Symlink $(basename $MYSQL_DATA_DIR) --> $(dirname $MYSQL_DATA_DIR)/mysql nicht erstellen .." + fi +fi + + +_checkdir="$(dirname "$MYSQL_INSTALL_DIR")/mysql/bin" +echononl "Füge '$_checkdir' zur PATH Variable hinzu .." +if [ -f /etc/profile ]; 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=\$_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 $_checkdir >> ${logdir}/main.log 2>&1 ; then + export PATH=${_checkdir}:$PATH + fi + + else + echo_skipped + fi +else + echo_skipped +fi + + +## ----- +## - 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 +echo "## -" >> ${logdir}/main.log +echo "cat << EOF >/etc/ld.so.conf.d/mysql.conf +`dirname $MYSQL_INSTALL_DIR`/mysql/lib +EOF" >> ${logdir}/main.log + +cat << EOF >/etc/ld.so.conf.d/mysql.conf +`dirname $MYSQL_INSTALL_DIR`/mysql/lib +EOF +if [ "$?" = "0" ]; then + echo_ok +else + echo_failed + error Kann Datei /etc/ld.so.conf.d/mysql.conf für dynamischen Linker nicht erstellen .. +fi + +echononl "Erstelle symbolische Links auf Libraries (ldconfig).." +echo "" >> ${logdir}/main.log +echo "## - Erstelle symbolische Links auf Libraries (ldconfig)" >> ${logdir}/main.log +echo "## -" >> ${logdir}/main.log +echo "ldconfig" >> ${logdir}/main.log +ldconfig >> ${logdir}/main.log 2>&1 +if [ "$?" = "0" ]; then + echo_ok +else + echo_failed + error "Der Befehl \"ldconfig\" ist fehgeschlagen" +fi + +echo +echononl "Richte MySQL Systemtabellen ein.." +if ! $UPDATE_MYSQL ; then + cd $MYSQL_INSTALL_DIR + echo "" >> ${logdir}/main.log + echo "## - Richte MySQL Systemtabellen ein" >> ${logdir}/main.log + echo "## -" >> ${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 + + ${MYSQL_INSTALL_DIR}/bin/mysqld --initialize-insecure \ + --user=$MYSQL_USER \ + --basedir=$MYSQL_INSTALL_DIR \ + --datadir=$MYSQL_DATA_DIR \ + --lc-messages-dir=$MYSQL_INSTALL_DIR/share/german \ + >> ${logdir}/main.log 2>&1 + if [ "$?" = "0" ]; then + echo_ok + else + echo_failed + 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 +fi + + +echononl "Create directory \"etc\".." +cd $MYSQL_INSTALL_DIR +echo "" >> ${logdir}/main.log +echo "## - Create directory \"etc\"" >> ${logdir}/main.log +echo "## -" >> ${logdir}/main.log +echo "cd $MYSQL_INSTALL_DIR" >> ${logdir}/main.log +echo "mkdir ${MYSQL_INSTALL_DIR}/etc" >> ${logdir}/main.log +mkdir ${MYSQL_INSTALL_DIR}/etc >> ${logdir}/main.log 2>&1 +if [ "$?" = "0" ]; then + echo_ok +else + echo_failed +fi + +echononl "Change permissions (755) to directory \"etc\".." +echo "" >> ${logdir}/main.log +echo "## - Change permissions (755) to directory \"etc\"" >> ${logdir}/main.log +echo "## -" >> ${logdir}/main.log +echo "chmod 755 ${MYSQL_INSTALL_DIR}/etc" >> ${logdir}/main.log +chmod 755 ${MYSQL_INSTALL_DIR}/etc >> ${logdir}/main.log 2>&1 +if [ "$?" = "0" ]; then + echo_ok +else + echo_failed +fi + + +echononl "Create directory \"mysql-files\".." +cd $MYSQL_INSTALL_DIR +echo "" >> ${logdir}/main.log +echo "## - Create directory \"mysql-files\"" >> ${logdir}/main.log +echo "## -" >> ${logdir}/main.log +echo "cd $MYSQL_INSTALL_DIR" >> ${logdir}/main.log +echo "mkdir ${MYSQL_INSTALL_DIR}/mysql-files" >> ${logdir}/main.log +mkdir ${MYSQL_INSTALL_DIR}/mysql-files >> ${logdir}/main.log 2>&1 +if [ "$?" = "0" ]; then + echo_ok +else + echo_failed +fi + +echononl "Change permissions (770) to directory \"mysql-files\".." +echo "" >> ${logdir}/main.log +echo "## - Change permissions (770) to directory \"mysql-files\"" >> ${logdir}/main.log +echo "## -" >> ${logdir}/main.log +echo "chmod 770 ${MYSQL_INSTALL_DIR}/mysql-files" >> ${logdir}/main.log +chmod 770 ${MYSQL_INSTALL_DIR}/mysql-files >> ${logdir}/main.log 2>&1 +if [ "$?" = "0" ]; then + echo_ok +else + echo_failed +fi + +echononl "Change owner ($MYSQL_USER) of directory 'mysql-files'.." +echo "" >> ${logdir}/main.log +echo "## - Change owner ($MYSQL_USER) of directory 'mysql-files'" >> ${logdir}/main.log +echo "## -" >> ${logdir}/main.log +echo "chown $MYSQL_USER ${MYSQL_INSTALL_DIR}/mysql-files" >> ${logdir}/main.log +chown $MYSQL_USER ${MYSQL_INSTALL_DIR}/mysql-files >> ${logdir}/main.log 2>&1 +if [ "$?" = "0" ]; then + echo_ok +else + echo_failed +fi + +echononl "Generate MySQL SSL Certificate and RSA Key.." +if [[ "$MYSQL_MAIN_VERSION" = "5.6" ]] ; then + echo_skipped +else + echo "" >> ${logdir}/main.log + echo "## - Generate MySQL SSL Certificate and RSA Key" >> ${logdir}/main.log + echo "## -" >> ${logdir}/main.log + echo "cd $MYSQL_INSTALL_DIR" >> ${logdir}/main.log + cd $MYSQL_INSTALL_DIR + echo "${MYSQL_INSTALL_DIR}/bin/mysql_ssl_rsa_setup --datadir=$MYSQL_DATA_DIR .." >> ${logdir}/main.log + ${MYSQL_INSTALL_DIR}/bin/mysql_ssl_rsa_setup --datadir=$MYSQL_DATA_DIR >> ${logdir}/main.log 2>&1 + 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 +fi + + +echononl "Setze Besitzer/Gruppe für das Datenbankverzeichnis.." +echo "" >> ${logdir}/main.log +echo "## - Setze Besitzer/Gruppe für das Datenbankverzeichnis" >> ${logdir}/main.log +echo "## -" >> ${logdir}/main.log +echo "chown -R ${MYSQL_USER}:$MYSQL_GROUP $MYSQL_DATA_DIR" >> ${logdir}/main.log +chown -R ${MYSQL_USER}:$MYSQL_GROUP $MYSQL_DATA_DIR >> ${logdir}/main.log 2>&1 +if [ "$?" = "0" ]; then + echo_ok +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 + + +_new_cnf_needed=false +if $UPDATE_MYSQL ; then + + _my_cnf_old= + if [[ "$CURRENT_VERSION" = "$MYSQL_VERSION" ]] ; then + if [[ -f "$(realpath ${MYSQL_CUR_INSTALL_DIR}).${_backup_date}/etc/my.cnf" ]]; then + _my_cnf_old="$(realpath ${MYSQL_CUR_INSTALL_DIR}).${_backup_date}/etc/my.cnf" + elif [[ -f "$(realpath ${MYSQL_CUR_INSTALL_DIR}).${_backup_date}/my.cnf" ]]; then + _my_cnf_old="$(realpath ${MYSQL_CUR_INSTALL_DIR}).${_backup_date}/my.cnf" + fi + else + if [[ -f "$(realpath ${MYSQL_CUR_INSTALL_DIR})/etc/my.cnf" ]]; then + _my_cnf_old="$(realpath ${MYSQL_CUR_INSTALL_DIR})/etc/my.cnf" + elif [[ -f "$(realpath ${MYSQL_CUR_INSTALL_DIR})/my.cnf" ]]; then + _my_cnf_old="$(realpath ${MYSQL_CUR_INSTALL_DIR})/my.cnf" + fi + fi + + echononl "Copy 'my.cnf from old installation to the new one.." + if [[ -f "$_my_cnf_old" ]] ; 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 \"$_my_cnf_old\" \"${MY_CNF_FILE}\"" >> ${logdir}/main.log + cp -a "$_my_cnf_old" "${MY_CNF_FILE}" >> ${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_skipped + fi + + if [[ ! -f "$MY_CNF_FILE" ]] ; then + _new_cnf_needed=true + else + if [[ "$MYSQL_MAJOR_VERSION" -gt 5 ]] \ + || ( [[ "$MYSQL_MAJOR_VERSION" -eq 5 ]] && [[ "$MYSQL_MINOR_VERSION" -ge 7 ]] ) ; then + proof_var="thread_concurrency" + echononl "Deaktiviere '${proof_var} .." + if grep -q -E "^\s*${proof_var}.*" "$MY_CNF_FILE" 2> /dev/null ; then + echo "" >> ${logdir}/main.log + echo "## - Deaktiviere '${proof_var} .." >> ${logdir}/main.log + echo "## -" >> ${logdir}/main.log + echo "perl -i -n -p -e \"s/^(\s*)(${proof_var}.*)/#\1\2/\" \"$MY_CNF_FILE\"" >> ${logdir}/main.log + perl -i -n -p -e "s/^(\s*)(${proof_var}.*)/#\1\2/" "$MY_CNF_FILE" >> ${logdir}/main.log 2>&1 + if [ "$?" = "0" ]; then + echo_ok + else + echo_failed + warn "Konnte '${proof_var}' nicht deaktivieren." + fi + else + echo_skipped + fi + + proof_var="innodb_additional_mem_pool_size" + echononl "Deaktiviere '${proof_var} .." + if grep -q -E "^\s*${proof_var}.*" "$MY_CNF_FILE" 2> /dev/null ; then + echo "" >> ${logdir}/main.log + echo "## - Deaktiviere '${proof_var} .." >> ${logdir}/main.log + echo "## -" >> ${logdir}/main.log + echo "perl -i -n -p -e \"s/^(\s*)(${proof_var}.*)/#\1\2/\" \"$MY_CNF_FILE\"" >> ${logdir}/main.log + perl -i -n -p -e "s/^(\s*)(${proof_var}.*)/#\1\2/" "$MY_CNF_FILE" >> ${logdir}/main.log 2>&1 + if [ "$?" = "0" ]; then + echo_ok + else + echo_failed + warn "Konnte '${proof_var}' nicht deaktivieren." + fi + else + echo_skipped + fi + + fi # if [[ "$MYSQL_MAJOR_VERSION" -lt 5 ]] || ... + fi +fi + +if ! $UPDATE_MYSQL || $_new_cnf_needed ; then + echononl "Erstelle Konfigurationsdatei ${MYSQL_INSTALL_DIR}/etc/my.cnf.." + + echo "" >> ${logdir}/main.log + echo "## - Erstelle Konfigurationsdatei ${MYSQL_INSTALL_DIR}/etc/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` + + echo "" >> ${logdir}/main.log + echo "let MYSQL_THREAD_CONCURRENCY=$_number_cpus*2" >> ${logdir}/main.log + let MYSQL_THREAD_CONCURRENCY=$_number_cpus*2 + + echo "" >> ${logdir}/main.log + echo "\$MYSQL_THREAD_CONCURRENCY = $MYSQL_THREAD_CONCURRENCY" >> ${logdir}/main.log + + echo "cat << EOF > ${MYSQL_INSTALL_DIR}/etc/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 + + +## - sql-mode +## - +## - To be compartible with older programming on mysql 5.6 +## - +sql-mode = \"ONLY_FULL_GROUP_BY,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION\" + + +## - 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 + + +## - sql-mode +## - +## - To be compartible with older programming on mysql 5.6 +## - +sql-mode = "ONLY_FULL_GROUP_BY,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION" + +EOF" >> ${logdir}/main.log + + cat << EOF > ${MYSQL_INSTALL_DIR}/etc/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 + + +## - sql-mode +## - +## - To be compartible with older programming on mysql 5.6 +## - +sql-mode = "ONLY_FULL_GROUP_BY,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION" + + +## - 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 + + +## - sql-mode +## - +## - To be compartible with older programming on mysql 5.6 +## - +sql-mode = "ONLY_FULL_GROUP_BY,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION" + +EOF + if [ "$?" = "0" ]; then + echo_ok + else + echo_failed + error Konnte Konfigurationsdatei \"${MYSQL_INSTALL_DIR}/etc/my.cnf\" nicht erstellen.. + fi + +fi + +if [[ ! -d "/etc/mysql" ]]; then + + echononl "Erstelle Verzeichnis '/etc/mysql' .." + echo "" >> ${logdir}/main.log + echo "## - Erstelle Verzeichnis '/etc/mysql' .." >> ${logdir}/main.log + echo "## -" >> ${logdir}/main.log + echo "mkdir \"/etc/mysql\"" >> ${logdir}/main.log + mkdir "/etc/mysql" >> ${logdir}/main.log 2>&1 + if [ "$?" = "0" ]; then + echo_ok + else + echo_failed + error "Konnte Verzeichnis '/etc/mysql' nicht erstellen" + fi + +else + + if [[ -f "/etc/mysql/my.cnf" ]]; then + echononl "Backup Symlink/Datei '/etc/mysql/my.cnf' .." + echo "" >> ${logdir}/main.log + echo "## - Backup Symlink/Datei '/etc/mysql/my.cnf' .." >> ${logdir}/main.log + echo "## -" >> ${logdir}/main.log + echo "## -" >> ${logdir}/main.log + echo "mv \"/etc/mysql/my.cnf\" \"/etc/mysql/my.cnf.${_backup_date}\"" >> ${logdir}/main.log + mv "/etc/mysql/my.cnf" "/etc/mysql/my.cnf.${_backup_date}" >> ${logdir}/main.log 2>&1 + if [ "$?" = "0" ]; then + echo_ok + else + echo_failed + error "Konnte Symlink/Datei '/etc/mysql/my.cnf' nicht sichern." + fi + fi + +fi + +echononl "Erstelle Symlink /etc/mysql/my.cnf --> ${MYSQL_INSTALL_DIR}/etc/my.cnf" +echo "" >> ${logdir}/main.log +echo "## - Erstelle Symlink /etc/mysql/my.cnf --> ${MYSQL_INSTALL_DIR}/etc/my.cnf" >> ${logdir}/main.log +echo "## -" >> ${logdir}/main.log +echo "ln -s \"$(dirname \"${MYSQL_INSTALL_DIR}\")/mysql/etc/my.cnf\" \"/etc/mysql/\"" >> ${logdir}/main.log +ln -s "$(dirname "${MYSQL_INSTALL_DIR}")/mysql/etc/my.cnf" "/etc/mysql/my.cnf" >> ${logdir}/main.log 2>&1 +if [ "$?" = "0" ]; then + echo_ok +else + echo_failed + error "Konnte Symlink /etc/mysql/my.cnf --> ${MYSQL_INSTALL_DIR}/etc/my.cnf nicht erstellen." +fi + + +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 + + echononl "Aktiviere Stopword Datei.." + if ! grep -q -E "^\s*ft_stopword_file.*" "${MYSQL_INSTALL_DIR}/etc/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/\" ${MYSQL_INSTALL_DIR}/etc/my.cnf" >> ${logdir}/main.log + perl -i -n -p -e "s/^(\s*#\s*)(ft_stopword_file.*)/#\1\2\n\2/" ${MYSQL_INSTALL_DIR}/etc/my.cnf >> ${logdir}/main.log 2>&1 + if [ "$?" = "0" ]; then + echo_ok + else + echo_failed + warn "Konnte Stopword Datei \"stopwords_utf8_iso8859-15.txt\" nicht aktivieren." + fi + else + echo_skipped + fi + + else + echo_failed + warn "Konnte stopwords_utf8_iso8859-15.txt nicht nach ${MYSQL_INSTALL_DIR} kopieren" + fi +else + echo_skipped + warn "Konnte ${MYSQL_SRC_BASE_DIR}/stopwords_utf8_iso8859-15.txt finden." +fi + + +if $INSTALL_SYSTEMD_SERVICE ; then + + echononl "Kopiere Service File nach '/etc/systemd/system'.." + echo "" >> ${logdir}/main.log + 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/$MYSQL_SERVICE_FILE" >> ${logdir}/main.log + cp "${MYSQL_INSTALL_DIR}/lib/systemd/system/mysqld.service" /etc/systemd/system/$MYSQL_SERVICE_FILE >> ${logdir}/main.log 2>&1 + + if [[ $? -eq 0 ]]; then + echo_ok + else + echo_failed + error "Kopieren Service File nach '/etc/systemd/system/${MYSQL_SERVICE_FILE}' 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 "Set open_files_limit (LimitNOFILE) to $(ulimit -Hn) .." + echo "" >> ${logdir}/main.log + echo "## - Set open_files_limit (LimitNOFILE) to $(ulimit -Hn) .." >> ${logdir}/main.log + echo "## -" >> ${logdir}/main.log + + if grep -q -E "^\s*LimitNOFILE\s*=" /etc/systemd/system/$MYSQL_SERVICE_FILE ; then + echo "perl -i -n -p -e \"s/^(\s*LimitNOFILE\s*=.*)/#\1\nLimitNOFILE = $(ulimit -Hn)/\" /etc/systemd/system/$MYSQL_SERVICE_FILE" >> ${logdir}/main.log + perl -i -n -p -e "s/^(\s*LimitNOFILE\s*=.*)/#\1\nLimitNOFILE = $(ulimit -Hn)/" \ + /etc/systemd/system/$MYSQL_SERVICE_FILE >> ${logdir}/main.log 2>&1 + _retval=$? + else + echo "LimitNOFILE = $(ulimit -Hn)" >> /etc/systemd/system/$MYSQL_SERVICE_FILE + _retval=$? + fi + if [ "$_retval" = "0" ]; then + echo_ok + else + echo_failed + error "Setting open_files_limit (LimitNOFILE) to $(ulimit -Hn) failed!" + 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 + error "Aktivieren des MySQL Datenbank Service für den automatischem Start fehgeschalgen!" + fi + + 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 + echo_ok + else + echo_failed + error "Run 'systemctl daemon-reload' failed!" + fi + + +else + + 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 +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.. + + 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 + 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.. + + 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 + +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 + + ## - Drop database test + ## - + if [[ -d "${MYSQL_DATA_DIR}/test" ]]; then + echononl "Delete database 'test'.." + echo "" >> ${logdir}/main.log + echo "## - Delete database 'test'.." >> ${logdir}/main.log + echo "## - " >> ${logdir}/main.log + echo "${MYSQL_INSTALL_DIR}/bin/mysql -uroot mysql -N -s -e \"DROP DATABASE test\"" >> ${logdir}/main.log + ${MYSQL_INSTALL_DIR}/bin/mysql -uroot mysql -N -s -e "DROP DATABASE test" >> ${logdir}/main.log 2>&1 + if [[ $? -eq 0 ]]; then + echo_ok + else + echo_failed + error "Deleting database 'test' 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 "Delete rows concerning database 'test' from table 'mysql.db'.." + echo "" >> ${logdir}/main.log + echo "## - Delete rows concerning database 'test' from table 'mysql.db'.." >> ${logdir}/main.log + echo "## - " >> ${logdir}/main.log + echo "${MYSQL_INSTALL_DIR}/bin/mysql -uroot mysql -N -s -e \"DELETE FROM db WHERE Db LIKE 'test%'\"" >> ${logdir}/main.log + ${MYSQL_INSTALL_DIR}/bin/mysql -uroot mysql -N -s -e "DELETE FROM db WHERE Db LIKE 'test%'" >> ${logdir}/main.log 2>&1 + if [[ $? -eq 0 ]]; then + echo_ok + else + echo_failed + error "Deleting rows concerning database 'test' from table 'mysql.db' 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 + + ## - 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')\" WHERE User = 'root'" >> ${logdir}/main.log + + ${MYSQL_INSTALL_DIR}/bin/mysql -uroot mysql -N -s -e "UPDATE user SET authentication_string = password('$MYSQL_ROOT_PW') WHERE User = 'root'" \ + >> ${logdir}/main.log 2>&1 + if [ "$?" = "0" ]; then + echo_ok + else + echo_failed + error Konnte root Passwort für 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 + echo_ok + 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.." + 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=$? + if [[ $ret_val -eq 0 ]] ; then + echo_ok + elif [[ $ret_val -eq 2 ]] ; then + echo_skipped + 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 + + + +_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 "## - 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 + +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 + _maint_passwd=`cat /dev/urandom|tr -dc "a-zA-Z0-9-_\$\?" | fold -w16 | head -n 1` >> ${logdir}/main.log 2>&1 + else + echo "_maint_passwd=\`$PW_GEN -v -B 16 1\`" >> ${logdir}/main.log + _maint_passwd=`$PW_GEN -v -B 16 1` >> ${logdir}/main.log 2>&1 + fi + if [ "$?" = "0" ]; then + echo_ok + 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.." + 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 + if [ "$?" = "0" ]; then + echo_ok + 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}'.." + 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 + echo_ok + 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 + echo_ok + 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 +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 + if [ "$?" = "0" ]; then + echo_ok + else + echo_failed + error Konnte Konfigurationsdatei \"${MYSQL_INSTALL_DIR}/sys-maint.cnf\" nicht erstellen.. + fi +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 +$_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 +if [ "$?" = "0" ]; then + echo_ok +else + echo_failed + error Konnte Logrotate Definitionsdatei \"/etc/logrotate.d/mysql\" nicht erstellen.. +fi + + + +echo +echononl "Reenable crontab for user root .." +if $_crontab_found ; then + 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 + echo_ok + else + echo_failed + fi + + 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 + echo_ok + else + echo_failed + fi +else + echo_skipped +fi + +info "See '${logdir}/main.log' for more details." + +clean_up 0 diff --git a/install_mysql.sh b/install_mysql.sh index 1cd5086..05fb875 100755 --- a/install_mysql.sh +++ b/install_mysql.sh @@ -2,8 +2,6 @@ _backup_date="$(date +"%Y-%m-%d-%H%M")" -_MYSQL_VERSION=5.7.20 - _MYSQL_SRC_BASE_DIR=$(dirname $(realpath $0)) _MYSQL_LOG_DIR=/var/log/mysql @@ -19,15 +17,23 @@ _DISTRIBUTION=Debian _VSERVER_GUEST=nein -_required_debian_packages="libevent-dev +_required_debian_packages="default-jdk + gnutls-dev + libaio-dev + libarchive-dev + libbison-dev + libboost-all-dev + libcrack2-dev + libdw-dev + libelf-dev + libevent-dev + libgroonga-dev libjemalloc-dev - libboost-all-dev - libreadline-gplv2-dev libjudy-dev libpam0g-dev libpcre3-dev - gnutls-dev - default-jdk" + libreadline-gplv2-dev + libsystemd-dev" _CRONTAB_BAKUP_FILE="$(mktemp)" @@ -184,17 +190,104 @@ else UPDATE_MYSQL=false fi +if ! $UPDATE_MYSQL ; then + + MYSQL_DISTRIBUTION= + echo "" + echo -e "\033[32m--\033[m" + echo "" + echo "Select the MySQL distribution to install." + echo "" + echo "[1] MySQL (the original community edition)" + echo "[2] Percona Server for MySQL" + echo "[3] MariaDB" + echo "" + echononl "Eingabe [1/2/3]: " + + while [ "$MYSQL_DISTRIBUTION" != "MySQL" -a "$MYSQL_DISTRIBUTION" != "MariaDB" -a "$MYSQL_DISTRIBUTION" != "Percona" ];do + read OPTION + case $OPTION in + 1) MYSQL_DISTRIBUTION="MySQL" + ;; + 2) MYSQL_DISTRIBUTION="Percona" + ;; + 3) MYSQL_DISTRIBUTION="MariaDB" + ;; + *) echo "" + echo -e "\tFalsche Eingabe ! [ 1 = MySQL ; 2 = Percona ; 3 = MariaDB ]" + echo "" + echononl "Eingabe:" + ;; + esac + done +fi + if $UPDATE_MYSQL ; then - echo "" + + _MYSQLD_VERSION="$(mysqld -V 2>/dev/null)" + + echo "" + echononl "Get current MySQL distribution .." + if [[ -z "$_MYSQLD_VERSION" ]]; then + echo_failed + fatal "No installed MySQL server or distribution found!" + elif [[ "$_MYSQLD_VERSION" =~ MariaDB ]]; then + MYSQL_CUR_DISTRIBUTION="MariaDB" + elif [[ "$(basename "$(realpath "/usr/local/mysql")")" =~ percona- ]]; then + MYSQL_CUR_DISTRIBUTION="Percona" + elif [[ "$(basename "$(realpath "/usr/local/mysql")")" =~ mysql- ]]; then + MYSQL_CUR_DISTRIBUTION="MySQL" + fi + echo_ok + echononl "Get current MySQL Version.." - CURRENT_VERSION="$(mysql -V | grep -o -E "Distrib\s+[3-9]+\.[0-9]+\.[0-9]+" | awk '{print$2}')" - if [ "$?" = "0" ]; then + CURRENT_VERSION="$(echo $_MYSQLD_VERSION | grep -o -E "[0-9]+\.[0-9]+\.[0-9]+(-[0-9]+)?")" + CURRENT_MAIN_VERSION="$(echo $MYSQL_VERSION | cut -d '.' -f1,2)" + if [[ -n "$CURRENT_VERSION" ]]; then echo_ok else echo_failed fatal "Getting current mysql version failed!" fi - echo "" + + info "Currently installed: $MYSQL_CUR_DISTRIBUTION version $CURRENT_VERSION" + + if [[ "$MYSQL_CUR_DISTRIBUTION" = "MariaDB" ]]; then + MYSQL_DISTRIBUTION="MariaDB" + warn "Update with a MySQL distribution other than 'MariaDB' is not supported!" + else + + MYSQL_DISTRIBUTION= + echo "" + echo -e "\033[32m--\033[m" + echo "" + echo "Select the MySQL distribution to install." + echo "" + echo "Note:" + echo " Update the current installation with MariaDB is not supported!" + echo "" + echo "[1] MySQL (the original community edition)" + echo "[2] Percona Server for MySQL" + echo "" + echononl "Eingabe [1/2]: " + + while [ "$MYSQL_DISTRIBUTION" != "MySQL" -a "$MYSQL_DISTRIBUTION" != "Percona" ];do + read OPTION + case $OPTION in + 1) MYSQL_DISTRIBUTION="MySQL" + ;; + 2) MYSQL_DISTRIBUTION="Percona" + ;; + *) echo "" + echo -e "\tFalsche Eingabe ! [ 1 = MySQL ; 2 = Percona ]" + echo "" + echononl "Eingabe:" + ;; + esac + done + + fi + fi @@ -203,25 +296,42 @@ fi #echo "" echo -e "\033[32m--\033[m" echo "" -echo "Gib die Versionsnummer der zu installierenden MySQL-Distribution an." +echo "Gib die Versionsnummer der zu installierenden MySQL-Distribution (${MYSQL_DISTRIBUTION}) an." echo "" MYSQL_VERSION= while [ "X$MYSQL_VERSION" = "X" ] do - echononl "MySQL Version [$_MYSQL_VERSION]: " + echononl "$MYSQL_DISTRIBUTION Version : " read MYSQL_VERSION if [ "X$MYSQL_VERSION" = "X" ]; then MYSQL_VERSION=$_MYSQL_VERSION fi - _MYSQL_INSTALL_DIR=/usr/local/mysql-$MYSQL_VERSION - _MYSQL_DATA_DIR=/data/mysql-$MYSQL_VERSION - distfile=mysql-${MYSQL_VERSION}.tar.gz + _MYSQL_INSTALL_DIR=/usr/local/${MYSQL_DISTRIBUTION,,}-$MYSQL_VERSION + _MYSQL_DATA_DIR=/data/${MYSQL_DISTRIBUTION,,}-$MYSQL_VERSION done MYSQL_MAIN_VERSION=`echo $MYSQL_VERSION | cut -d '.' -f1,2` MYSQL_MAJOR_VERSION=`echo $MYSQL_VERSION | cut -d '.' -f1` MYSQL_MINOR_VERSION=`echo $MYSQL_VERSION | cut -d '.' -f2` -MYSQL_PATCH_LEVEL=`echo $MYSQL_VERSION | cut -d '.' -f2` +MYSQL_PATCH_LEVEL=`echo $MYSQL_VERSION | cut -d '.' -f3` + +if $UPDATE_MYSQL ; then + if [[ "$MYSQL_DISTRIBUTION" = "MariaDB" ]] && [[ "$MYSQL_MAIN_VERSION" != "$CURRENT_MAIN_VERSION" ]]; then + warn "Only upgrades within minor versions are supported for MariaDB." + fatal "Upgrade MariaDB from version $CURRENT_VERSION to version $MYSQL_VERSION is NOT possible!" + fi +fi + +if [[ "$MYSQL_DISTRIBUTION" = "MySQL" ]]; then + download_base_url="https://dev.mysql.com/get/Downloads/MySQL-${MYSQL_MAIN_VERSION}" + distfile=${MYSQL_DISTRIBUTION,,}-${MYSQL_VERSION}.tar.gz +elif [[ "$MYSQL_DISTRIBUTION" = "Percona" ]] ; then + download_base_url="https://www.percona.com/downloads/Percona-Server-LATEST/Percona-Server-${MYSQL_VERSION}/source/tarball" + distfile="percona-server-${MYSQL_VERSION}.tar.gz" +elif [[ "$MYSQL_DISTRIBUTION" = "MariaDB" ]] ; then + download_base_url="http://ftp.hosteurope.de/mirror/archive.mariadb.org/mariadb-${MYSQL_VERSION}/source" + distfile=${MYSQL_DISTRIBUTION,,}-${MYSQL_VERSION}.tar.gz +fi echo "" @@ -238,7 +348,13 @@ do MYSQL_SRC_BASE_DIR=$_MYSQL_SRC_BASE_DIR fi done -MYSQL_SRC_DIR=${MYSQL_SRC_BASE_DIR}/mysql-$MYSQL_VERSION +if [[ "$MYSQL_DISTRIBUTION" = "MySQL" ]]; then + MYSQL_SRC_DIR=${MYSQL_SRC_BASE_DIR}/mysql-$MYSQL_VERSION +elif [[ "$MYSQL_DISTRIBUTION" = "Percona" ]] ; then + MYSQL_SRC_DIR=${MYSQL_SRC_BASE_DIR}/percona-server-$MYSQL_VERSION +elif [[ "$MYSQL_DISTRIBUTION" = "MariaDB" ]] ; then + MYSQL_SRC_DIR=${MYSQL_SRC_BASE_DIR}/mariadb-$MYSQL_VERSION +fi echo "" echo -e "\033[32m--\033[m" @@ -264,8 +380,17 @@ MY_CNF_FILE="${MYSQL_INSTALL_DIR}/etc/my.cnf" if $UPDATE_MYSQL ; then echo "" echononl "Ermittle Installations Verz. der existierenden MySQL Installation." - if [[ -d "$(dirname "$MYSQL_INSTALL_DIR")/mysql-$CURRENT_VERSION" ]]; then + + if [[ "$MYSQL_CUR_DISTRIBUTION" = "MySQL" ]]; then MYSQL_CUR_INSTALL_DIR="$(dirname "$MYSQL_INSTALL_DIR")/mysql-$CURRENT_VERSION" + elif [[ "$MYSQL_CUR_DISTRIBUTION" = "Percona" ]] ; then + MYSQL_CUR_INSTALL_DIR="$(dirname "$MYSQL_INSTALL_DIR")/percona-$CURRENT_VERSION" + elif [[ "$MYSQL_CUR_DISTRIBUTION" = "MariaDB" ]] ; then + MYSQL_CUR_INSTALL_DIR="$(dirname "$MYSQL_INSTALL_DIR")/mariadb-$CURRENT_VERSION" + fi + + + if [[ -d "$MYSQL_CUR_INSTALL_DIR" ]]; then echo_ok else echo_failed @@ -291,9 +416,18 @@ done if $UPDATE_MYSQL ; then echo "" - echononl "Ermittle MySQL-Datenbank Verz. der existierenden MySQL Installation." - if [[ -d "$(dirname "$MYSQL_DATA_DIR")/mysql-$CURRENT_VERSION" ]]; then + + + if [[ "$MYSQL_CUR_DISTRIBUTION" = "MySQL" ]]; then MYSQL_CUR_DATA_DIR="$(dirname "$MYSQL_DATA_DIR")/mysql-$CURRENT_VERSION" + elif [[ "$MYSQL_CUR_DISTRIBUTION" = "Percona" ]] ; then + MYSQL_CUR_DATA_DIR="$(dirname "$MYSQL_DATA_DIR")/percona-$CURRENT_VERSION" + elif [[ "$MYSQL_CUR_DISTRIBUTION" = "MariaDB" ]] ; then + MYSQL_CUR_DATA_DIR="$(dirname "$MYSQL_DATA_DIR")/mariadb-$CURRENT_VERSION" + fi + + echononl "Ermittle MySQL-Datenbank Verz. der existierenden MySQL Installation." + if [[ -d "$MYSQL_CUR_DATA_DIR" ]]; then echo_ok else echo_failed @@ -546,8 +680,12 @@ 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" + if [[ "$MYSQL_DISTRIBUTION" = "MariaDB" ]]; then + MYSQL_SERVICE_FILE="mariadb.service" + else + MYSQL_SERVICE_FILE="mysqld.service" + SYSTEMD_PID_DIR="$MYSQL_DATA_DIR" + fi else MYSQL_SYSV_INIT_SCRIPT="mysql.server" fi @@ -569,10 +707,19 @@ fi echo "" echo "Linuxdistribution.........: $DISTRIBUTION" echo "" +echo "MySQL Distribution........: $MYSQL_DISTRIBUTION" echo "MySQL Versionsnummer......: $MYSQL_VERSION" -echo " MySQL Major Verion......: $MYSQL_MAIN_VERSION" +echo " MySQL Main Verion.......: $MYSQL_MAIN_VERSION" +echo " MySQL Major Verion......: $MYSQL_MAJOR_VERSION" +echo " MySQL Minor Verion......: $MYSQL_MINOR_VERSION" +echo " MySQL Patch Leveln......: $MYSQL_PATCH_LEVEL" echo "" -echo "Sourcecodeverzeicnis......: $MYSQL_SRC_BASE_DIR" +echo "Download base URL.........: $download_base_url" +echo "Download file.............: $distfile" +echo "" +echo "Source Basis Verzeichnis..: $MYSQL_SRC_BASE_DIR" +echo "" +echo "Sourcecodeverzeicnis......: $MYSQL_SRC_DIR" echo "Installationsverzeichnis..: $MYSQL_INSTALL_DIR" echo "Default file 'my.cnf'.....: $MY_CNF_FILE" echo "Datenbankverzeichnis......: $MYSQL_DATA_DIR" @@ -608,32 +755,32 @@ done -## - Sorcecode Verzeichnis vorhanden? -## - -if [ ! -d ${MYSQL_SRC_BASE_DIR} ] ; then - fatal "Kann MySQL Sourcecode Verzeichnis \"${MYSQL_SRC_BASE_DIR}\" nicht finden." -fi - - -## - Sorcecode vorhanden? -## - -if [ ! -f ${MYSQL_SRC_BASE_DIR}/$distfile ] ; then - - echo "" - - echononl "Download $distfile ..." - wget -O ${MYSQL_SRC_BASE_DIR}/$distfile https://dev.mysql.com/get/Downloads/MySQL-${MYSQL_MAIN_VERSION}/$distfile 2>/dev/null - - if [ "$?" = "0" ]; then - echo_ok - else - echo_failed - fatal "Downloading $distfile (https://dev.mysql.com/get/Downloads/MySQL-${MYSQL_MAIN_VERSION}/$distfile) Fehlgeschlagen." - fi -fi - -echo "" -echo "" +### - Sorcecode Verzeichnis vorhanden? +### - +#if [ ! -d ${MYSQL_SRC_BASE_DIR} ] ; then +# fatal "Kann MySQL Sourcecode Verzeichnis \"${MYSQL_SRC_BASE_DIR}\" nicht finden." +#fi +# +# +### - Sorcecode vorhanden? +### - +#if [ ! -f ${MYSQL_SRC_BASE_DIR}/$distfile ] ; then +# +# echo "" +# +# echononl "Download $distfile ..." +# wget -O ${MYSQL_SRC_BASE_DIR}/$distfile https://dev.mysql.com/get/Downloads/MySQL-${MYSQL_MAIN_VERSION}/$distfile 2>/dev/null +# +# if [ "$?" = "0" ]; then +# echo_ok +# else +# echo_failed +# fatal "Downloading $distfile (https://dev.mysql.com/get/Downloads/MySQL-${MYSQL_MAIN_VERSION}/$distfile) Fehlgeschlagen." +# fi +#fi +# +#echo "" +#echo "" ## - Erstelle Logverzeichnis @@ -673,10 +820,19 @@ fi echo "## -" >> ${logdir}/main.log echo "## - Linuxdistribution.........: $DISTRIBUTION" >> ${logdir}/main.log echo "## - " >> ${logdir}/main.log +echo "## - MySQL Distribution........: $MYSQL_DISTRIBUTION" >> ${logdir}/main.log echo "## - MySQL Versionsnummer......: $MYSQL_VERSION" >> ${logdir}/main.log -echo "## - MySQL Major Verion.....: $MYSQL_MAIN_VERSION" >> ${logdir}/main.log +echo "## - MySQL Main Verion.......: $MYSQL_MAIN_VERSION" >> ${logdir}/main.log +echo "## - MySQL Major Verion......: $MYSQL_MAJOR_VERSION" >> ${logdir}/main.log +echo "## - MySQL Minor Verion......: $MYSQL_MINOR_VERSION" >> ${logdir}/main.log +echo "## - MySQL Patch Leveln......: $MYSQL_PATCH_LEVEL" >> ${logdir}/main.log +echo "## -" >> ${logdir}/main.log +echo "## - Download base URL.........: $download_base_url" >> ${logdir}/main.log +echo "## - Download file.............: $distfile" >> ${logdir}/main.log echo "## - " >> ${logdir}/main.log -echo "## - Sourcecodeverzeicnis......: $MYSQL_SRC_BASE_DIR" >> ${logdir}/main.log +echo "## - Source Basis Verzeichnis..: $MYSQL_SRC_BASE_DIR" >> ${logdir}/main.log +echo "## -" >> ${logdir}/main.log +echo "## - Sourcecodeverzeicnis......: $MYSQL_SRC_DIR" >> ${logdir}/main.log echo "## - Installationsverzeichnis..: $MYSQL_INSTALL_DIR" >> ${logdir}/main.log echo "## - Default file 'my.cnf'.....: $MY_CNF_FILE" >> ${logdir}/main.log echo "## - Datenbankverzeichnis......: $MYSQL_DATA_DIR" >> ${logdir}/main.log @@ -713,8 +869,18 @@ fi echo "" >> ${logdir}/main.log echo "DISTRIBUTION=$DISTRIBUTION" >> ${logdir}/main.log echo "" >> ${logdir}/main.log +echo "MYSQL_DISTRIBUTION=$MYSQL_DISTRIBUTION" >> ${logdir}/main.log echo "MYSQL_VERSION=$MYSQL_VERSION" >> ${logdir}/main.log +echo "MYSQL_MAIN_VERSION=$MYSQL_MAIN_VERSION" >> ${logdir}/main.log +echo "MYSQL_MAJOR_VERSION=$MYSQL_MAJOR_VERSION" >> ${logdir}/main.log +echo "MYSQL_MINOR_VERSION=$MYSQL_MINOR_VERSION" >> ${logdir}/main.log +echo "MYSQL_PATCH_LEVEL=$MYSQL_PATCH_LEVEL" >> ${logdir}/main.log +echo "" >> ${logdir}/main.log +echo "download_base_url=$download_base_url" >> ${logdir}/main.log +echo "distfile=$distfile" >> ${logdir}/main.log +echo "" >> ${logdir}/main.log echo "MYSQL_SRC_BASE_DIR=$MYSQL_SRC_BASE_DIR" >> ${logdir}/main.log +echo "MYSQL_SRC_DIR=$MYSQL_SRC_DIR" >> ${logdir}/main.log echo "MYSQL_INSTALL_DIR=$MYSQL_INSTALL_DIR" >> ${logdir}/main.log echo "MY_CNF_FILE=$MY_CNF_FILE" >> ${logdir}/main.log echo "MYSQL_DATA_DIR=$MYSQL_DATA_DIR" >> ${logdir}/main.log @@ -757,6 +923,49 @@ if [[ -z "$_MYSQL_INITSCRIPT" ]] && [[ -z "$_SYSTEMD_SERVICE_FILE" ]] && $UPDATE fi +## --- +## - Download sources +## --- + +echo "" +echo "" +echo -e "\033[37m\033[1mDownload sources..\033[m" +echo "" + +echo "" >> ${logdir}/main.log +echo "" >> ${logdir}/main.log +echo "## -----" >> ${logdir}/main.log +echo "## - Download sources" >> ${logdir}/main.log +echo "## -----" >> ${logdir}/main.log + +## - Sorcecode Verzeichnis vorhanden? +## - +if [ ! -d ${MYSQL_SRC_BASE_DIR} ] ; then + fatal "Kann MySQL Sourcecode Verzeichnis \"${MYSQL_SRC_BASE_DIR}\" nicht finden." +fi + +## - Sorcecode vorhanden? +## - +echononl "Download $distfile .." +if [ ! -f ${MYSQL_SRC_BASE_DIR}/$distfile ] ; then + + echo "" >> ${logdir}/main.log + echo "## - Download $distfile .." >> ${logdir}/main.log + echo "## -" >> ${logdir}/main.log + echo "wget -O ${MYSQL_SRC_BASE_DIR}/$distfile ${download_base_url}/$distfile" >> ${logdir}/main.log + wget -O ${MYSQL_SRC_BASE_DIR}/$distfile ${download_base_url}/$distfile 2>/dev/null + + if [ "$?" = "0" ]; then + echo_ok + else + echo_failed + fatal "Downloading $distfile (${download_base_url}/$distfile) Fehlgeschlagen." + fi +else + echo_skipped +fi + + ## ----- ## - Doing some pre-installation tasks ## ----- @@ -1167,6 +1376,30 @@ if ! $UPDATE_MYSQL ; then fatal "Installing dependency packages for \"mysql-server\" failed!" fi + if [[ "$MYSQL_DISTRIBUTION" = "MariaDB" ]] ; then + ## - Install dependency packages for \"mariadb-server\" + ## - + echononl "Installing dependency packages for \"mariadb-server\"" + echo "" >> ${logdir}/main.log + echo "## - Installing dependency packages for \"mariadb-server\"" >> ${logdir}/main.log + echo "## -" >> ${logdir}/main.log + echo "## - See: ${logdir}/apt-install.log" >> ${logdir}/main.log + echo "## - " >> ${logdir}/main.log + echo "DEBIAN_FRONTEND=noninteractive apt-get -q -y build-dep mariadb-server" >> ${logdir}/main.log + + echo "" >> ${logdir}/apt-install.log + echo "DEBIAN_FRONTEND=noninteractive apt-get -q -y build-dep mariadb-server" >> ${logdir}/apt-install.log 2>&1 + + DEBIAN_FRONTEND=noninteractive apt-get -q -y build-dep mariadb-server >> ${logdir}/apt-install.log 2>&1 + if [ "$?" = 0 ]; then + echo_ok + echo "" >> ${logdir}/apt-install.log + else + echo_failed + fatal "Installing dependency packages for \"mariadb-server\" failed!" + fi + fi + # if apt-cache search mariadb-server | grep -q -E "^mariadb-server" > /dev/null 2>&1 ; then # echononl "Installing dependency packages for \"mariadb-server\"" # echo "DEBIAN_FRONTEND=noninteractive apt-get -q -y build-dep mariadb-server" >> ${logdir}/apt-install.log 2>&1 @@ -1337,6 +1570,9 @@ if [ "$?" = "0" ]; then _mysql_log=${MYSQL_LOG_DIR}/mysql.log _mysql_error_log=${MYSQL_LOG_DIR}/mysql.err _mysql_slow_query_log=${MYSQL_LOG_DIR}/slow_query.log + if [[ "$MYSQL_DISTRIBUTION" = "MariaDB" ]]; then + mariadb_groonga_log=${MYSQL_LOG_DIR}/groonga.log + fi else echo_failed fatal Kann LOG Verzeichnis \"${MYSQL_LOG_DIR}\" nicht erstellen.. @@ -1386,33 +1622,37 @@ if [ -d "${MYSQL_SRC_DIR}" ];then 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 - 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 + if [[ "$MYSQL_DISTRIBUTION" != "MariaDB" ]] ; then - 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 + 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 - 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!" + 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 + + 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 + + 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 @@ -1425,13 +1665,13 @@ fi echo "" echo "" -echo -e "\033[37m\033[1mBasis Installation MySQL $MYSQL_VERSION\033[m" +echo -e "\033[37m\033[1mBasis Installation $MYSQL_DISTRIBUTION $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 "## - Basis Installation $MYSQL_DISTRIBUTION $MYSQL_VERSION" >> ${logdir}/main.log echo "## -----" >> ${logdir}/main.log ## - This step is redundant and should never bee happend. @@ -1482,12 +1722,19 @@ else fi - +#echo "" +#echo "shell> mkdir \"$MYSQL_INSTALL_DIR\"" +#echo "shell> \"cp $MYSQL_SRC_BASE_DIR/boost_1_59_0.tar.gz\" \"$MYSQL_INSTALL_DIR\"" +#echo "" +#sleep 120 # - Erstelle Optionen für 'cmake' # - +# --- +# - MySQL / Percona +# --- # - Note: # - # - Since MySQL v 5.7.16 the default 'secure_file_priv' value has changed @@ -1496,6 +1743,29 @@ fi # - # - We change the default to empty ("") with -D INSTALL_SECURE_FILE_PRIVDIR="" option # - +# --- +# - MariaDBD +# --- +# - +# - NOT supported (in contrast to original MySQL) +# - +# - -DINSTALL_SECURE_FILE_PRIVDIR=\"\" +# - -DDOWNLOAD_BOOST=1 +# - -DWITH_BOOST=$MYSQL_INSTALL_DIR +# - +# - -DSYSTEMD_PID_DIR=$SYSTEMD_PID_DIR" +# - +# - +# - Options enabled (not availabe at original MySQL) +# - +# - configured exactly as the binary releases from MariaDB +# - -DBUILD_CONFIG=mysql_release +# - creates libmysql* symbolic links: +# - -CONC_WITH_MYSQLCOMPAT=ON +# - groonga log file path +# - -GRN_LOG_PATH=${MYSQL_LOG_DIR}/groonga.log +# - +# - # - To get a complete list of available options, type # - shell> cmake . -LH | tee ~/mysql_cmake_options.txt # - @@ -1504,7 +1774,24 @@ echo "" >> ${logdir}/main.log echo "## - Erstelle Optionen für 'cmake'" >> ${logdir}/main.log echo "## -" >> ${logdir}/main.log -cmake_options=" +if [[ "$MYSQL_DISTRIBUTION" = "MariaDB" ]]; then + + cmake_options=" + . + -DBUILD_CONFIG=mysql_release + -DCMAKE_INSTALL_PREFIX=$MYSQL_INSTALL_DIR + -DMYSQL_DATADIR=$MYSQL_DATA_DIR + -DENABLED_LOCAL_INFILE=ON + -DGRN_LOG_PATH=$mariadb_groonga_log + -DCONC_WITH_MYSQLCOMPAT=ON +" + if $INSTALL_SYSTEMD_SERVICE ; then + cmake_options="$cmake_options -DWITH_SYSTEMD=yes" + fi + +else + + cmake_options=" -DCMAKE_INSTALL_PREFIX=$MYSQL_INSTALL_DIR -DMYSQL_DATADIR=$MYSQL_DATA_DIR . @@ -1512,10 +1799,14 @@ cmake_options=" -DENABLED_LOCAL_INFILE=1 -DDOWNLOAD_BOOST=1 -DWITH_BOOST=$MYSQL_INSTALL_DIR + " -if $INSTALL_SYSTEMD_SERVICE ; then - cmake_options="$cmake_options -DWITH_SYSTEMD=1 - -DSYSTEMD_PID_DIR=$SYSTEMD_PID_DIR" + + if $INSTALL_SYSTEMD_SERVICE ; then + cmake_options="$cmake_options -DWITH_SYSTEMD=1 + -DSYSTEMD_PID_DIR=$SYSTEMD_PID_DIR" + fi + fi echo "cmake_options=\"$cmake_options\"" >> ${logdir}/main.log echo_ok @@ -1572,13 +1863,13 @@ fi echo "" echo "" -echo -e "\033[37m\033[1mEinbinden der MySQL $MYSQL_VERSION Installation in das System\033[m" +echo -e "\033[37m\033[1mEinbinden der $MYSQL_DISTRIBUTION $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 "## - Einbinden der $MYSQL_DISTRIBUTION $MYSQL_VERSION Installation in das System" >> ${logdir}/main.log echo "## -----" >> ${logdir}/main.log echononl "Konfiguriere Manpages.." @@ -1764,13 +2055,13 @@ fi echo "" echo "" -echo -e "\033[37m\033[1mKonfiguration (Teil 1) der MySQL $MYSQL_VERSION Installation\033[m" +echo -e "\033[37m\033[1mKonfiguration (Teil 1) der $MYSQL_DISTRIBUTION $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 "## - Konfiguration (Teil 1) der $MYSQL_DISTRIBUTION $MYSQL_VERSION Installation" >> ${logdir}/main.log echo "## -----" >> ${logdir}/main.log @@ -1806,39 +2097,77 @@ else fi echo -echononl "Richte MySQL Systemtabellen ein.." +echononl "Richte $MYSQL_DISTRIBUTION Systemtabellen ein.." if ! $UPDATE_MYSQL ; then cd $MYSQL_INSTALL_DIR echo "" >> ${logdir}/main.log - echo "## - Richte MySQL Systemtabellen ein" >> ${logdir}/main.log - echo "## -" >> ${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 - ${MYSQL_INSTALL_DIR}/bin/mysqld --initialize-insecure \ - --user=$MYSQL_USER \ - --basedir=$MYSQL_INSTALL_DIR \ - --datadir=$MYSQL_DATA_DIR \ - --lc-messages-dir=$MYSQL_INSTALL_DIR/share/german \ - >> ${logdir}/main.log 2>&1 - if [ "$?" = "0" ]; then - echo_ok + if [[ "$MYSQL_DISTRIBUTION" = "MariaDB" ]] ; then + + echo "## - Richte $MYSQL_DISTRIBUTION Systemtabellen ein" >> ${logdir}/main.log + echo "## -" >> ${logdir}/main.log + echo "${MYSQL_INSTALL_DIR}/scripts/mysql_install_db \ " >> ${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 " --lc-messages-dir=$MYSQL_INSTALL_DIR/share" >> ${logdir}/main.log + echo "" >> ${logdir}/main.log + + ${MYSQL_INSTALL_DIR}/scripts/mysql_install_db \ + --user=$MYSQL_USER \ + --basedir=$MYSQL_INSTALL_DIR \ + --datadir=$MYSQL_DATA_DIR \ + --lc-messages-dir=$MYSQL_INSTALL_DIR/share \ + >> ${logdir}/main.log 2>&1 + if [ "$?" = "0" ]; then + echo_ok + else + echo_failed + error Das Einrichten der $MYSQL_DISTRIBUTION 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_failed - 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]: " + echo "## - Richte $MYSQL_DISTRIBUTION Systemtabellen ein" >> ${logdir}/main.log + echo "## -" >> ${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 " --lc-messages-dir=$MYSQL_INSTALL_DIR/share" >> ${logdir}/main.log + echo "" >> ${logdir}/main.log + + ${MYSQL_INSTALL_DIR}/bin/mysqld --initialize-insecure \ + --user=$MYSQL_USER \ + --basedir=$MYSQL_INSTALL_DIR \ + --datadir=$MYSQL_DATA_DIR \ + --lc-messages-dir=$MYSQL_INSTALL_DIR/share \ + >> ${logdir}/main.log 2>&1 + if [ "$?" = "0" ]; then + echo_ok + else + echo_failed + error Das Einrichten der $MYSQL_DISTRIBUTION Systemtabellen ist fehlgeschlagen.. + + echononl "continue anyway [yes/no]: " read OK - done - [[ $OK = "yes" ]] || fatal "Abbruch durch User" + 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 + fi else echo_skipped @@ -1919,22 +2248,27 @@ else echo "## -" >> ${logdir}/main.log echo "cd $MYSQL_INSTALL_DIR" >> ${logdir}/main.log cd $MYSQL_INSTALL_DIR - echo "${MYSQL_INSTALL_DIR}/bin/mysql_ssl_rsa_setup --datadir=$MYSQL_DATA_DIR .." >> ${logdir}/main.log - ${MYSQL_INSTALL_DIR}/bin/mysql_ssl_rsa_setup --datadir=$MYSQL_DATA_DIR >> ${logdir}/main.log 2>&1 - if [ "$?" = "0" ]; then - echo_ok - else - echo_failed - error "Generating MySQL SSL Certificate and RSA Key failed" + if [[ -x "${MYSQL_INSTALL_DIR}/bin/mysql_ssl_rsa_setup" ]] ; then + echo "${MYSQL_INSTALL_DIR}/bin/mysql_ssl_rsa_setup --datadir=$MYSQL_DATA_DIR .." >> ${logdir}/main.log + ${MYSQL_INSTALL_DIR}/bin/mysql_ssl_rsa_setup --datadir=$MYSQL_DATA_DIR >> ${logdir}/main.log 2>&1 + 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]: " + echononl "continue anyway [yes/no]: " read OK - done - [[ $OK = "yes" ]] || fatal "Abbruch durch User" + 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 + warn "Script for generating certificates (mysql_ssl_rsa_setup) is not supported" fi fi @@ -3803,10 +4137,18 @@ if $INSTALL_SYSTEMD_SERVICE ; then echo "" >> ${logdir}/main.log 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/$MYSQL_SERVICE_FILE" >> ${logdir}/main.log - cp "${MYSQL_INSTALL_DIR}/lib/systemd/system/mysqld.service" /etc/systemd/system/$MYSQL_SERVICE_FILE >> ${logdir}/main.log 2>&1 - if [[ $? -eq 0 ]]; then + if [[ "$MYSQL_DISTRIBUTION" = "MariaDB" ]]; then + echo "cp \"${MYSQL_INSTALL_DIR}/support-files/systemd/mariadb.service\" /etc/systemd/system/$MYSQL_SERVICE_FILE" >> ${logdir}/main.log + cp "${MYSQL_INSTALL_DIR}/support-files/systemd/mariadb.service" "/etc/systemd/system/$MYSQL_SERVICE_FILE" >> ${logdir}/main.log 2>&1 + _retval=$? + else + echo "cp \"${MYSQL_INSTALL_DIR}/lib/systemd/system/mysqld.service\" /etc/systemd/system/$MYSQL_SERVICE_FILE" >> ${logdir}/main.log + cp "${MYSQL_INSTALL_DIR}/lib/systemd/system/mysqld.service" "/etc/systemd/system/$MYSQL_SERVICE_FILE" >> ${logdir}/main.log 2>&1 + _retval=$? + fi + + if [[ $_retval -eq 0 ]]; then echo_ok else echo_failed @@ -4045,13 +4387,13 @@ sleep 2 echo "" echo "" -echo -e "\033[37m\033[1mKonfiguration (Teil 2) der MySQL $MYSQL_VERSION Installation\033[m" +echo -e "\033[37m\033[1mKonfiguration (Teil 2) der $MYSQL_DISTRIBUTION $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 "## - Konfiguration (Teil 2) der $MYSQL_DISTRIBUTION $MYSQL_VERSION Installation" >> ${logdir}/main.log echo "## -----" >> ${logdir}/main.log if ! $UPDATE_MYSQL ; then @@ -4131,27 +4473,56 @@ if ! $UPDATE_MYSQL ; then ## - 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')\" WHERE User = 'root'" >> ${logdir}/main.log + if [[ "$MYSQL_DISTRIBUTION" = "MariaDB" ]]; then + + echo "" >> ${logdir}/main.log + echo "## - Setze root Passwort für den MariaDB Zugang" >> ${logdir}/main.log + echo "## -" >> ${logdir}/main.log + echo "${MYSQL_INSTALL_DIR}/bin/mysql -uroot mysql -N -s -e \"UPDATE user SET Password = password('$MYSQL_ROOT_PW') WHERE User = 'root'\"" >> ${logdir}/main.log + + ${MYSQL_INSTALL_DIR}/bin/mysql -uroot mysql -N -s -e "UPDATE user SET Password = password('$MYSQL_ROOT_PW') WHERE User = 'root'" \ + >> ${logdir}/main.log 2>&1 + if [ "$?" = "0" ]; then + echo_ok + else + echo_failed + error Konnte root Passwort für den MariaDB 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 - ${MYSQL_INSTALL_DIR}/bin/mysql -uroot mysql -N -s -e "UPDATE user SET authentication_string = password('$MYSQL_ROOT_PW') WHERE User = 'root'" \ - >> ${logdir}/main.log 2>&1 - if [ "$?" = "0" ]; then - echo_ok else - echo_failed - error Konnte root Passwort für 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]: " + 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')\" WHERE User = 'root'" >> ${logdir}/main.log + + ${MYSQL_INSTALL_DIR}/bin/mysql -uroot mysql -N -s -e "UPDATE user SET authentication_string = password('$MYSQL_ROOT_PW') WHERE User = 'root'" \ + >> ${logdir}/main.log 2>&1 + if [ "$?" = "0" ]; then + echo_ok + else + echo_failed + error Konnte root Passwort für den MySQL Server nicht setzen.. + + echononl "continue anyway [yes/no]: " read OK - done - [[ $OK = "yes" ]] || fatal "Abbruch durch User" + 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 ## - Flush privileges