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?

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.


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"; 

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


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.


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.


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'";


Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.