Datenbanken werden nicht angelegt

  • 7.X

This site uses cookies. By continuing to browse this site, you are agreeing to our Cookie Policy.

Der neue Support Bereich ist absofort unter community.teklab.de zu finden.

Leider bietet das WBB keinen vernünftigen Spamschutz, daher sind Neuanmeldungen gesperrt. Wir werden die nächsten Tage das Handbuch/WIKI im neuen Support Bereich übernehmen. Dieses Forum bleibt jedoch mit seinen bisherigen Beiträgen, für alle die die Suchfunktion nutzen wollen, vorerst erhalten. User die über den Kundenbereich die Zugangsdaten erhalten und Bestandsuser können das Forum weiter nutzen. Jedoch würden wir alle gerne im neuen Support Bereich begrüßen wollen.

Anfang Juni wird im Kundenbereich automatisch ein Zugang zum neuen Support Bereich angelegt, ähnlich wie es derzeit für WBB geschieht. Somit entfällt dann die Neuanmeldung. ;)

  • BdMdesigN wrote:

    Doch es liegt an der Maria:
    Bitte keinen Blödsinn verzapfen.

    Wenn eine Configdatei etwas anders ist, ist es eben so. Das ist jetzt kein "Problem". Das Binding solltest auch du umstellen können.

    Natürlich könnte es sein das es am Binding liegt, warum die Datenbanken nicht angelegt werden - Das will ich nicht in abrede stellen.
    Es wäre komisch wenn das Script nicht via localhost die Datenbanken erstellt. Gibts denn dazu nix im error Log?
  • Als das /home/skripte/web Skript regelt das anlegen von Datenbanken. Dort einfach mal reinsehen und den jeweiligen Befehl von Hand eingeben oder das Skript mit den richtigen Variablen ausführen.

    ./web dbcreate xxx dbnamexy dbuserxy dbpasswdxy

    Was folgt hier als Meldung?
    Bitte die Forumsuche und das Handbuch verwenden. Wenn die Suche erfolglos war, bitte ein Thema erstellen und das Problem ausführlich beschreiben. Dieser Ablauf spart Zeit und unnötige Fragen zu immer gleichen Problemen. Sie können uns aber auch eine Supportanfrage zukommmen lassen.

    Gefällt Ihnen TekLab?
  • Die config von Debian macht eine ip Bindung nach aussen:

    bind-adress = : : (0.0.0.0 ?!?)

    Wäre das bind-adress nicht in der my.cnf würde Maria nur auf dem localhost lauschen.
    Wenn das TB Script aber die DB's und DB-Benutzer via ssh/demon local auf dem Zielserver anlegen würde, dann muss es auch bei opensuse gehen da die mysql Befehle und der Aufruf der mysql Konsole, wie unter Debian auch, gleich ist.

    Wenn aber das ganze Remote geht, wovon ich jetzt mal ausgehe, dann ist das "bind-adress" mit der Schlüssel.

    CFrankenstein wrote:

    Als das /home/skripte/web Skript regelt das anlegen von Datenbanken. Dort einfach mal reinsehen und den jeweiligen Befehl von Hand eingeben oder das Skript mit den richtigen Variablen ausführen.

    ./web dbcreate xxx dbnamexy dbuserxy dbpasswdxy

    Was folgt hier als Meldung?
    Teste ich gleich mal

    <Edit />

    Die Ausgabe ist wie folgt:

    Source Code

    1. '@'localhost' (using password: YES)or user 'root
    2. ID1


    Nosxxx wrote:

    BdMdesigN wrote:

    Doch es liegt an der Maria:
    Bitte keinen Blödsinn verzapfen.
    Wenn eine Configdatei etwas anders ist, ist es eben so. Das ist jetzt kein "Problem". Das Binding solltest auch du umstellen können.

    Natürlich könnte es sein das es am Binding liegt, warum die Datenbanken nicht angelegt werden - Das will ich nicht in abrede stellen.
    Es wäre komisch wenn das Script nicht via localhost die Datenbanken erstellt. Gibts denn dazu nix im error Log?

    Nein in den Logs ist nichts zu finden.
  • BdMdesigN wrote:

    Die config von Debian macht eine ip Bindung nach aussen:

    bind-adress = : : (0.0.0.0 ?!?)

    Wäre das bind-adress nicht in der my.cnf würde Maria nur auf dem localhost lauschen.
    Wenn das TB Script aber die DB's und DB-Benutzer via ssh/demon local auf dem Zielserver anlegen würde, dann muss es auch bei opensuse gehen da die mysql Befehle und der Aufruf der mysql Konsole, wie unter Debian auch, gleich ist.

    Wenn aber das ganze Remote geht, wovon ich jetzt mal ausgehe, dann ist das "bind-adress" mit der Schlüssel.
    das ganze geht ja nicht remote, das wird auf der Console ausgeführt.


    Die Bind Adresse ist eigentlich per default bei MariaDB mittels # deaktiviert, da die zeile lautet # bind 0.0.0.0 in der default install


    Es sei denn du hast plesk denn plask entfernt die # davor das man mittels plesk eben auch auf der/den IP('s) verbinden kann
  • GenXRoad wrote:

    BdMdesigN wrote:

    Die config von Debian macht eine ip Bindung nach aussen:

    bind-adress = : : (0.0.0.0 ?!?)

    Wäre das bind-adress nicht in der my.cnf würde Maria nur auf dem localhost lauschen.
    Wenn das TB Script aber die DB's und DB-Benutzer via ssh/demon local auf dem Zielserver anlegen würde, dann muss es auch bei opensuse gehen da die mysql Befehle und der Aufruf der mysql Konsole, wie unter Debian auch, gleich ist.

    Wenn aber das ganze Remote geht, wovon ich jetzt mal ausgehe, dann ist das "bind-adress" mit der Schlüssel.
    das ganze geht ja nicht remote, das wird auf der Console ausgeführt.

    Die Bind Adresse ist eigentlich per default bei MariaDB mittels # deaktiviert, da die zeile lautet # bind 0.0.0.0 in der default install


    Es sei denn du hast plesk denn plask entfernt die # davor das man mittels plesk eben auch auf der/den IP('s) verbinden kann

    Ja hat CF ja auch bestätigt, also daß das Script lokal auf dem Zielserver ausgeführt wird.
  • So ein kleiner Erfolg:

    Durch Tante Google bin ich auf den Code gestoßen:

    Source Code

    1. #! /bin/bash
    2. EXPECTED_ARGS=3
    3. E_BADARGS=65
    4. MYSQL=`which mysql`
    5. mysqlpwd=`cat /etc/mysql/settings.ini | grep -i password | awk '{print $2}'` # Zum Testen von mir hinzugefügt
    6. mysqlusr=`cat /etc/mysql/settings.ini | grep -i login | awk '{print $2}'` # Hier ebenso
    7. Q1="CREATE DATABASE IF NOT EXISTS $1;"
    8. Q2="GRANT USAGE ON *.* TO $2@localhost IDENTIFIED BY '$3';"
    9. Q3="GRANT ALL PRIVILEGES ON $1.* TO $2@localhost;"
    10. Q4="FLUSH PRIVILEGES;"
    11. SQL="${Q1}${Q2}${Q3}${Q4}"
    12. if [ $# -ne $EXPECTED_ARGS ]
    13. then
    14. echo "Usage: $0 dbname dbuser dbpass"
    15. exit $E_BADARGS
    16. fi
    17. $MYSQL -u$mysqlusr -p$mysqlpwd -e "$SQL"
    Display All


    Dieser Code Funktioniert so halb, die Berechtigungen werden hier nicht korrekt übergeben aber DB und Benutzer werden schon mal angelegt.

    Ausgeführt wird das ganze so:

    Source Code

    1. ./createdb DerDatenbankname DerDatenbankBenutzer DasDatenbankPaswort

    Das Script heisst im dem Fall createdb.

    Also so weit bin ich schon mal.
  • Ich habe wohl schon das Problem gefunden.

    Die Skripte werden alle über Sudo aufgerufen.
    Da kann es vorkommen das die Pfade nicht korrekt gesetzt werden // sind.
    Stichwort secure_path

    Generell wäre es viel Sinnvoller @CFrankenstein die Pfade mit anzugeben.

    mysql --user=$mysqlusr --password=$mysqlpwd -e "$SQL"

    Besser:

    MYSQL=`which mysql`
    sqlcreate=`$MYSQL --user=$mysqlusr --password=$mysqlpwd -e "$SQL"`

    Das sollte man eigentlich mit allen "Befehlen" machen. Ist sauberer.
  • Nosxxx wrote:

    Ich habe wohl schon das Problem gefunden.

    Die Skripte werden alle über Sudo aufgerufen.
    Da kann es vorkommen das die Pfade nicht korrekt gesetzt werden // sind.
    Stichwort secure_path

    Generell wäre es viel Sinnvoller @CFrankenstein die Pfade mit anzugeben.

    mysql --user=$mysqlusr --password=$mysqlpwd -e "$SQL"

    Besser:

    MYSQL=`which mysql`
    sqlcreate=`$MYSQL --user=$mysqlusr --password=$mysqlpwd -e "$SQL"`

    Das sollte man eigentlich mit allen "Befehlen" machen. Ist sauberer.

    Ja kann man machen, wird in PHP OOP auch so gemacht. Hier liegt es warscheinlich aber an den $VARS (also im TB web Script), die scheinen leer zu sein soweit bin ich aber noch nicht.

    "$mysqluser" und "$mysqlpwd" hingegen sind gefüllt.

    <Edit />

    Die ganzen

    Source Code

    1. if [ $VAR_A = "dbcreate" ]; then
    2. .....
    3. fi
    4. if [ "$VAR_A" = "dbdelete" ]; then
    5. ....
    6. fi
    7. if [ "$VAR_A" = "dbrename" ]; then
    8. ....
    9. fi
    10. if [ "$VAR_A" = "dbpasswd" ]; then
    11. ...
    12. fi
    Display All

    könnte man auch mit den case switch Regeln.
    Nur so ne Idee, nur weiss ich noch nicht ob das auch in Bash Scripten geht.

    The post was edited 2 times, last by BdMdesigN: Edit hinzugefügt ().

  • Ich prüf die Skripte morgen mal auf einem neuen VServer durch. Was wird übergeben wenn man auf DB erstellen klickt? Diese info steht bei /var/log/auth.log dort nach ./web dbcreate suchen und hier mal die Zeile posten.
    Bitte die Forumsuche und das Handbuch verwenden. Wenn die Suche erfolglos war, bitte ein Thema erstellen und das Problem ausführlich beschreiben. Dieser Ablauf spart Zeit und unnötige Fragen zu immer gleichen Problemen. Sie können uns aber auch eine Supportanfrage zukommmen lassen.

    Gefällt Ihnen TekLab?
  • Die auth.log gibt es nicht, die brauchen wir auch nicht wenn man sich eine "Debugmsg" baut.

    Das ist das was ich gerade Teste:

    Source Code

    1. VAR_A=$1
    2. VAR_B=$2
    3. VAR_C=$3
    4. VAR_D=$4
    5. VAR_E=$5
    6. VAR_F=$6
    7. VAR_G=$7
    8. VAR_H=$8
    9. VAR_I=$9
    10. VAR_J=${10}
    11. MYSQL=`which mysql`
    12. settingsini=/etc/mysql/settings.ini
    13. mysqlusr=`cat /etc/mysql/settings.ini | grep -i login | awk '{print $2}'`
    14. mysqlpwd=`cat /etc/mysql/settings.ini | grep -i password | awk '{print $2}'`
    15. login=`$MYSQL -u$mysqlusr -p$mysqlpwd`
    16. ....
    17. if [ $VAR_A = "dbcreate" ]; then
    18. if [ -f $settingsini ]; then
    19. #Q1="CREATE DATABASE IF NOT EXISTS $VAR_C;"
    20. #Q2="GRANT ALL PRIVILEGES ON $VAR_C.* TO '$VAR_D'@'%' IDENTIFIED BY '$VAR_E' WITH GRANT OPTION;"
    21. #Q3="FLUSH PRIVILEGES;"
    22. #SQL="${Q1}${Q2}${Q3}"
    23. Q1="CREATE DATABASE IF NOT EXISTS $2;"
    24. Q2="GRANT USAGE ON $2.* TO $3@localhost IDENTIFIED BY '$5';"
    25. Q3="GRANT ALL PRIVILEGES ON $2.* TO $3@localhost;"
    26. Q4="FLUSH PRIVILEGES;"
    27. SQL="${Q1}${Q2}${Q3}${Q4}"
    28. sqlcreate=`$MYSQL $login -e "$SQL"`
    29. echo "$VAR_B $VAR_C $VAR_D $VAR_E"
    30. echo "$2 $3 $4 $5"
    31. echo "$mysqlusr $mysqlpwd"
    32. else
    33. echo "ID2"
    34. fi
    35. fi
    Display All

    Ich lasse mir also im Echo die Vars anzeigen und das kommt dabei raus:

    Source Code

    1. user-webi@v145:/home/skripte> ./web dbcreate KDN_5999 KDN_5999 DasZuErstellendeDatenbankpasswort
    2. '@'localhost' (using password: YES)or user 'root
    3. ERROR 1044 (42000) at line 1: Access denied for user ''@'localhost' to database 'KDN_5999'
    4. KDN_5999 KDN_5999 DasZuErstellendeDatenbankpasswort
    5. KDN_5999 KDN_5999 DasZuErstellendeDatenbankpasswort
    6. rootpasswort


    Es fällt auf, das der DBBenutzer nicht korret aus der VAR im Script gelesen wird: ERROR 1044 (42000) at line 1: Access denied for user ''@'localhost' to database 'KDN_5999'
    Zweitens, wird der User root so nicht korrekt übergeben, wie man an Zeile 6 schön sehen kann.
  • #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;"

    in

    #Q1="CREATE DATABASE IF NOT EXISTS $VAR_C;"
    #Q2="GRANT ALL PRIVILEGES ON $VAR_C.* TO '$VAR_B'@'%' IDENTIFIED BY '$VAR_D' WITH GRANT OPTION;"
    Bitte die Forumsuche und das Handbuch verwenden. Wenn die Suche erfolglos war, bitte ein Thema erstellen und das Problem ausführlich beschreiben. Dieser Ablauf spart Zeit und unnötige Fragen zu immer gleichen Problemen. Sie können uns aber auch eine Supportanfrage zukommmen lassen.

    Gefällt Ihnen TekLab?
  • Ich hab den Fehler gefunden, schuld sind die beiden:

    Source Code

    1. mysqlusr=`cat /etc/mysql/settings.ini | grep -i login | awk '{print $2}'`
    2. mysqlpwd=`cat /etc/mysql/settings.ini | grep -i password | awk '{print $2}'`
    Die beissen sich.

    Wenn ich aber folegendes mache:

    Source Code

    1. mysqlusr="NameDesHauptafmin"
    2. mysqlpwd="PasswortDesHauptadmins"
    Wird der Benutzer und die Datenbank korrekt angelegt.

    CFrankenstein wrote:

    ...


    #Q1="CREATE DATABASE IF NOT EXISTS $VAR_C;"
    #Q2="GRANT ALL PRIVILEGES ON $VAR_C.* TO '$VAR_B'@'%' IDENTIFIED BY '$VAR_D' WITH GRANT OPTION;"
    Auch das ist Falsch, wenn die Anweisung wie folgt lauten soll:

    Source Code

    1. ./web dbcreate HierDerDatenbankname HierDerDatenbankBenutzer HierDasDatenbankPasswort


    Dann müsste der Code so sein:

    Source Code

    1. Q1="CREATE DATABASE IF NOT EXISTS $VAR_B;"
    2. Q2="GRANT ALL PRIVILEGES ON $VAR_B.* TO $VAR_C@'%' IDENTIFIED BY '$VAR_D' WITH GRANT OPTION;"
    3. Q3="FLUSH PRIVILEGES;"
    4. SQL="${Q1}${Q2}${Q3}"


    Zur Erklärung:

    $VAR_A ist die Variable dbcreate
    $VAR_B dann die für dbname
    $VAR_C für dbuser
    $VAR_D dann für dbpass

    Und damit geht es dann.
    Nun muss ich mich mal wieder in die Arrays einfummeln, so das ich das Problem mit "mysqlusr" und "mysqlpwd" gelöst bekomme.
  • So fertig und es Funktioniert wie es soll.
    Ich habe auch ein Codecleanup gemacht.

    Zum Vergleich:

    Alt (kaputt):

    Source Code

    1. #! /bin/bash
    2. # TekLabs TekBase
    3. # Copyright 2005-2015 TekLab
    4. # Christian Frankenstein
    5. # Website: www.teklab.de
    6. # www.teklab.us
    7. VAR_A=$1
    8. VAR_B=$2
    9. VAR_C=$3
    10. VAR_D=$4
    11. VAR_E=$5
    12. VAR_F=$6
    13. VAR_G=$7
    14. VAR_H=$8
    15. VAR_I=$9
    16. VAR_J=${10}
    17. if [ "$VAR_A" = "" ]; then
    18. ./tekbase
    19. fi
    20. LOGF=`date +"%Y_%m"`
    21. LOGC=`date +"%Y_%m-%H_%M_%S"`
    22. LOGP=`pwd`
    23. if [ ! -d logs ]; then
    24. mkdir logs
    25. chmod 0777 logs
    26. fi
    27. if [ ! -d restart ]; then
    28. mkdir restart
    29. chmod 0777 restart
    30. fi
    31. if [ ! -f "logs/$LOGF.txt" ]; then
    32. echo "***TekBASE Script Log***" >> $LOGP/logs/$LOGF.txt
    33. chmod 0666 $LOGP/logs/$LOGF.txt
    34. fi
    35. if [ "$VAR_A" = "dbcreate" ]; then
    36. if [ -f /etc/mysql/settings.ini ]; then
    37. mysqlpwd=`cat /etc/mysql/settings.ini | grep -i password | awk '{print $2}'`
    38. mysqlusr=`cat /etc/mysql/settings.ini | grep -i login | awk '{print $2}'`
    39. Q1="CREATE DATABASE IF NOT EXISTS $VAR_C;"
    40. Q2="GRANT ALL PRIVILEGES ON $VAR_C.* TO '$VAR_D'@'%' IDENTIFIED BY '$VAR_E' WITH GRANT OPTION;"
    41. Q3="FLUSH PRIVILEGES;"
    42. SQL="${Q1}${Q2}${Q3}"
    43. sqlcreate=`mysql --user=$mysqlusr --password=$mysqlpwd -e "$SQL"`
    44. echo "ID1"
    45. else
    46. echo "ID2"
    47. fi
    48. fi
    49. if [ "$VAR_A" = "dbdelete" ]; then
    50. if [ -f /etc/mysql/settings.ini ]; then
    51. mysqlpwd=`cat /etc/mysql/settings.ini | grep -i password | awk '{print $2}'`
    52. mysqlusr=`cat /etc/mysql/settings.ini | grep -i login | awk '{print $2}'`
    53. Q1="DROP DATABASE $VAR_C;"
    54. Q2="DROP USER $VAR_D@'%';"
    55. Q3="FLUSH PRIVILEGES;"
    56. SQL="${Q1}${Q2}"
    57. sqlcreate=`mysql --user=$mysqlusr --password=$mysqlpwd -e "$SQL"`
    58. echo "ID1"
    59. else
    60. echo "ID2"
    61. fi
    62. fi
    63. if [ "$VAR_A" = "dbrename" ]; then
    64. if [ -f /etc/mysql/settings.ini ]; then
    65. mysqlpwd=`cat /etc/mysql/settings.ini | grep -i password | awk '{print $2}'`
    66. mysqlusr=`cat /etc/mysql/settings.ini | grep -i login | awk '{print $2}'`
    67. mysqldump --user=$mysqlusr --password=$mysqlpwd $VAR_C > $VAR_C.sql
    68. Q1="CREATE DATABASE IF NOT EXISTS $VAR_D;"
    69. SQL="${Q1}"
    70. sqlcreate=`mysql --user=$mysqlusr --password=$mysqlpwd -e "$SQL"`
    71. sqlcreate=`mysql --user=$mysqlusr --password=$mysqlpwd $VAR_D < $VAR_C.sql`
    72. Q1="GRANT ALL PRIVILEGES ON $VAR_D.* TO '$VAR_E'@'%';"
    73. Q2="REVOKE ALL PRIVILEGES ON $VAR_C.* FROM '$VAR_E'@'%';"
    74. Q3="DROP DATABASE $VAR_C;"
    75. Q4="FLUSH PRIVILEGES;"
    76. SQL="${Q1}${Q2}${Q3}${Q4}"
    77. sqlcreate=`mysql --user=$mysqlusr --password=$mysqlpwd -e "$SQL"`
    78. rm $VAR_C.sql
    79. echo "ID1"
    80. else
    81. echo "ID2"
    82. fi
    83. fi
    84. if [ "$VAR_A" = "dbpasswd" ]; then
    85. if [ -f /etc/mysql/settings.ini ]; then
    86. mysqlpwd=`cat /etc/mysql/settings.ini | grep -i password | awk '{print $2}'`
    87. mysqlusr=`cat /etc/mysql/settings.ini | grep -i login | awk '{print $2}'`
    88. Q1="UPDATE mysql.user SET Password=PASSWORD('$VAR_D') WHERE User='$VAR_C';"
    89. Q2="FLUSH PRIVILEGES;"
    90. SQL="${Q1}${Q2}"
    91. sqlcreate=`mysql --user=$mysqlusr --password=$mysqlpwd -e "$SQL"`
    92. echo "ID1"
    93. else
    94. echo "ID2"
    95. fi
    96. fi
    97. exit 0
    Display All

    Neu und funktioniert:

    Source Code

    1. #! /bin/bash
    2. # TekLabs TekBase
    3. # Copyright 2005-2015 TekLab
    4. # Christian Frankenstein
    5. # Website: www.teklab.de
    6. # www.teklab.us
    7. VAR_A=$1
    8. VAR_B=$2
    9. VAR_C=$3
    10. VAR_D=$4
    11. VAR_E=$5
    12. # Werden die restlichen wircklich benötigt?
    13. VAR_F=$6
    14. VAR_G=$7
    15. VAR_H=$8
    16. VAR_I=$9
    17. VAR_J=${10}
    18. MYSQL=`which mysql`
    19. settingsini=/etc/mysql/settings.ini
    20. mysqlusr=`cat /etc/mysql/settings.ini | awk '{print $1}'`
    21. mysqlpwd=`cat /etc/mysql/settings.ini | awk '{print $2}'`
    22. if [ $VAR_A = "" ]; then
    23. ./tekbase
    24. fi
    25. LOGF=`date +"%Y_%m"`
    26. LOGC=`date +"%Y_%m-%H_%M_%S"`
    27. LOGP=`pwd`
    28. if [ ! -d logs ]; then
    29. mkdir logs
    30. chmod 0777 logs
    31. fi
    32. if [ ! -d restart ]; then
    33. mkdir restart
    34. chmod 0777 restart
    35. fi
    36. if [ ! -f "logs/$LOGF.txt" ]; then
    37. echo "***TekBASE Script Log***" >> $LOGP/logs/$LOGF.txt
    38. chmod 0666 $LOGP/logs/$LOGF.txt
    39. fi
    40. if [ -f $settingsini ]; then
    41. case $VAR_A in
    42. 'dbcreate')
    43. Q1="CREATE DATABASE IF NOT EXISTS $VAR_B;"
    44. Q2="GRANT ALL PRIVILEGES ON $VAR_B.* TO $VAR_C@'%' IDENTIFIED BY '$VAR_D' WITH GRANT OPTION;"
    45. Q3="FLUSH PRIVILEGES;"
    46. SQL="${Q1}${Q2}${Q3}"
    47. sqlcreate=`$MYSQL -u$mysqlusr -p$mysqlpwd -e "$SQL"`
    48. echo "ID1"
    49. ;;
    50. 'dbdelete')
    51. Q1="DROP DATABASE $VAR_B;"
    52. Q2="DROP USER $VAR_C@'%';"
    53. Q3="FLUSH PRIVILEGES;"
    54. SQL="${Q1}${Q2}"
    55. sqlcreate=`$MYSQL -u$mysqlusr -p$mysqlpwd -e "$SQL"`
    56. echo "ID1"
    57. ;;
    58. 'dbrename')
    59. # Wird dieses hier wirklich gebraucht?
    60. mysqldump -u$mysqlusr -p$mysqlpwd $VAR_B > $VAR_B.sql
    61. Q1="CREATE DATABASE IF NOT EXISTS $VAR_C;"
    62. SQL="${Q1}"
    63. sqlcreate=`$MYSQL -u$mysqlusr -p$mysqlpwd -e "$SQL"`
    64. sqlcreate=`$MYSQL -u$mysqlusr -p$mysqlpwd $VAR_C < $VAR_B.sql`
    65. Q1="GRANT ALL PRIVILEGES ON $VAR_C.* TO $VAR_D@'%';"
    66. Q2="REVOKE ALL PRIVILEGES ON $VAR_B.* FROM $VAR_D@'%';"
    67. Q3="DROP DATABASE $VAR_B;"
    68. Q4="FLUSH PRIVILEGES;"
    69. SQL="${Q1}${Q2}${Q3}${Q4}"
    70. sqlcreate=`$MYSQL -u$mysqlusr -p$mysqlpwd -e "$SQL"`
    71. rm $VAR_C.sql
    72. echo "ID1"
    73. ;;
    74. 'dbpasswd')
    75. Q1="UPDATE mysql.user SET Password=PASSWORD('$VAR_C') WHERE User='$VAR_B';"
    76. Q2="FLUSH PRIVILEGES;"
    77. SQL="${Q1}${Q2}"
    78. sqlcreate=`$MYSQL -u$mysqlusr -p$mysqlpwd -e "$SQL"`
    79. echo "ID1"
    80. ;;
    81. esac
    82. else
    83. echo "ID2"
    84. fi
    85. exit 0
    Display All

    1. Änderung:

    Die folgenden Zeilen sind rausgeflogen, da diese Probleme machten:

    Source Code

    1. mysqlpwd=`cat /etc/mysql/settings.ini | grep -i password | awk '{print $2}'`
    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:

    Source Code

    1. mysqlusr=`cat /etc/mysql/settings.ini | awk '{print $1}'`
    2. 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:

    Source Code

    1. DBHauptadmin Hauptadminpasswort
    2. Beispiel:
    3. Holger IchBinEinTollesPasswort


    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:

    Source Code

    1. ./web dbcreate dbname dbuser dbpass

    Für dbdelete so:

    Source Code

    1. ./web dbdelete dbname dbuser


    Für dbrename (wird das überhaupt gebraucht?):

    Source Code

    1. ./web dbrename dbaltername dbneuername dbuser


    Und für dbpasswd:


    Source Code

    1. ./web dbpasswd dbuser dbneuespasswort



    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.
    Files
    • web.txt

      (2.24 kB, downloaded 147 times, last: )

    The post was edited 1 time, last by BdMdesigN: Typo ().

  • Das mit der Settings war so richtig. Die Variablen in der dbcreate war vertauscht Fix kommt heute. Danke für den Test. Ich hab den Code noch einmal geprüft. Welche TekBASE Version wird verwendet? Denn in der aktuellen wird

    ./web dbcreate kundexy dbnamexy dbuserxy passwdxy

    gesendet und ist dann auch im web Skript richtig. Da bei dir jedoch nur

    ./web dbcreate dbnamexy dbuserxy passwdxy

    gesendet wurde. Wird vielleicht eine alte Datei im TekBASE genutzt? Wurde zufällig geupdatet? Wenn ja von welcher Version?
    Bitte die Forumsuche und das Handbuch verwenden. Wenn die Suche erfolglos war, bitte ein Thema erstellen und das Problem ausführlich beschreiben. Dieser Ablauf spart Zeit und unnötige Fragen zu immer gleichen Problemen. Sie können uns aber auch eine Supportanfrage zukommmen lassen.

    Gefällt Ihnen TekLab?

    The post was edited 2 times, last by CFrankenstein ().

  • GenXRoad wrote:

    Das ist soweit richtig das man die grep anweisung. Icht bräuchte ;)


    Irgendwas scheint wohl mit deiner alten settings.ini nicht funktioniert zu haben? Denn bei mir funktioniert die settings.ini 1a...
    Die ini war ok, habe sie per Hand ausgelesen, alles Top.
    Sobald aber "awk '{print $2}'`" ins Spiel kommt und 2 mal hintereinander mit der selben Variable, wird die Variable überschrieben.

    Das habe ich alles mit "Debug" Ausgaben getestet.
    Man könnte die Datein auch via Arrax auslesen und dann das Array verarbeiten, aber da das hier mein erstes Bash Script ist hätte das zu lange gedauert und irgend wann muss ich auch mal Pennen ^^

    CFrankenstein wrote:

    Das mit der Settings war so richtig. Die Variablen in der dbcreate war vertauscht Fix kommt heute. Danke für den Test. Ich hab den Code noch einmal geprüft. Welche TekBASE Version wird verwendet? Denn in der aktuellen wird

    ./web dbcreate kundexy dbnamexy dbuserxy passwdxy

    gesendet und ist dann auch im web Skript richtig. Da bei dir jedoch nur

    ./web dbcreate dbnamexy dbuserxy passwdxy

    gesendet wurde. Wird vielleicht eine alte Datei im TekBASE genutzt? Wurde zufällig geupdatet? Wenn ja von welcher Version?
    Das mit der Settings.ini geht eben nicht, siehe oben.

    Die Version aus dem Install Paket mit dem 7.6.6 Update.
    Wenn jetzt Kunde noch davor ist, ist das ja kein Problem, dann wird die Var um ein verrückt.

    Aber so Funktioniert das Script, alles geht. Auch aus dem WCP.

    The post was edited 3 times, last by BdMdesigN ().

  • Ich hebe eben nochmal paar Tests gemacht:

    Mit

    Source Code

    1. #Q1="CREATE DATABASE IF NOT EXISTS $VAR_C;"
    2. #Q2="GRANT ALL PRIVILEGES ON $VAR_C.* TO '$VAR_B'@'%' IDENTIFIED BY '$VAR_D' WITH GRANT OPTION;"


    Passiert folgendes:

    1. Datenbank KDN_1234 wird angelegt
    2. DBuser mit KDN wird angelegt

    Nun wenn der Kunde nun aber mehrere DB's auf dem Server hat und die alle nur dem Benutzer KDN zugeordnet sind, kann es beim Löschen von nur einer DB dazu führen das der DBuser KDN auch gelöscht wird.
    Das hat dann zur folge, das der Kunde nicht mehr an seine DB's ran kommt.


    Mit:

    Source Code

    1. Q1="CREATE DATABASE IF NOT EXISTS $VAR_B;"
    2. Q2="GRANT ALL PRIVILEGES ON $VAR_B.* TO $VAR_C@'%' IDENTIFIED BY '$VAR_D' WITH GRANT OPTION;"
    1. DB KDN wird angelegt
    2. DBuser KDN_1234 und KDN_1235, wenn man den Kunden mehrere DB's zuweist (in diesen Fall 2).


    Mit

    Source Code

    1. Q1="CREATE DATABASE IF NOT EXISTS $VAR_C;"
    2. Q2="GRANT ALL PRIVILEGES ON $VAR_C.* TO $VAR_D@'%' IDENTIFIED BY '$VAR_D' WITH GRANT OPTION;"
    1. DB KDN_3491 wird angelegt
    2. DBuser KDN_91037 wird angelegt

    Wie kommt es hier zum DBuser KDN_91037 ??


    Alle drei Szenarien haben zur Folge das A) das Kundenlogin in die DB nicht funktioniert und B) das löschen auch nicht oder nur halb.

    Mir ist es ein Rätsel, warum mein Code von heute morgen und meine Test vom selbiegen funktioniert hatten.

    Wenn ich alles per Hand mache und der DB User auch den Identischen Namen von der DB hat, klappt zumindest das Löschen aus dem WCP einwandfrei. Ich konnte mich auch mit phpMyAdmin als Kunde einloggen.

    Das geht so nun nicht mehr. Ich habe nun alles 3x geprüft.

    The post was edited 1 time, last by BdMdesigN: Typo ().