Wie erstelle ich eine Datenbank aus einem Shell-Befehl?

175

Ich suche nach etwas wie createdb in PostgreSQL oder einer anderen Lösung, mit der ich mithilfe eines Shell-Befehls eine Datenbank erstellen kann. Irgendwelche Hinweise?

koszikot
quelle

Antworten:

173
cat filename.sql | mysql -u username -p # type mysql password when asked for it

Wobei filename.sql die gesamte SQL enthält, um Ihre Datenbank zu erstellen. Oder...

echo "create database `database-name`" | mysql -u username -p

Wenn Sie wirklich nur eine Datenbank erstellen möchten.

Kris
quelle
2
Ich erhalte den Fehler FEHLER 1046 (3D000) in Zeile 27: Keine Datenbank ausgewählt, wenn ich echo "Datenbankdatenbankname erstellen" | ausführe mysql -u -u Benutzername -p Befehl
keerthi
@keerthi: Vielleicht hat Ihr Benutzer keine Berechtigungen für ein vorhandenes Schema?
Kris
2
Es ist, weil es zwei -uFlaggen gibt
Stephen
@Kris Kann ich den Datenbanknamen vom Terminal lesen und den Variablenwert als Datenbanknamen beim Erstellen der Datenbank verwenden?
CLIFFORD PY
@ Clifford: Sie könnten ein einfaches (ba) sh-Skript mit normalen Shell-Argumenten verwenden. ( stackoverflow.com/questions/23563043/shell-script-arguments ) Verdient wahrscheinlich eine eigene Frage.
Kris
213

Du meinst während der MySQL-Umgebung?

create database testdb;

Oder direkt von der Kommandozeile:

mysql -u root -e "create database testdb"; 
Felix Kling
quelle
11
mysql -u root -e "Datenbank testdb erstellen"; Das ist, wonach ich gesucht habe :) Danke
Koszikot
3
Wenn Sie ein Passwort haben, fügen Sie einfach -p hinzu. Nach dem Drücken der Eingabetaste werden Sie nach Ihrem Passwort gefragt. Das folgende Beispiel verwendet meinen Benutzer als Root (ändern Sie ihn, wenn Sie einen anderen Benutzernamen haben) und verwendet auch den Namen "oc_local" für die Datenbank (ändern Sie ihn, wenn Ihre Datenbank anders aufgerufen werden soll). ----> mysql -u root -p -e "Datenbank erstellen oc_local";
Pablofiumara
1
hi @koszikot - wenn dies das ist, wonach du gesucht hast, solltest du es als die richtige Antwort akzeptieren :-)
thejohnbackes
1
Ich möchte wissen, was die Befehlszeilenoptionen bewirken, für andere ist -e die Kurzform für die Anweisung --execute =. Hier finden Sie Befehlszeilenoptionen dev.mysql.com/doc/refman/8.0/en/mysql-command-options.html
Anthony
70

Wenn Sie eine neue Datenbank erstellen, empfiehlt es sich, Benutzer mit Berechtigungen nur für diese Datenbank zu erstellen (wenn etwas schief geht, werden die Anmeldung und das Kennwort des Root-Benutzers nicht beeinträchtigt). Also wird alles zusammen so aussehen:

mysql -u base_user -pbase_user_pass -e "create database new_db; GRANT ALL PRIVILEGES ON new_db.* TO new_db_user@localhost IDENTIFIED BY 'new_db_user_pass'"

Dabei gilt
Folgendes : base_user ist der Name für den Benutzer mit allen Berechtigungen (wahrscheinlich der Root).
Base_user_pass ist das Kennwort für base_user (Platzmangel zwischen -p und base_user_pass ist wichtig).
New_db ist der Name für die neu erstellte Datenbank.
New_db_user ist der Name für den neuen Benutzer mit Zugriff Nur für new_db
new_db_user_pass ist es das Passwort für new_db_user

jmarceli
quelle
Fest. Ich habe gerade diesen großartigen Einzeiler zu Dashdocs-Snippets hinzugefügt. Falls jemand ein Root-Passwort mit Leerzeichen hat: -p"root password here"funktioniert
einwandfrei
37
mysqladmin -u$USER -p$PASSWORD create $DB_NAME

Ersetzen Sie die obigen Variablen und Sie können mit diesem Oneliner beginnen. $ USER ist der Benutzername, $ PASSWORD ist das Passwort und $ DB_NAME ist der Name der Datenbank.

Karlingen
quelle
1
Ich kam viele Jahre später auf diese Frage zurück und bemerkte, dass ich sie positiv bewertet hatte: D
Isaac
20

Verwenden

$ mysqladmin -u <db_user_name> -p create <db_name>

Sie werden zur Eingabe des Passworts aufgefordert. Stellen Sie außerdem sicher, dass der von Ihnen verwendete MySQL-Benutzer über Berechtigungen zum Erstellen einer Datenbank verfügt.

Willa
quelle
12

Die ist und die zweite Antwort sind gut, aber wenn jemand nach einem Skript sucht oder wenn Sie dynamisch wollen, dh (Datenbank / Benutzername / Passwort in Variable), dann hier:

#!/bin/bash



DB="mydb"
USER="user1"
PASS="pass_bla"

mysql -uroot -prootpassword -e "CREATE DATABASE $DB CHARACTER SET utf8 COLLATE utf8_general_ci";
mysql -uroot -prootpassword -e "CREATE USER $USER@'127.0.0.1' IDENTIFIED BY '$PASS'";
mysql -uroot -prootpassword -e "GRANT SELECT, INSERT, UPDATE ON $DB.* TO '$USER'@'127.0.0.1'";
Salah-1
quelle
10

Sie können SQL in der Befehlszeile verwenden:

echo 'CREATE DATABASE dbname;' | mysql <...>

Oder Sie können verwenden mysqladmin:

mysqladmin create dbname
Lukáš Lalinský
quelle
2

Eine Verbindung mit DB mit Basis Benutzer: mysql -u base_user -pbase_user_pass Und ausführen CREATE DATABASE, CREATE USER und GRANT PRIVILEGIEN Statements.

Hier ist ein praktischer Web-Assistent, der Ihnen bei den Anweisungen hilft: www.bugaco.com/helpers/create_database.html

CaptZ-
quelle