[Bash] Automatisiert MySQL Benutzer anlegen (Expect)

Dieses Thema im Forum "Programmierung & Entwicklung" wurde erstellt von DOWNandOUT, 25. Oktober 2012 .

  1. 25. Oktober 2012
    Automatisiert MySQL Benutzer anlegen (Expect)

    Hey,

    vorneweg habe nicht soviel ahnung von Bash, hab mir per Google bißchen was durchgelesen und gebastelt, allerdings funktioniert das nicht richtig.

    Ich möchte automatisch per Script einen MySQL Benutzer anlegen, eine Datenbank und dem User dann die Rechte für die Datenbank geben.

    Also versuche ich mit root einzuloggen
    mysql -u root -p

    dann kommt natürlich die "Enter password:" abfrage, also arbeite ich mit Expect, da man anscheinend nicht hinter dem -p parameter direkt das Passwort angeben kann.

    Mein Scirpt sieht derzeit so aus:
    Code:
    #!/usr/bin/expect -f
    spawn mysql -u root -p
    expect "Enter password:\r"
    send "passwort123\r"
    CREATE USER 'testuser'@localhost IDENTIFIED BY 'testpasswort';
    exit;
    
    Die Ausgabe wenn ichs ausführe sieht so aus:

    Code:
    root:/var/dev/test# ./test.sh
    spawn mysql -u root -p
    Enter password: invalid command name "CREATE"
     while executing
    "CREATE USER 'testuser'@localhost IDENTIFIED BY 'testpasswort'"
     (file "./test.sh" line 7)
    Line 7 ist die CREATE USER line.

    Weiss jemand wo das PRoblem liegt und kann mir evtl weiterhelfen ?

    schonmal danke im vorraus

    mfg
    DOWNandOUT
     
  2. 26. Oktober 2012
    Zuletzt bearbeitet: 26. Oktober 2012
    AW: Automatisiert MySQL Benutzer anlegen (Expect)

    Doch, kann man. Es muss aber DIREKT dahinter stehen. Wenn du so was machen musst empfiehlt es sich fast immer die bereits vorhandenen Scripte (die es zu 99% gibt) einfach mal anzuschauen.

    Hat mit Google und der MySQL Dokumentation ca. 10 Minuten gedauert und basiert auf diesem Script:

    https://svn.apache.org/repos/asf/incubator/ambari/trunk/hmc/puppet/modules/hdp-mysql/files/startMysql.sh

    [G]mysql -uroot -e"CREATE USER" filetype:sh[/G]

    Einfach die fett markierten Teile anpassen:

    Code:
    #!/bin/sh
    
    mysqldbuser="[B]USER[/B]"
    mysqldbpasswd="[B]PASS[/B]"
    mysqldbhost="[B]HOST[/B]"
    
    mysqlrootuser="[B]ROOTUSER[/B]"
    mysqlrootpasswd="[B]ROOTPASS[/B]"
    
    echo "Adding user $mysqldbuser@$mysqldbhost"
    echo "CREATE USER '$mysqldbuser'@'$mysqldbhost' IDENTIFIED BY '$mysqldbpasswd';" | mysql -u$mysqlrootuser -p$mysqlrootpasswd
    echo "GRANT USAGE ON * . * TO '$mysqldbuser'@'$mysqldbhost' IDENTIFIED BY '$mysqldbpasswd';" | mysql -u$mysqlrootuser -p$mysqlrootpasswd
    echo "CREATE DATABASE IF NOT EXISTS \`$mysqldbuser\`;" | mysql -u$mysqlrootuser -p$mysqlrootpasswd
    echo "GRANT ALL PRIVILEGES ON \`$mysqldbuser\` . * TO '$mysqldbuser'@'$mysqldbhost'" | mysql -u$mysqlrootuser -p$mysqlrootpasswd
    echo "FLUSH PRIVILEGES;" | mysql -u$mysqlrootuser -p$mysqlrootpasswd
    Lässt sich mit Hilfe von Funktionen sicherlich schöner lösen. Habe jetzt aber keinen Wert auf Struktur gelegt.
     
    1 Person gefällt das.
  3. 27. Oktober 2012
    AW: Automatisiert MySQL Benutzer anlegen (Expect)

    Danke, funktioniert super, you're my personal hero BW ist raus. Hatte echt nach gegooglet aber glaube mir ist auch nicht der richtige Suchbegriff eingefallen, unter "Automatisiertes MySQL User anlegen mit bash" hab ich jedenfalls nichts gefunden :O)
     
  4. Video Script

    Videos zum Themenbereich

    * gefundene Videos auf YouTube, anhand der Überschrift.