Làm thế nào để chạy tập lệnh SQL trong MySQL?


409

Tôi muốn thực thi một tệp văn bản chứa các truy vấn SQL, trong MySQL.

Tôi đã cố chạy source /Desktop/test.sqlvà nhận được lỗi:

mys>. \ home \ sivakumar \ Desktop \ test.sql LRI: Không thể mở tệp '\ home \ sivakumar \ Desktop \ test.sql', lỗi: 2

Bất cứ ý tưởng về những gì tôi đang làm sai?



về cơ bản tôi nghĩ rằng đây sẽ là câu trả lời ở đây: \. /home/sivakumar/Desktop/test.sql
talsibony

Câu trả lời:


433

Nếu bạn đang ở dòng lệnh MySQL, mysql>bạn phải khai báo tệp SQL là source.

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

29
Đối với mysql 5.6.10 trên Mac, không cần trích dẫn đơn cho đường dẫn tệp.
RNA

3
đối với cửa sổ, sử dụng '/' thay vì '\' hoạt động chính xác với tôi. Tôi đã gặp lỗi khi ban đầu tôi sử dụng '/'. Đây là những gì làm việc cho tôi ... nguồn C: /Users/macombers/Doads/midcoast_db.sql;
Zack Macomber

Cũng bỏ các trích dẫn trên ubfox (mysql Ver 14,14 debian-linux-gnu (x86_64) bằng cách sử dụng trình bao bọc EditLine)
Siddhartha

1
@kapil Liên quan đến cái gì? Bạn đang ở trong MySQL vào thời điểm này, vì vậy tôi không sợ người thân.
Thomas Edwards

1
@Sarah Bạn có thể sử dụng \ trước khoảng trắng hoặc bọc tên tệp bằng ".
Thomas Edwards

165

Bạn có khá nhiều lựa chọn:

  • sử dụng máy khách dòng lệnh MySQL: mysql -h hostname -u user database < path/to/test.sql
  • Cài đặt các công cụ GUI của MySQL và mở tệp SQL của bạn, sau đó thực hiện nó
  • Sử dụng phpmysql nếu cơ sở dữ liệu có sẵn thông qua máy chủ web của bạn

3
Còn mật khẩu của người dùng (tùy chọn -p) thì sao?
Amir Katz

@AmirKatz Mặc dù mật khẩu có thể được cung cấp với -ptùy chọn, nhưng điều này không được khuyến nghị: Những người dùng khác trên cùng một máy chủ có thể sử dụng các công cụ hệ thống như psđể đọc nó trong trường hợp này.
Eugen Rieck

1
@EugenRieck -pkhông có đối số nhắc nhập mật khẩu trên dòng tiếp theo
Bobby Jack

130

bạn có thể thực thi các câu lệnh mysql đã được ghi trong tệp văn bản bằng lệnh sau:

mysql -u yourusername -p yourpassword yourdatabase < text_file

nếu yourdatabase chưa được tạo, trước tiên hãy đăng nhập vào mysql của bạn bằng cách sử dụng:

mysql -u yourusername -p yourpassword yourdatabase

sau đó:

mysql>CREATE DATABASE a_new_database_name

sau đó:

mysql -u yourusername -p yourpassword a_new_database_name < text_file

nên làm vậy!

Thêm thông tin ở đây: http://dev.mysql.com/doc/refman/5.0/en/mysql-batch-commands.html


7
trên Windows: đối với mật khẩu, tôi đã phải sử dụng dấu ngoặc kép và KHÔNG có khoảng trắng để làm cho nó hoạt động (bản thân mật khẩu không chứa bất kỳ dấu cách hoặc ký tự đặc biệt nào):mysql -u yourusername -p"yourpassword"
TmTron

1
Nếu bạn không muốn mật khẩu của mình được nhắc, tôi tin rằng phương pháp được nêu ở đây sẽ hoạt động: stackoverflow.com/questions/9293042/ chủ
alex9311

59

Tùy chọn yêu thích của tôi để làm điều đó sẽ là:

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

Tôi sử dụng nó theo cách này bởi vì khi bạn xâu chuỗi nó bằng "" bạn đã tránh sai đường dẫn và sai lầm với khoảng trắng và - và có lẽ nhiều vấn đề hơn với ký tự mà tôi không gặp phải.


Với nhận xét @elcuco, tôi khuyên bạn nên sử dụng lệnh này với [dấu cách] trước để nó báo bash bỏ qua việc lưu nó trong lịch sử, điều này sẽ hoạt động tốt trong hầu hết các bash.

trong trường hợp nó vẫn lưu lệnh của bạn trong lịch sử, vui lòng xem các giải pháp sau:

Thực thi lệnh mà không giữ nó trong lịch sử


chỉnh sửa bảo mật bổ sung

Chỉ trong trường hợp bạn muốn an toàn hơn, bạn có thể sử dụng lệnh sau và nhập mật khẩu vào đầu vào dòng lệnh:

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

18
Tôi không khuyên bạn nên chuyển mật khẩu vào dòng lệnh, vì nó sẽ được lưu trong ~ / .bash_history và có thể được truy cập bởi các chương trình khác máng / Proc /.
elcuco

Lời khuyên tuyệt vời từ @elcuco! Ngoài ra, có thể sử dụng một cờ khác sau -p (hoặc có thể là đối số cuối cùng) để tham số khác không bị lấy nhầm thành mật khẩu dự định.
davernator

