จะรันสคริปต์ SQL ใน MySQL ได้อย่างไร


409

ฉันต้องการรันไฟล์ข้อความที่มีคำสั่ง SQL ใน MySQL

ฉันพยายามเรียกใช้source /Desktop/test.sqlและได้รับข้อผิดพลาด:

MySQL> \ home \ sivakumar \ Desktop \ test.sql ข้อผิดพลาด: ไม่สามารถเปิดไฟล์ '\ home \ sivakumar \ Desktop \ test.sql', ข้อผิดพลาด: 2

มีความคิดเกี่ยวกับสิ่งที่ฉันทำผิดหรือเปล่า?



ฉันคิดว่านี่ควรเป็นคำตอบที่นี่: \ /home/sivakumar/Desktop/test.sql
talsibony

คำตอบ:


433

หากคุณอยู่ที่บรรทัดคำสั่งของ MySQL mysql>คุณมีการประกาศแฟ้ม SQL sourceเป็น

mysql> source \home\user\Desktop\test.sql;

29
สำหรับ mysql 5.6.10 บน Mac ไม่จำเป็นต้องใช้เครื่องหมายอัญประกาศเดี่ยวสำหรับเส้นทางของไฟล์
RNA

3
สำหรับ windows การใช้ '/' แทน '\' ทำงานอย่างถูกต้องสำหรับฉัน ฉันพบข้อผิดพลาดเมื่อฉันใช้ '/' ในตอนแรก นี่คือสิ่งที่ใช้ได้กับฉัน ... source C: /Users/macombers/Downloads/midcoast_db.sql;
Zack Macomber

วางราคาใน Ubuntu ด้วย (mysql Ver 14.14 debian-linux-gnu (x86_64) โดยใช้ EditLine wrapper)
Siddhartha

1
@kapil สัมพันธ์กับอะไร คุณอยู่ใน MySQL ณ จุดนี้จึงไม่มีญาติฉันกลัว
โทมัสเอ็ดเวิร์ด

1
@Sarah คุณสามารถใช้ก่อนพื้นที่หรือห่อชื่อไฟล์ที่มี\ "
Thomas Edwards

165

คุณมีตัวเลือกค่อนข้างมาก:

  • ใช้ไคลเอนต์บรรทัดคำสั่ง MySQL: mysql -h hostname -u user database < path/to/test.sql
  • ติดตั้งเครื่องมือ MySQL GUI และเปิดไฟล์ SQL ของคุณจากนั้นเรียกใช้งาน
  • ใช้ phpmysql หากฐานข้อมูลพร้อมใช้งานผ่านเว็บเซิร์ฟเวอร์ของคุณ

3
รหัสผ่านของผู้ใช้ (ตัวเลือก -p) คืออะไร
Amir Katz

@AmirKatz ในขณะที่สามารถกำหนดรหัสผ่านพร้อม-pตัวเลือกนี้ไม่แนะนำ: ผู้ใช้รายอื่นในโฮสต์เดียวกันสามารถใช้เครื่องมือของระบบเช่นpsอ่านในกรณีนี้
Eugen Rieck

1
@EugenRieck -pโดยไม่มีข้อโต้แย้งขอให้ใส่รหัสผ่านในบรรทัดถัดไป
Bobby Jack

130

คุณสามารถรันคำสั่ง mysql ที่เขียนในไฟล์ข้อความโดยใช้คำสั่งต่อไปนี้:

mysql -u yourusername -p yourpassword yourdatabase < text_file

หากฐานข้อมูลของคุณยังไม่ได้สร้างให้ล็อกอินเข้าสู่ mysql ของคุณก่อนโดยใช้:

mysql -u yourusername -p yourpassword yourdatabase

แล้ว:

mysql>CREATE DATABASE a_new_database_name

แล้ว:

mysql -u yourusername -p yourpassword a_new_database_name < text_file

ที่ควรทำมัน!

ข้อมูลเพิ่มเติมที่นี่: http://dev.mysql.com/doc/refman/5.0/en/mysql-batch-commands.html


7
บน Windows: สำหรับรหัสผ่านฉันต้องใช้เครื่องหมายอัญประกาศและไม่มีที่ว่างเพื่อให้ทำงานได้ (รหัสผ่านนั้นไม่มีช่องว่างหรือตัวอักษรพิเศษ):mysql -u yourusername -p"yourpassword"
TmTron

1
หากคุณไม่ต้องการให้รหัสผ่านของคุณพร้อมท์ฉันเชื่อว่าวิธีการที่ระบุไว้ในที่นี้จะใช้งานได้: stackoverflow.com/questions/9293042/…
alex9311

58

ตัวเลือกที่ฉันชอบที่จะทำคือ:

 mysql --user="username" --database="databasename" --password="yourpassword" < "filepath"

