Jak stworzyć bazę danych z polecenia powłoki?

175

Szukam czegoś takiego jak createdb w PostgreSQL lub innego rozwiązania, które pozwoliłoby mi stworzyć bazę danych za pomocą polecenia powłoki. Jakieś wskazówki?

koszikot
źródło

Odpowiedzi:

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

Gdzie nazwa_pliku.sql przechowuje cały plik sql do utworzenia bazy danych. Lub...

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

Jeśli naprawdę chcesz tylko utworzyć bazę danych.

Kris
źródło
2
Otrzymuję ten błąd ERROR 1046 (3D000) w wierszu 27: Nie wybrano bazy danych po uruchomieniu echo "utwórz nazwę bazy danych bazy danych" | mysql -u -u nazwa użytkownika -p polecenie
keerthi
@keerthi: być może Twój użytkownik nie ma uprawnień do żadnego istniejącego schematu?
Kris
2
To dlatego, że są dwie -uflagi
Stephen
@Kris Czy mogę odczytać nazwę bazy danych z terminala i użyć wartości zmiennej jako nazwy bazy danych podczas tworzenia bazy danych.
CLIFFORD PY
@Clifford: możesz użyć prostego skryptu (ba) sh, używając zwykłych argumentów powłoki. ( stackoverflow.com/questions/23563043/shell-script-arguments ) Prawdopodobnie zasługuje na własne pytanie.
Kris
214

Masz na myśli, gdy środowisko mysql?

create database testdb;

Lub bezpośrednio z wiersza poleceń:

mysql -u root -e "create database testdb"; 
Felix Kling
źródło
11
mysql -u root -e "utwórz bazę danych testdb"; Właśnie tego szukałem :) dziękuję
koszikot
3
Jeśli masz hasło, po prostu dodaj -p. Po naciśnięciu klawisza Enter zostaniesz poproszony o podanie hasła. Poniżej znajduje się przykład z użyciem mojego użytkownika, który jest rootem (zmień go, jeśli masz inną nazwę użytkownika), a także używa nazwy „oc_local” dla bazy danych (zmień ją, jeśli chcesz, aby Twoja baza danych była wywoływana w inny sposób) - ----> mysql -u root -p -e "utwórz bazę danych oc_local";
pablofiumara
1
cześć @koszikot - jeśli tego właśnie szukałeś, to zaakceptuj to jako poprawną odpowiedź :-)
thejohnbackes
1
Lubię wiedzieć, co robią opcje wiersza poleceń, dla innych -e jest skróconą formą dla --execute = instrukcja. Znajdź opcje wiersza poleceń tutaj dev.mysql.com/doc/refman/8.0/en/mysql-command-options.html
Anthony
70

Jeśli tworzysz nową bazę danych, dobrze jest utworzyć użytkownika z uprawnieniami tylko do tej bazy danych (jeśli coś pójdzie nie tak, nie złamiesz loginu i hasła użytkownika root). Więc wszystko razem będzie wyglądać tak:

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

Gdzie:
base_user to nazwa użytkownika z wszystkimi uprawnieniami (prawdopodobnie root)
base_user_pass to hasło dla base_user (ważny jest brak spacji między -p i base_user_pass)
new_db to nazwa nowo utworzonej bazy danych
new_db_user to nazwa nowego użytkownika z dostępem tylko dla new_db
new_db_user_pass jest to hasło dla new_db_user

jmarceli
źródło
Masywny. Właśnie dodałem tę świetną linijkę do fragmentów dashdocs. W przypadku, gdy ktoś ma hasło roota ze spacjami: -p"root password here"działa dobrze
hmedia1
37
mysqladmin -u$USER -p$PASSWORD create $DB_NAME

Zastąp powyższe zmienne i już możesz wybrać ten oneliner. $ USER to nazwa użytkownika, $ PASSWORD to hasło, a $ DB_NAME to nazwa bazy danych.

karlingen
źródło
1
wróciłem do tego pytania wiele lat później i zauważyłem, że głosowałem za nim: D
Izaak
20

Posługiwać się

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

Zostaniesz poproszony o podanie hasła. Upewnij się również, że użytkownik mysql, którego używasz, ma uprawnienia do tworzenia bazy danych.

Willa
źródło
12

Ist i druga odpowiedź są dobre, ale jeśli ktoś szuka skryptu lub jeśli chcesz dynamiczny, tj. (Db / nazwa użytkownika / hasło w zmiennej), to tutaj:

#!/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
źródło
10

Możesz użyć SQL w linii poleceń:

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

Lub możesz użyć mysqladmin:

mysqladmin create dbname
Lukáš Lalinský
źródło
2

Połącz się z bazą danych za pomocą podstawowego użytkownika: mysql -u base_user -pbase_user_pass i wykonaj instrukcje CREATE DATABASE, CREATE USER i GRANT PRIVILEGES.

Oto przydatny kreator sieciowy, który pomoże Ci z wyciągami www.bugaco.com/helpers/create_database.html

CaptZ-
źródło