Alles anzeigenSo fertig und es Funktioniert wie es soll.
Ich habe auch ein Codecleanup gemacht.
Zum Vergleich:
Alt (kaputt):
CodeAlles anzeigen#! /bin/bash # TekLabs TekBase # Copyright 2005-2015 TekLab # Christian Frankenstein # Website: www.teklab.de # www.teklab.us VAR_A=$1 VAR_B=$2 VAR_C=$3 VAR_D=$4 VAR_E=$5 VAR_F=$6 VAR_G=$7 VAR_H=$8 VAR_I=$9 VAR_J=${10} if [ "$VAR_A" = "" ]; then ./tekbase fi LOGF=`date +"%Y_%m"` LOGC=`date +"%Y_%m-%H_%M_%S"` LOGP=`pwd` if [ ! -d logs ]; then mkdir logs chmod 0777 logs fi if [ ! -d restart ]; then mkdir restart chmod 0777 restart fi if [ ! -f "logs/$LOGF.txt" ]; then echo "***TekBASE Script Log***" >> $LOGP/logs/$LOGF.txt chmod 0666 $LOGP/logs/$LOGF.txt fi if [ "$VAR_A" = "dbcreate" ]; then if [ -f /etc/mysql/settings.ini ]; then mysqlpwd=`cat /etc/mysql/settings.ini | grep -i password | awk '{print $2}'` mysqlusr=`cat /etc/mysql/settings.ini | grep -i login | awk '{print $2}'` Q1="CREATE DATABASE IF NOT EXISTS $VAR_C;" Q2="GRANT ALL PRIVILEGES ON $VAR_C.* TO '$VAR_D'@'%' IDENTIFIED BY '$VAR_E' WITH GRANT OPTION;" Q3="FLUSH PRIVILEGES;" SQL="${Q1}${Q2}${Q3}" sqlcreate=`mysql --user=$mysqlusr --password=$mysqlpwd -e "$SQL"` echo "ID1" else echo "ID2" fi fi if [ "$VAR_A" = "dbdelete" ]; then if [ -f /etc/mysql/settings.ini ]; then mysqlpwd=`cat /etc/mysql/settings.ini | grep -i password | awk '{print $2}'` mysqlusr=`cat /etc/mysql/settings.ini | grep -i login | awk '{print $2}'` Q1="DROP DATABASE $VAR_C;" Q2="DROP USER $VAR_D@'%';" Q3="FLUSH PRIVILEGES;" SQL="${Q1}${Q2}" sqlcreate=`mysql --user=$mysqlusr --password=$mysqlpwd -e "$SQL"` echo "ID1" else echo "ID2" fi fi if [ "$VAR_A" = "dbrename" ]; then if [ -f /etc/mysql/settings.ini ]; then mysqlpwd=`cat /etc/mysql/settings.ini | grep -i password | awk '{print $2}'` mysqlusr=`cat /etc/mysql/settings.ini | grep -i login | awk '{print $2}'` mysqldump --user=$mysqlusr --password=$mysqlpwd $VAR_C > $VAR_C.sql Q1="CREATE DATABASE IF NOT EXISTS $VAR_D;" SQL="${Q1}" sqlcreate=`mysql --user=$mysqlusr --password=$mysqlpwd -e "$SQL"` sqlcreate=`mysql --user=$mysqlusr --password=$mysqlpwd $VAR_D < $VAR_C.sql` Q1="GRANT ALL PRIVILEGES ON $VAR_D.* TO '$VAR_E'@'%';" Q2="REVOKE ALL PRIVILEGES ON $VAR_C.* FROM '$VAR_E'@'%';" Q3="DROP DATABASE $VAR_C;" Q4="FLUSH PRIVILEGES;" SQL="${Q1}${Q2}${Q3}${Q4}" sqlcreate=`mysql --user=$mysqlusr --password=$mysqlpwd -e "$SQL"` rm $VAR_C.sql echo "ID1" else echo "ID2" fi fi if [ "$VAR_A" = "dbpasswd" ]; then if [ -f /etc/mysql/settings.ini ]; then mysqlpwd=`cat /etc/mysql/settings.ini | grep -i password | awk '{print $2}'` mysqlusr=`cat /etc/mysql/settings.ini | grep -i login | awk '{print $2}'` Q1="UPDATE mysql.user SET Password=PASSWORD('$VAR_D') WHERE User='$VAR_C';" Q2="FLUSH PRIVILEGES;" SQL="${Q1}${Q2}" sqlcreate=`mysql --user=$mysqlusr --password=$mysqlpwd -e "$SQL"` echo "ID1" else echo "ID2" fi fi exit 0
Neu und funktioniert:
CodeAlles anzeigen#! /bin/bash # TekLabs TekBase # Copyright 2005-2015 TekLab # Christian Frankenstein # Website: www.teklab.de # www.teklab.us VAR_A=$1 VAR_B=$2 VAR_C=$3 VAR_D=$4 VAR_E=$5 # Werden die restlichen wircklich benötigt? VAR_F=$6 VAR_G=$7 VAR_H=$8 VAR_I=$9 VAR_J=${10} MYSQL=`which mysql` settingsini=/etc/mysql/settings.ini mysqlusr=`cat /etc/mysql/settings.ini | awk '{print $1}'` mysqlpwd=`cat /etc/mysql/settings.ini | awk '{print $2}'` if [ $VAR_A = "" ]; then ./tekbase fi LOGF=`date +"%Y_%m"` LOGC=`date +"%Y_%m-%H_%M_%S"` LOGP=`pwd` if [ ! -d logs ]; then mkdir logs chmod 0777 logs fi if [ ! -d restart ]; then mkdir restart chmod 0777 restart fi if [ ! -f "logs/$LOGF.txt" ]; then echo "***TekBASE Script Log***" >> $LOGP/logs/$LOGF.txt chmod 0666 $LOGP/logs/$LOGF.txt fi if [ -f $settingsini ]; then case $VAR_A in 'dbcreate') Q1="CREATE DATABASE IF NOT EXISTS $VAR_B;" Q2="GRANT ALL PRIVILEGES ON $VAR_B.* TO $VAR_C@'%' IDENTIFIED BY '$VAR_D' WITH GRANT OPTION;" Q3="FLUSH PRIVILEGES;" SQL="${Q1}${Q2}${Q3}" sqlcreate=`$MYSQL -u$mysqlusr -p$mysqlpwd -e "$SQL"` echo "ID1" ;; 'dbdelete') Q1="DROP DATABASE $VAR_B;" Q2="DROP USER $VAR_C@'%';" Q3="FLUSH PRIVILEGES;" SQL="${Q1}${Q2}" sqlcreate=`$MYSQL -u$mysqlusr -p$mysqlpwd -e "$SQL"` echo "ID1" ;; 'dbrename') # Wird dieses hier wirklich gebraucht? mysqldump -u$mysqlusr -p$mysqlpwd $VAR_B > $VAR_B.sql Q1="CREATE DATABASE IF NOT EXISTS $VAR_C;" SQL="${Q1}" sqlcreate=`$MYSQL -u$mysqlusr -p$mysqlpwd -e "$SQL"` sqlcreate=`$MYSQL -u$mysqlusr -p$mysqlpwd $VAR_C < $VAR_B.sql` Q1="GRANT ALL PRIVILEGES ON $VAR_C.* TO $VAR_D@'%';" Q2="REVOKE ALL PRIVILEGES ON $VAR_B.* FROM $VAR_D@'%';" Q3="DROP DATABASE $VAR_B;" Q4="FLUSH PRIVILEGES;" SQL="${Q1}${Q2}${Q3}${Q4}" sqlcreate=`$MYSQL -u$mysqlusr -p$mysqlpwd -e "$SQL"` rm $VAR_C.sql echo "ID1" ;; 'dbpasswd') Q1="UPDATE mysql.user SET Password=PASSWORD('$VAR_C') WHERE User='$VAR_B';" Q2="FLUSH PRIVILEGES;" SQL="${Q1}${Q2}" sqlcreate=`$MYSQL -u$mysqlusr -p$mysqlpwd -e "$SQL"` echo "ID1" ;; esac else echo "ID2" fi exit 0
1. Änderung:
Die folgenden Zeilen sind rausgeflogen, da diese Probleme machten:
Codemysqlpwd=`cat /etc/mysql/settings.ini | grep -i password | awk '{print $2}'` mysqlusr=`cat /etc/mysql/settings.ini | grep -i login | awk '{print $2}'`
Damit der DB Hauptadmin und sein PW korrekt ausgelsenen werden, habe ich die entfernten Zeilen durch Folgende ersetzt:
Codemysqlusr=`cat /etc/mysql/settings.ini | awk '{print $1}'` mysqlpwd=`cat /etc/mysql/settings.ini | awk '{print $2}'`
Nun die grep Anweisung benötigen wir nicht mehr.
Die /mysql/settings.ini muss nun so aussehen:
2. Änderung:
Die ganzen IF Anweisungen sind einen Aufgeräumten case Statment gewichen.
3. Änderung:
Die Variablen sind nun korrekt zugeordnet.
Für dbcreate lautet die Anweisung so:
Für dbdelete so:
Für dbrename (wird das überhaupt gebraucht?):
Und für dbpasswd:
Ich bitte Euch das gefixte Script zu Testen, ich werde es mit anhängen.
Einfach die Datei web in /home/skripte, auf dem Zielserver der die DB's hat, mit der neuen ersetzen.
Die alte Datei bitte vorher noch Backupen.
Die im Anhang befindliche Datei muss vorher von web.txt in web umbenannt werden.
Hab jetzt mal dies hier versucht und jetzt kommt nur noch die meldung Datenbank konnte nicht erstellt werden.
Edit//
So ich hattte den fehler gemacht und hatte 1. die Dateiberechtigungen vergessen zu setzen und noch die settings.ini zu ändern.
jetzt funktioniert alles