From 55efaf776d4269176d167d78b51f9ee12f800e02 Mon Sep 17 00:00:00 2001 From: Patrick Eigner-Pausz Date: Thu, 11 Sep 2025 16:03:02 +0200 Subject: [PATCH] added reinis mysql_backup script, renamed it to mysqltool.sh, added README.md for mysqltool.sh --- legacy/mysqltool/REAMDE.md | 89 ++++++++++++++ legacy/mysqltool/mysqltool.sh | 225 ++++++++++++++++++++++++++++++++++ 2 files changed, 314 insertions(+) create mode 100644 legacy/mysqltool/REAMDE.md create mode 100644 legacy/mysqltool/mysqltool.sh diff --git a/legacy/mysqltool/REAMDE.md b/legacy/mysqltool/REAMDE.md new file mode 100644 index 0000000..d1530a1 --- /dev/null +++ b/legacy/mysqltool/REAMDE.md @@ -0,0 +1,89 @@ +# MYSQL Tool + +Bashskript, das schnellere Datenbank-Downloads, Restore und sogar Backup-Restors vom BackupFTP ermöglicht. +--- + +## Features + +- Datenbanken prüfen +- Datenbanken dumpen +- Datenbanken droppen +- Datenbanken aus SQL-File restoren +- Backups vom Backup-FTP direkt in das aktuelle Verzeichnis herunterladen +- Datenbanken aus einzelnen Tables und Schmemes mergen + +--- + +## Installation + +1. Als easyuser einloggen +2. Skript herunterladen + ```bash + git clone /esn-support-bash-snippets.git + cd esn-support-bash-snippets// + chmod +x + ``` + +3. Skript ausführen + ```bash + ./mysqltool.sh + ``` + +4. Skript nach erfolgreicher Bearbeitung im Kundencontainer entfernen + +--- + +## Nutzung + +### Standardaufruf +```bash +./mysqltool.sh +``` + +### Beispiele +```bash +./mysqltool.sh +./ --option foo +./ 2025-09-08 +``` + +--- + +## Optionen + +``` +Usage: ./ [OPTIONS] + +--help Zeigt diese Hilfe +--option Beispieloption +YYYY-MM-DD Beispiel für Datumsargument +``` + +--- + +## Beispielausgabe + +``` +Hier ein Beispieloutput des Skripts. +``` + +--- + +## Setup-Hinweise + +Falls notwendig, Alias in `~/.bashrc` setzen: +```bash +alias ='~/pfad/zum/repo///' +``` + +Logger-spezifisch ggf. in `~/.profile` ergänzen: +```bash +cd /var/log/easyname/$(date +%Y)/$(date +%m)/ +``` + +--- + +## Notes + +- Derzeit muss das Skript als eUser ausgeführt werden +- To-Do: Skript anpassen, sodass es ohne eUser ausgeführt werden kann diff --git a/legacy/mysqltool/mysqltool.sh b/legacy/mysqltool/mysqltool.sh new file mode 100644 index 0000000..104fece --- /dev/null +++ b/legacy/mysqltool/mysqltool.sh @@ -0,0 +1,225 @@ +function mysql_tool () + { + while : + do + PS3='Please enter your choice: ' + echo "Press (1) fuer Datenbank Pruefung." + echo "Press (2) fuer Datenbank Dump." + echo "Press (3) fuer Datenbank Drop." + echo "Press (4) fuer Datenbank Restore." + echo "Press (5) fuer Backup download." + echo "Press (6) fuer Datenbank zusammen mergen." + echo "Press (q) fuer QUIT." + read -n1 wahl + echo "" + if [ "$wahl" == "q" ] + then + break + fi + case $wahl in + "1") + echo "Datenbank Name eingeben:" + read db_name + echo "Datenbank-Version MySQL 8:[y/n]:" + read -n1 db_ver + echo "" + db_host=localhost + read -s -p "Datenbank Passwort:" MYSQL_PWD + if [ "$db_ver" == "y" ] + then + db_host=$(awk '/mysql80.local/ {print $1}' /etc/hosts) + fi + echo [client] > $HOME/tmp/.my.cnf + echo "host=$db_host" >> $HOME/tmp/.my.cnf + echo "port=3307" >> $HOME/tmp/.my.cnf + echo "user=$db_name" >> $HOME/tmp/.my.cnf + echo "password=$MYSQL_PWD" >> $HOME/tmp/.my.cnf + echo "" + echo "Starte die Pruefung der Datenbank $db_name." + mysqlcheck --defaults-extra-file="$HOME/tmp/.my.cnf" -c --all-databases + rm $HOME/tmp/.my.cnf + ;; + "2") + echo "Datenbank Name eingeben:" + read db_name + echo "Datenbank-Version MySQL 8:[y/n]:" + read -n1 db_ver + echo "" + db_host=localhost + read -s -p "Datenbank Passwort:" MYSQL_PWD + if [ "$db_ver" == "y" ] + then + db_host=$(awk '/mysql80.local/ {print $1}' /etc/hosts) + fi + echo [client] > $HOME/tmp/.my.cnf + echo "host=$db_host" >> $HOME/tmp/.my.cnf + echo "port=3307" >> $HOME/tmp/.my.cnf + echo "user=$(echo "$db_name"|awk -F/ '{print $NF}'|awk -F_ '{print $1}')" >> $HOME/tmp/.my.cnf + echo "password=$MYSQL_PWD" >> $HOME/tmp/.my.cnf + echo "" + echo "Zielverzeichnis eingeben:" + echo "Default = html" + read target_folder + if [ ! -n "target_folder" ] + then + target_folder=html + fi + echo "Starte einen Datenbank Dump fuer Datenbank $db_name nach $target_folder." + mysqldump --defaults-extra-file=$HOME/tmp/.my.cnf $db_name | gzip > "$HOME/$target_folder/$db_name$(date +_%M-%H-%d-%m-%Y).sql.gz" + rm $HOME/tmp/.my.cnf + ;; + "3") + echo "Datenbank Name eingeben:" + read db_name + echo "Datenbank-Version MySQL 8:[y/n]:" + read -n1 db_ver + echo "" + db_host=localhost + read -s -p "Datenbank Passwort:" MYSQL_PWD + if [ "$db_ver" == "y" ] + then + db_host=$(awk '/mysql80.local/ {print $1}' /etc/hosts) + fi + echo [client] > $HOME/tmp/.my.cnf + echo "host=$db_host" >> $HOME/tmp/.my.cnf + echo "port=3307" >> $HOME/tmp/.my.cnf + echo "user=$db_name" >> $HOME/tmp/.my.cnf + echo "password=$MYSQL_PWD" >> $HOME/tmp/.my.cnf + echo "" + echo "Starte drop fuer Datenbank $db_name." + mysql --defaults-extra-file="$HOME/tmp/.my.cnf" -e "SHOW TABLES FROM $db_name"|grep -v "Tables_in_$db_name"|while read a + do + mysql --defaults-extra-file="$HOME/tmp/.my.cnf" -e "DROP TABLE $db_name"."$a" + done + rm $HOME/tmp/.my.cnf + ;; + "4") + echo "Datenbank Name eingeben:" + read db_name + echo "Datenbank-Version MySQL 8:[y/n]:" + read -n1 db_ver + echo "" + db_host=localhost + read -s -p "Datenbank Passwort:" MYSQL_PWD + if [ "$db_ver" == "y" ] + then + db_host=$(awk '/mysql80.local/ {print $1}' /etc/hosts) + fi + echo [client] > $HOME/tmp/.my.cnf + echo "host=$db_host" >> $HOME/tmp/.my.cnf + echo "port=3307" >> $HOME/tmp/.my.cnf + echo "user=$(echo "$db_name"|awk -F/ '{print $NF}'|awk -F_ '{print $1}'|awk -F. '{print $1}')" >> $HOME/tmp/.my.cnf + echo "password=$MYSQL_PWD" >> $HOME/tmp/.my.cnf + echo "" + ndb_name=$(echo $db_name|awk -F/ '{print $NF}'|awk -F_ '{print $1}'|awk -F. '{print $1}') + echo "Starte Restore fuer Datenbank $ndb_name." + datend=$(echo $HOME/$db_name|awk -F. '{print $NF}') + if [ "$datend" == "gz" ] + then + zcat $HOME/$db_name|mysql --defaults-extra-file="$HOME/tmp/.my.cnf" $ndb_name + else + cat $HOME/$db_name|mysql --defaults-extra-file="$HOME/tmp/.my.cnf" $ndb_name + fi + rm $HOME/tmp/.my.cnf + ;; + "5") + echo -n "Backupserver eingeben:" + read backup_serv + echo -n "Benutzername eingeben:" + read ftp_uname + read -s -p "FTP Passwort:" FTP_PWD + echo "machine $backup_serv" > $HOME/.netrc + echo "login $ftp_uname" >> $HOME/.netrc + echo "password $FTP_PWD" >> $HOME/.netrc + echo "" + wget_verz="" + while : + do + exec wget -O - ftp://"$backup_serv":21/"$wget_verz" 2>/dev/null|grep '^ '|sed 's/ "$targetdb" + find $infold -maxdepth 1 -type f -name $indb\*schema.sql|grep -v schema-post.sql|while read a + do + cat "$a" 2>/dev/null >> "$targetdb" + echo "$(basename "$a") zu $(basename "$targetdb") erfolgreich hinzugefuegt" + done + echo "# Schemas der Datenbank $indb zu $targetdb erfolgreich hinzugefuegt" + find $infold -maxdepth 1 -type f -name $indb\*00000.sql|grep -v schema-post.sql|while read a + do + cat "$a" 2>/dev/null >> "$targetdb" + echo "$(basename "$a") zu $(basename "$targetdb") erfolgreich hinzugefuegt" + done + echo "# Tables der Datenbank $indb erfolgreich in Datenbank $targetdb hinzugefuegt." + else + echo "Benutzer Abbruch" + exit 1 + fi + else + find $infold -maxdepth 1 -type f -name $indb\*schema.sql|grep -v schema-post.sql|while read a + do + cat "$a" 2>/dev/null >> "$targetdb" + echo "$(basename "$a") zu $(basename "$targetdb") erfolgreich hinzugefuegt" + done + echo "# Schemas der Datenbank $indb zu $targetdb erfolgreich hinzugefuegt" + find $infold -maxdepth 1 -type f -name $indb\*00000.sql|grep -v schema-post.sql|while read a + do + cat "$a" 2>/dev/null >> "$targetdb" + echo "$(basename "$a") zu $(basename "$targetdb") erfolgreich hinzugefuegt" + done + echo "# Tables der Datenbank $indb erfolgreich in Datenbank $targetdb hinzugefuegt." + fi + ;; + *) + echo "invalid option $REPLY" + ;; + esac + done +} \ No newline at end of file -- 2.54.0