ฉันใช้วิธีนี้เพราะเมื่อคุณร้อยสายด้วย "" คุณหลีกเลี่ยงเส้นทางที่ผิดและข้อผิดพลาดในช่องว่างและ - และอาจเป็นปัญหาของตัวอักษรที่ฉันไม่ได้พบเจอ


ด้วยความคิดเห็น @elcuco ฉันแนะนำให้ใช้คำสั่งนี้กับ [space] ก่อนเพื่อบอกให้ bash ละเว้นการบันทึกในประวัตินี่จะทำงานออกจากกล่องใน bash ส่วนใหญ่

ในกรณีที่มันยังบันทึกคำสั่งของคุณในประวัติศาสตร์โปรดดูวิธีแก้ไขปัญหาต่อไปนี้:

ดำเนินการคำสั่งโดยไม่เก็บไว้ในประวัติ


แก้ไขความปลอดภัยเป็นพิเศษ

ในกรณีที่คุณต้องการความปลอดภัยเป็นพิเศษคุณสามารถใช้คำสั่งต่อไปนี้และป้อนรหัสผ่านในอินพุตบรรทัดคำสั่ง:

mysql --user="username" --database="databasename" -p < "filepath"

18
ฉันจะไม่แนะนำให้ส่งรหัสผ่านไปยังบรรทัดคำสั่งเนื่องจากจะถูกบันทึกไว้ใน ~ / .bash_history และสามารถเข้าถึงได้โดยโปรแกรมอื่น ๆ trough / proc /
elcuco

คำแนะนำที่ยอดเยี่ยมจาก @elcuco! นอกจากนี้อาจใช้การตั้งค่าสถานะอื่นหลังจาก -p (หรือเป็นอาร์กิวเมนต์สุดท้าย) ดังนั้นพารามิเตอร์อื่น ๆ จะไม่ถูกใช้อย่างผิดพลาดเพื่อเป็นรหัสผ่านที่ตั้งใจไว้
davernator

โปรดทราบว่าผู้ใช้รายอื่นยังสามารถเห็นอาร์กิวเมนต์บรรทัดคำสั่งได้ ตัวอย่าง: สำหรับฉันใน / proc / * / cmdline; ทำเสียงก้อง $ i; แมว $ i; เสร็จแล้ว
elcuco

นี่ไม่ใช่การแนะนำเมื่อคุณเปิดเผยรหัสผ่านเซิร์ฟเวอร์ของคุณกับประวัติคอนโซล
Alexius DIAKOGIANNIS

@AlexiusDiakogiannis คุณสามารถยกตัวอย่างให้ฉันดูได้อย่างไรว่าคุณสามารถดูคำสั่งจากประวัติเมื่อคุณรันด้วย [space] หน้าคำสั่งได้อย่างไร
talsibony

56

คำตอบยอดนิยมทั้งหมดนั้นดี แต่ในกรณีที่มีคนต้องการเรียกใช้แบบสอบถามจากไฟล์ข้อความบนเซิร์ฟเวอร์ระยะไกลและบันทึกผลลัพธ์ไปยังไฟล์ (แทนที่จะแสดงบนคอนโซล) คุณสามารถทำได้:

mysql -u yourusername -p yourpassword yourdatabase < query_file > results_file

หวังว่านี่จะช่วยใครซักคน


10
ฉันคิดว่าไม่ควรมีช่องว่างระหว่าง-pและรหัสผ่าน
webNeat

หากวัตถุประสงค์ของการเขียนไปยังแฟ้มกำลังถ่ายโอนข้อมูลฉันเดาว่าSELECT ... INTO OUTFILE /path/to/file.csvเป็นวิธีที่มีประสิทธิภาพมากขึ้น ดูตัวเลือกและไวยากรณ์ที่นี่ - dev.mysql.com/doc/refman/5.7/en/select-into.html
Anis

20

ให้เส้นทางของไฟล์. sql เป็น:

source c:/dump/SQL/file_name.sql;

ดูในภาพ:


ขอบคุณตัน! สิ่งนี้ใช้ได้แม้ว่าผู้ใช้ของคุณจะไม่มีสิทธิ์ SUDO และในระยะไกล Amazon RDS
Volatil3

20

ฉันมาที่นี่เพื่อค้นหาคำตอบนี้ด้วยและนี่คือสิ่งที่ฉันพบว่าทำงานได้ดีที่สุดสำหรับฉัน: หมายเหตุฉันใช้ Ubuntu 16.xx

  1. เข้าถึง mysql โดยใช้:

mysql -u <your_user> - p

  1. ที่พรอมต์ mysql ให้ป้อน:

source file_name.sql

หวังว่านี่จะช่วยได้


2
แทนที่จะเปิดใช้พรอมต์มันอาจเป็นประโยชน์ที่จะรวมสองขั้นตอนเข้าด้วยกันในคำสั่งเดียว:mysql -u<user> -p -e 'source filename.sql'
Junix