Xin lưu ý rằng, các đối số dòng lệnh vẫn được hiển thị bởi những người dùng khác. Ví dụ: cho i trong / Proc / * / cmdline; làm vang $ i; mèo $ i; xong
elcuco

Đây không phải là khuyến nghị khi bạn tiết lộ mật khẩu máy chủ của mình vào lịch sử của giao diện điều khiển
Alexius DIAKOGIANNIS

@AlexiusDiakogianni bạn có thể cho tôi ví dụ làm thế nào bạn có thể xem lệnh từ lịch sử khi bạn thực hiện nó với [dấu cách] trước lệnh?
talsibony

56

Tất cả các câu trả lời hàng đầu là tốt. Nhưng chỉ trong trường hợp ai đó muốn chạy truy vấn từ tệp văn bản trên máy chủ từ xa lưu kết quả vào tệp (thay vì hiển thị trên bảng điều khiển), bạn có thể thực hiện việc này:

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

Hy vọng điều này sẽ giúp được ai đó.


10
Tôi nghĩ rằng không nên có khoảng trống giữa -pvà mật khẩu
webNeat

Nếu mục đích của việc ghi vào tệp là lấy dữ liệu, tôi đoán SELECT ... INTO OUTFILE /path/to/file.csvlà cách hiệu quả hơn. Xem các tùy chọn và cú pháp tại đây - dev.mysql.com/doc/refman/5.7/en/select-into.html
Anis

20

Đưa ra đường dẫn của tệp .sql là:

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

Xem trong hình ảnh:


Cảm ơn rất nhiều! điều này hoạt động ngay cả khi người dùng của bạn không có quyền SUDO và trên Amazon RDS từ xa
Volatil3

20

Tôi cũng đến đây để tìm kiếm câu trả lời này và đây là những gì tôi thấy phù hợp nhất với tôi: Lưu ý Tôi đang sử dụng Ubuntu 16.xx

  1. Truy cập mysql bằng cách sử dụng:

mysql -u <your_user> - p

  1. Tại dấu nhắc mysql, nhập:

source file_name.sql

Hi vọng điêu nay co ich.


2
Thay vì khởi chạy lời nhắc, thậm chí có thể hữu ích khi chỉ kết hợp hai bước trong một lệnh duy nhất:mysql -u<user> -p -e 'source filename.sql'
Junix

Cảm ơn, @ Quânix! Các nguồn tùy chọn sử dụng theo cách này là những gì tôi đang tìm kiếm.
ManuelJE

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

Không chỉ định dấu ngoặc đơn.

Nếu lệnh trên không hoạt động, sao chép tệp vào ổ đĩa c: và thử lại. như hình dưới đây,

mysql> source C:\fn_Split.sql

13

Không bao giờ là một thực hành tốt để truyền đối số mật khẩu trực tiếp từ dòng lệnh, nó được lưu trong ~/.bash_historytệp và có thể truy cập được từ các ứng dụng khác.

Sử dụng cái này thay thế:

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


9

Rất có thể, bạn chỉ cần thay đổi dấu gạch chéo / dấu gạch chéo: từ

 \home\sivakumar\Desktop\test.sql

đến

 /home/sivakumar/Desktop/test.sql

Vì vậy, lệnh sẽ là:

source /home/sivakumar/Desktop/test.sql

6

sử dụng như sau từ dấu nhắc lệnh mysql -

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

Sử dụng không có báo giá. Ngay cả khi đường dẫn chứa không gian (''), không sử dụng trích dẫn nào cả .


5

thay vì chuyển hướng tôi sẽ làm như sau

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

Điều này sẽ thực thi tệp đường dẫn đến tệp sql


5

Rất nhiều cách để làm điều đó.

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

Nếu bạn gặp lỗi từ dòng lệnh, hãy chắc chắn rằng bạn đã chạy trước đó

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

Điều này phải được chạy từ trong thư mục mysqld.exe, do đó là CD.

Hy vọng điều này là hữu ích và không chỉ là dư thừa.


3

mysql -u yourusername -p yourpassword yourdatabase < text_filekhông hoạt động trên máy chủ từ xa (EC2 của Amazon) ...

Hãy chắc chắn rằng Cơ sở dữ liệu được tạo trước.

Sau đó:

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

3

Để tham khảo trong tương lai, tôi đã thấy điều này hoạt động so với các phương pháp đã nói ở trên, trong Windows trong bảng điều khiển msql của bạn:

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

Nếu ổ đĩa gốc của bạn không được gọi là "c" thì chỉ cần trao đổi với những gì ổ đĩa của bạn được gọi. Trước tiên hãy thử dấu gạch chéo ngược, nếu chúng không hoạt động, hãy thử dấu gạch chéo về phía trước. Nếu chúng cũng không hoạt động, hãy đảm bảo bạn có đường dẫn tệp đầy đủ, phần mở rộng .sql trên tên tệp và nếu phiên bản của bạn nhấn mạnh vào dấu chấm phẩy, hãy đảm bảo nó ở đó và thử lại.


0

Tôi đã có lỗi này, và đã thử tất cả các lời khuyên tôi có thể không có kết quả.

Cuối cùng, vấn đề là thư mục của tôi có một khoảng trắng trong tên thư mục xuất hiện dưới dạng dấu gạch chéo trong đường dẫn thư mục, một khi tôi tìm thấy và xóa nó, nó hoạt động tốt.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.