วิธีสร้างฐานข้อมูลจากคำสั่งเชลล์?


175

ฉันกำลังมองหาบางอย่างเช่น createb ใน PostgreSQL หรือโซลูชันอื่นใดที่จะอนุญาตให้ฉันสร้างฐานข้อมูลด้วยความช่วยเหลือของคำสั่งเชลล์ คำใบ้ใด ๆ

คำตอบ:


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

โดยที่ filename.sql ถือ sql ทั้งหมดเพื่อสร้างฐานข้อมูลของคุณ หรือ...

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

หากคุณต้องการสร้างฐานข้อมูลจริงๆ


2
ฉันได้รับข้อผิดพลาดนี้ข้อผิดพลาด 1046 (3D000) ที่บรรทัด 27: ไม่ได้เลือกฐานข้อมูลเมื่อฉันเรียกใช้ echo "สร้างฐานข้อมูล databasename" | mysql -u -u ชื่อผู้ใช้คำสั่ง -p
keerthi

@keerthi: ผู้ใช้ของคุณอาจไม่มีสิทธิ์ใน schema ใด ๆ
กริช

2
เป็นเพราะมี-uธงสองแห่ง
สตีเฟ่น

@Kris ฉันสามารถอ่านชื่อฐานข้อมูลจากเทอร์มินัลและใช้ค่าตัวแปรเป็นชื่อฐานข้อมูลในการสร้างฐานข้อมูล
CLIFFORD PY

@Clifford: คุณสามารถใช้สคริปต์ธรรมดา (ba) sh โดยใช้อาร์กิวเมนต์เชลล์ปกติ ( stackoverflow.com/questions/23563043/shell-script-arguments ) น่าจะเป็นคำถามของตัวเอง
กริช

214

คุณหมายถึงในขณะที่สภาพแวดล้อม mysql?

create database testdb;

หรือโดยตรงจากบรรทัดคำสั่ง:

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

11
mysql -u root -e "สร้างฐานข้อมูล testdb"; นั่นคือสิ่งที่ฉันกำลังมองหา :) ขอบคุณ
koszikot

3
ในกรณีที่คุณมีรหัสผ่านเพียงแค่เพิ่ม -p หลังจากกด Enter คุณจะถูกถามรหัสผ่านของคุณ ต่อไปนี้เป็นตัวอย่างการใช้ผู้ใช้ของฉันซึ่งเป็นรูท (เปลี่ยนถ้าคุณมีชื่อผู้ใช้ Anoter) และมันยังใช้ชื่อ "oc_local" สำหรับฐานข้อมูล (เปลี่ยนถ้าคุณต้องการให้ฐานข้อมูลของคุณถูกเรียกด้วยวิธีอื่น) - ----> mysql -u root -p -e "สร้างฐานข้อมูล oc_local";
pablofiumara

1
สวัสดี @koszikot - หากนี่คือสิ่งที่คุณกำลังมองหาคุณควรยอมรับว่าเป็นคำตอบที่ถูกต้อง :-)
thejohnbackes

1
ฉันชอบที่จะรู้ว่าสิ่งที่ตัวเลือกบรรทัดคำสั่งทำเพื่อคนอื่น ๆ -e คือรูปแบบย่อสำหรับ - คำสั่ง = คำสั่ง ค้นหาตัวเลือกบรรทัดคำสั่งได้ที่นี่dev.mysql.com/doc/refman/8.0/en/mysql-command-options.html
แอนโธนี

70

หากคุณสร้างฐานข้อมูลใหม่เป็นการดีที่จะสร้างผู้ใช้ที่มีสิทธิ์สำหรับฐานข้อมูลนี้เท่านั้น (หากมีสิ่งใดผิดพลาดคุณจะไม่สูญเสียการเข้าสู่ระบบและรหัสผ่านของผู้ใช้รูท) ดังนั้นทุกอย่างด้วยกันจะมีลักษณะเช่นนี้:

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

โดยที่:
base_userเป็นชื่อสำหรับผู้ใช้ที่มีสิทธิ์ทั้งหมด (อาจเป็นรูท)
base_user_passเป็นรหัสผ่านสำหรับ base_user (การเว้นวรรคระหว่าง -p และ base_user_pass มีความสำคัญ)
new_dbเป็นชื่อสำหรับฐานข้อมูลที่สร้างขึ้นใหม่
new_db_userเป็นชื่อสำหรับผู้ใช้ใหม่ที่เข้าถึง เฉพาะ new_db
new_db_user_passเป็นรหัสผ่านสำหรับ new_db_user


มาก เพิ่งเพิ่มซับที่ดีเยี่ยมนี้ไปยังตัวอย่างข้อมูล dashdocs ในกรณีที่ทุกคนมีรหัสผ่านรูทพร้อมช่องว่าง: -p"root password here"ทำงานได้ดี
hmedia1

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

แทนที่ตัวแปรข้างต้นและคุณพร้อมที่จะไปกับ oneliner นี้ $ USER เป็นชื่อผู้ใช้ $ PASSWORD เป็นรหัสผ่านและ $ DB_NAME เป็นชื่อของฐานข้อมูล


1
กลับมาที่คำถามนี้ในอีกหลายปีต่อมาและสังเกตเห็นว่าฉันยกมันขึ้นมา: D
Isaac

20

ใช้

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

คุณจะถูกถามให้ใส่รหัสผ่าน ตรวจสอบให้แน่ใจว่าผู้ใช้ mysql ที่คุณใช้มีสิทธิ์ในการสร้างฐานข้อมูล


12

คำตอบ ist และ 2nd นั้นดี แต่หากใครที่กำลังมองหาสคริปต์หรือหากคุณต้องการไดนามิกเช่น (db / ชื่อผู้ใช้ / รหัสผ่านในตัวแปร) ดังนั้นที่นี่:

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


2

เชื่อมต่อกับฐานข้อมูลโดยใช้ผู้ใช้ฐาน: mysql -u base_user -pbase_user_pass และดำเนินการสร้างฐานข้อมูลสร้างผู้ใช้และมอบสิทธิ์ในการชี้แจง

นี่คือตัวช่วยสร้างเว็บที่ใช้งานง่ายเพื่อช่วยคุณในการจัดทำงบ www.bugaco.com/helpers/create_database.html

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.