added reinis mysql_backup script, renamed it to mysqltool.sh, added README.md for mysqltool.sh #3
@@ -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
|
||||||
@@ -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
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user