Compare commits

..
2 Commits
2 changed files with 314 additions and 0 deletions
+89
View File
@@ -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 <gitea-url>/esn-support-bash-snippets.git
cd esn-support-bash-snippets/<legacy|wh20>/<scriptname>
chmod +x <scriptname>
```
3. Skript ausführen
```bash
./mysqltool.sh
```
4. Skript nach erfolgreicher Bearbeitung im Kundencontainer entfernen
---
## Nutzung
### Standardaufruf
```bash
./mysqltool.sh
```
### Beispiele
```bash
./mysqltool.sh
./<scriptname> --option foo
./<scriptname> 2025-09-08
```
---
## Optionen
```
Usage: ./<scriptname> [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 <scriptname>='~/pfad/zum/repo/<legacy|wh20>/<scriptname>/<scriptname>'
```
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
+225
View File
@@ -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/<a href="ftp:\/\/'$backup_serv':21//g'|awk -F\" '{print $1}'
echo "(Verzeichnis) oder (d) fuer Download listing. (q) fuer Quit."
read in_put
case $in_put in
"q")
rm $HOME/.netrc
break
;;
"d")
wget_opt="-r"
wget -r -l 100 ftp://"$backup_serv":21/"$wget_verz"
;;
*)
wget_verz=$(echo $in_put|sed 's/^\///g')
;;
esac
done
;;
"6")
while :
do
echo -n "Quell Ordner angeben:"
read infold
if [ -d "$infold" ]
then
break
else
echo "Quell Ordner $infold nicht gefunden."
fi
done
while :
do
echo -n "Quell Datenbank angeben:"
read indb
testf=$(find $infold -maxdepth 1 -type f -name $indb\*.sql)
if [ "$testf" != "" ]
then
break
else
echo "Quell Datenbank $infold/$indb nicht gefunden"
fi
done
echo -n "Ziel Datenbank angeben:"
read targetdb
if [ -f "$targetdb" ]
then
echo "$targetdb ueberschreiben [y/n]:"
read userwrite
if [ $userwrite == y -o $userwrite == j ]
then
> "$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
}