ขอบคุณ @junix! แหล่งตัวเลือกใช้วิธีนี้คือสิ่งที่ผมกำลังมองหา
ManuelJE

14
mysql> source C:\Users\admin\Desktop\fn_Split.sql

อย่าระบุเครื่องหมายคำพูดเดี่ยว

หากคำสั่งดังกล่าวไม่ทำงานให้คัดลอกไฟล์ไปที่ c: drive แล้วลองอีกครั้ง ดังแสดงด้านล่าง

mysql> source C:\fn_Split.sql

13

ไม่มีวิธีปฏิบัติที่ดีในการส่งผ่านอาร์กิวเมนต์รหัสผ่านโดยตรงจากบรรทัดคำสั่งมันถูกบันทึกไว้ใน~/.bash_historyไฟล์และสามารถเข้าถึงได้จากแอปพลิเคชันอื่น

ใช้สิ่งนี้แทน:

mysql -u user --host host --port 9999 database_name < /scripts/script.sql -p
Enter password:


9

มีโอกาสมากที่คุณจะต้องเปลี่ยนเครื่องหมายทับ / แบล็กสแลช: จาก

 \home\sivakumar\Desktop\test.sql

ถึง

 /home/sivakumar/Desktop/test.sql

ดังนั้นคำสั่งจะเป็น:

source /home/sivakumar/Desktop/test.sql

6

ใช้ต่อไปนี้จากพรอมต์คำสั่ง mysql -

source \\home\\user\\Desktop\\test.sql;

ไม่ต้องใช้ใบเสนอราคา แม้ว่าเส้นทางจะมีช่องว่าง ('') ก็ไม่ต้องใช้อัญประกาศเลย


5

แทนที่จะเปลี่ยนเส้นทางฉันจะทำต่อไปนี้

mysql -h <hostname> -u <username> --password=<password> -D <database> -e 'source <path-to-sql-file>'

สิ่งนี้จะเรียกใช้ไฟล์พา ธ ไปยังไฟล์ sql


5

มีหลายวิธีที่จะทำ

From Workbench: File > Run SQL Script -- then follow prompts

From Windows Command Line:
   Option 1: mysql -u usr -p
             mysql> source file_path.sql
   Option 2: mysql -u usr -p '-e source file_path.sql'
   Option 3: mysql -u usr -p < file_path.sql
   Option 4: put multiple 'source' statements inside of file_path.sql (I do this to drop and recreate schemas/databases which requires multiple files to be run)
             mysql -u usr -p < file_path.sql

หากคุณได้รับข้อผิดพลาดจากบรรทัดคำสั่งตรวจสอบให้แน่ใจว่าคุณได้เรียกใช้ก่อนหน้านี้

cd {!!>>mysqld.exe home directory here<<!!}
mysqld.exe --initialize 

สิ่งนี้จะต้องถูกเรียกใช้จากภายในไดเรกทอรี mysqld.exe ดังนั้นซีดี

หวังว่านี่จะเป็นประโยชน์และไม่เพียง แต่ซ้ำซ้อน


3

เนื่องจากmysql -u yourusername -p yourpassword yourdatabase < text_fileไม่ได้ทำงานบนเซิร์ฟเวอร์ระยะไกล (EC2 ของ Amazon) ...

ตรวจสอบให้แน่ใจว่าสร้างฐานข้อมูลก่อน

แล้ว:

mysql --host=localhost --user=your_username --password=your_password your_database_name < pathTofilename.sql

3

สำหรับการอ้างอิงในอนาคตฉันได้พบสิ่งนี้เพื่อทำงานกับวิธีการดังกล่าวข้างต้นภายใต้ Windows ในคอนโซล msql ของคุณ:

MySQL >>source c://path_to_file//path_to_file//file_name.sql;

หากรูทไดรฟ์ของคุณไม่ได้ถูกเรียกว่า "c" ให้ทำการสับเปลี่ยนกับไดรฟ์ของคุณ ก่อนอื่นให้ลองแบ็กสแลชหากไม่ได้ผลให้ลองฟอร์เวิร์ดสแลช หากยังใช้งานไม่ได้ให้แน่ใจว่าคุณมีพา ธ ไฟล์แบบเต็มนามสกุล. sql ของชื่อไฟล์และหากเวอร์ชันของคุณยืนยันในเซมิโคลอนให้ตรวจสอบว่ามีและลองอีกครั้ง


0

ฉันพบข้อผิดพลาดนี้และลองทำตามคำแนะนำทั้งหมดที่ฉันจะได้รับ

ในที่สุดปัญหาคือว่าโฟลเดอร์ของฉันมีช่องว่างในชื่อโฟลเดอร์ที่ปรากฏเป็นเครื่องหมายทับหน้าในเส้นทางโฟลเดอร์เมื่อฉันพบและลบมันก็ทำงานได้ดี

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