ubuntuusers.de

MySql Datenbank erstellen mit Script

Status: Gelöst | Ubuntu-Version: Kein Ubuntu
Antworten |

freshdomi

Anmeldungsdatum:
16. Juli 2015

Beiträge: 27

Hey, stecke gerade ein wenig fest. Ich würde gerne mit einem Script eine Datenbank erstellen doch wenn ich das Script starte komm ich zu dem mysql> dann hört das Script auf bis ich es wieder beende und läuft dann weiter. Hatte jemand schon mal ein ähnliches Preoblem und kann mir weiterhelfen?

#MySql mysql -u root -p CREATE DATABASE $dbname; USE $dbname; CREATE USER "$user"@"localhost" IDENTIFIED BY "$pwsql"; GRANT ALL ON $dbname.* to "$user"@"localhost"; quit;

mfg

misterunknown Team-Icon

Ehemalige
Avatar von misterunknown

Anmeldungsdatum:
28. Oktober 2009

Beiträge: 4403

Wohnort: Sachsen

Du kannst es so machen:

1
echo "CREATE DATABASE blahfasel; ..." | mysql -u root -pDEINPASSWORT

oder auch so:

1
2
3
4
5
mysql -u root -pDEINPASSWORT <<EOF
CREATE DATABASE blahfasel...
...
...
EOF

Wichtig ist, dass du entweder dein Passwort direkt mitgeben, oder es bei der Ausführung deines Skripts immer manuell angeben musst.

freshdomi

(Themenstarter)

Anmeldungsdatum:
16. Juli 2015

Beiträge: 27

Hab jetzt beides probiert leider funktioniert es noch immer nicht. Wenn ich es mit deinem 1 Vorschlag probiere bekomme ich folgende Fehlermeldung:

ERROR 1064 (42000) at line 1: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right synt ax to use near at line 1

misterunknown Team-Icon

Ehemalige
Avatar von misterunknown

Anmeldungsdatum:
28. Oktober 2009

Beiträge: 4403

Wohnort: Sachsen

freshdomi schrieb:

ERROR 1064 (42000) at line 1: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right synt ax to use near at line 1

Das ist ein Fehler von MySQL. Du hast wahrscheinlich den Kontextwechsel nicht korrekt beachtet. Wenn du mehrere Anweisungen ausführst ist die zweite Methode deshalb sinnvoller. Deine Zeile müsste also so lauten:

1
2
3
4
5
6
mysql -u root -pDEINPASSWORT <<EOF
CREATE DATABASE ${dbname};
USE ${dbname};
CREATE USER "${user}"@"localhost" IDENTIFIED BY "${pwsql}";
GRANT ALL ON ${dbname}.* to "${user}"@"localhost";
EOF

2 kleine Hinweise

  • Dadurch, dass der MySQL-Client im nicht-interaktiven Modus ausgeführt wird, kannst du die quit-Anweisung am Ende weglassen.

  • Variablen in Bash funktionieren zwar auch ohne geschweifte Klammern, gerade in Skripten sollte man darauf aber nicht verzichten (warum nicht?, weitere Hinweise).

freshdomi

(Themenstarter)

Anmeldungsdatum:
16. Juli 2015

Beiträge: 27

OK Danke hab zwar jetzt noch ein anderes kleines Problem mit den Berechtigungen(#1044 Access denied for user...) aber das werde ich schon alleine hinbekommen!

freshdomi

(Themenstarter)

Anmeldungsdatum:
16. Juli 2015

Beiträge: 27

OK bekomme das mit den Rechten wohl doch nicht ganz gebogen...

Mein Script sollte ja eigentlich funktionieren. Doch sobald ich es starte bekommen ich folgende Meldung:

ERROR 1044 (42000) at line 1: Access denied for user @'localhost' to database 'dbname' Auch wenn ich mit root reingehe und es manuel eingebe kommt die Meldung. Mit debian-sys-maint kann ich zwar manuell alles erstellen wenn ich ihn jedoch ins Scipt einbaue bekomme ich wieder die Meldung. {{{#!code bash read dbname read user read pwsql mysql -u root-p <<EOF CREATE DATABASE ${dbname}; USE dbname; CREATE USER "user"@"localhost" IDENTIFIED BY "pwsql"; GRANT ALL ON dbname.* to "user"@"localhost"; EOF }}}

freshdomi

(Themenstarter)

Anmeldungsdatum:
16. Juli 2015

Beiträge: 27

und wiso hebt es meinen Code nicht hervor 😕

misterunknown Team-Icon

Ehemalige
Avatar von misterunknown

Anmeldungsdatum:
28. Oktober 2009

Beiträge: 4403

Wohnort: Sachsen

freshdomi schrieb:

Mein Script sollte ja eigentlich funktionieren. Doch sobald ich es starte bekommen ich folgende Meldung: Auch wenn ich mit root reingehe und es manuel eingebe kommt die Meldung. Mit debian-sys-maint kann ich zwar manuell alles erstellen wenn ich ihn jedoch ins Scipt einbaue bekomme ich wieder die Meldung.

Du hast zwischen root und -p ein Leerzeichen vergessen, so wie ich das sehe. Ansonsten sieht dein Skript in der Tat gut aus.

Dein Code wird nicht hervorgehoben, weil die beiden einfachen Hochkommata vor dem @'localhost' dem Interpreter sagen, dass der nachfolgende Text kursiv geschrieben wird. Da diese Funktion nicht beendet wird, wird alles bis zum Ende des Posts kursiv geschrieben ☺

Ein Hinweis noch: Das Passwort für den User, den du anzulegen versuchst, kannst du nicht direkt bei IDENTIFIED BY mitgeben, sondern musst es noch hashen:

1
2
3
4
5
-- 1. Möglichkeit
> CREATE USER "user"@"localhost" IDENTIFIED BY PASSWORD("${pwsql}");

-- 2. Möglichkeit
SET PASSWORD FOR "user"@"localhost" = PASSWORD("${pwsql}");

blaufotograph

Anmeldungsdatum:
9. Mai 2007

Beiträge: 58

Wohnort: Nähe Wolfsburg

misterunknown schrieb:

Ein Hinweis noch: Das Passwort für den User, den du anzulegen versuchst, kannst du nicht direkt bei IDENTIFIED BY mitgeben, sondern musst es noch hashen:

Das stimmt so nicht: Lies mal die Doku https://dev.mysql.com/doc/refman/5.5/en/assigning-passwords.html

To assign a password when you create a new account, use CREATE USER and include an IDENTIFIED BY clause:

1
2
>    mysql> CREATE USER 'jeffrey'@'localhost'
>        -> IDENTIFIED BY 'mypass';

Ich denke, dadurch dass Du PASSWORD in Deinem Statement angegeben hast, wird der hashed value erwartet, in der Doku steht es aber anders.

misterunknown Team-Icon

Ehemalige
Avatar von misterunknown

Anmeldungsdatum:
28. Oktober 2009

Beiträge: 4403

Wohnort: Sachsen

Stimmt 👍 Ich hatte da einen Denk- bzw. Tippfehler, weil ich tatsächlich immer noch PASSWORD mit dastehen hatte, und damit funktioniert nur der Hash.

Antworten |