Bagaimana cara membuat database dari perintah shell?


175

Saya mencari sesuatu seperti Createdb di PostgreSQL atau solusi lain yang memungkinkan saya membuat basis data dengan bantuan perintah shell. Ada petunjuk?

Jawaban:


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

Di mana filename.sql menampung semua sql untuk membuat database Anda. Atau...

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

Jika Anda benar-benar hanya ingin membuat database.


2
Saya mendapatkan kesalahan ini ERROR 1046 (3D000) pada baris 27: Tidak ada database yang dipilih ketika saya menjalankan echo "create database datasasameame" | mysql -u -u username -p perintah
keerthi

@keerthi: mungkin pengguna Anda tidak memiliki hak istimewa pada skema yang ada?
Kris

2
Itu karena ada dua -ubendera
Stephen

@Kris Dapatkah saya membaca nama basis data dari terminal dan menggunakan nilai variabel sebagai nama basis data dalam membuat basis data.
CLIFFORD PY

@Clifford: Anda bisa menggunakan skrip sh sederhana (ba) menggunakan argumen shell normal. ( stackoverflow.com/questions/23563043/shell-script-arguments ) Mungkin pantas pertanyaannya sendiri.
Kris

213

Maksudmu sementara lingkungan mysql?

create database testdb;

Atau langsung dari baris perintah:

mysql -u root -e "create database testdb"; 

11
mysql -u root -e "buat database testdb"; Itulah yang saya cari :) terima kasih
koszikot

3
Jika Anda memiliki kata sandi, tambahkan saja -p. Setelah menekan enter, Anda akan ditanya kata sandi Anda. Berikut ini adalah contoh menggunakan pengguna saya yang root (ubah jika Anda memiliki nama pengguna anoter) dan juga menggunakan nama "oc_local" untuk basis data (ubah jika Anda ingin basis data Anda dipanggil dengan cara yang berbeda) - ----> mysql -u root -p -e "buat database oc_local";
pablofiumara

1
hi @koszikot - jika ini yang Anda cari, Anda harus menerimanya sebagai jawaban yang benar :-)
thejohnbackes

1
Saya ingin tahu apa yang dilakukan opsi baris perintah, untuk yang lain -e adalah form-pendek untuk --execute = pernyataan. Temukan opsi baris perintah di sini dev.mysql.com/doc/refman/8.0/en/mysql-command-options.html
Anthony

70

Jika Anda membuat basis data baru, sebaiknya buat pengguna dengan izin hanya untuk basis data ini (jika terjadi kesalahan, Anda tidak akan kompromi login dan kata sandi pengguna root). Jadi semuanya akan terlihat seperti ini:

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

Di mana:
base_user adalah nama untuk pengguna dengan semua hak istimewa (mungkin root)
base_user_pass itu adalah kata sandi untuk base_user (kurangnya ruang antara -p dan base_user_pass penting)
new_db adalah nama untuk database yang baru dibuat
new_db_user adalah nama untuk pengguna baru dengan akses hanya untuk new_db
new_db_user_pass itu adalah kata sandi untuk new_db_user


Masif. Baru saja menambahkan liner hebat ini ke cuplikan dashdocs. Seandainya ada orang yang memiliki kata sandi root dengan spasi: -p"root password here"berfungsi dengan baik
hmedia1

37
mysqladmin -u$USER -p$PASSWORD create $DB_NAME

Ganti variabel di atas dan Anda siap menggunakan oneliner ini. $ USER adalah nama pengguna, $ PASSWORD adalah kata sandi dan $ DB_NAME adalah nama database.


1
kembali ke pertanyaan ini bertahun-tahun kemudian dan menyadari bahwa saya telah mengangkatnya: D
Isaac

20

Menggunakan

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

Anda akan dimintai kata sandi. Pastikan juga pengguna mysql yang Anda gunakan memiliki hak istimewa untuk membuat basis data.


12

Jawaban ist dan 2 bagus tetapi jika ada yang mencari skrip atau Jika Anda ingin dinamis yaitu (db / nama pengguna / kata sandi dalam variabel) maka di sini:

#!/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'";


Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.