Bagaimana cara menjalankan skrip SQL di MySQL?

409

Saya ingin menjalankan file teks yang berisi query SQL, di MySQL.

Saya mencoba menjalankan source /Desktop/test.sqldan menerima kesalahan:

mysql>. \ home \ sivakumar \ Desktop \ test.sql ERROR: Gagal membuka file '\ home \ sivakumar \ Desktop \ test.sql', kesalahan: 2

Adakah yang tahu kesalahan saya?

pengguna1160432
sumber
pada dasarnya saya pikir ini harus menjadi jawaban di sini: \. /home/sivakumar/Desktop/test.sql
talsibony

Jawaban:

434

Jika Anda berada di baris perintah MySQL mysql>Anda harus mendeklarasikan file SQL sebagai source.

mysql> source \home\user\Desktop\test.sql;
Thomas Edwards
sumber
29
Untuk mysql 5.6.10 di Mac, tidak ada tanda kutip tunggal diperlukan untuk path file.
RNA
3
untuk windows, menggunakan '/' bukannya '\' bekerja dengan benar untuk saya. Saya mendapat kesalahan saat saya awalnya menggunakan '/'. Inilah yang berhasil bagi saya ... sumber C: /Users/macombers/Downloads/midcoast_db.sql;
Zack Macomber
Jatuhkan tanda kutip di ubuntu juga (mysql Ver 14.14 debian-linux-gnu (x86_64) menggunakan EditLine wrapper)
Siddhartha
1
@ Kapil Relatif terhadap apa? Anda berada di dalam MySQL pada titik ini, jadi tidak ada kerabat saya takut.
Thomas Edwards
1
@Sarah Anda dapat menggunakan \ sebelum spasi, atau membungkus nama file dengan ".
Thomas Edwards
166

Anda memiliki cukup banyak opsi:

  • gunakan klien baris perintah MySQL: mysql -h hostname -u user database < path/to/test.sql
  • Instal alat MySQL GUI dan buka file SQL Anda, kemudian jalankan
  • Gunakan phpmysql jika database tersedia melalui server web Anda
Eugen Rieck
sumber
3
Bagaimana dengan kata sandi pengguna (opsi -p)?
Amir Katz
@AmirKatz Meskipun kata sandi dapat diberikan dengan -popsi, ini tidak disarankan: Pengguna lain pada host yang sama dapat menggunakan alat sistem seperti psmembacanya dalam kasus ini.
Eugen Rieck
1
@EugenRieck -ptanpa argumen meminta kata sandi untuk dimasukkan pada baris berikutnya
Bobby Jack
130

Anda dapat menjalankan pernyataan mysql yang telah ditulis dalam file teks menggunakan perintah berikut:

mysql -u yourusername -p yourpassword yourdatabase < text_file

jika database Anda belum dibuat, masuk ke mysql Anda terlebih dahulu menggunakan:

mysql -u yourusername -p yourpassword yourdatabase

kemudian:

mysql>CREATE DATABASE a_new_database_name

kemudian:

mysql -u yourusername -p yourpassword a_new_database_name < text_file

yang seharusnya melakukannya!

Info lebih lanjut di sini: http://dev.mysql.com/doc/refman/5.0/id/mysql-batch-commands.html

Paul Preibisch
sumber
7
pada Windows: untuk kata sandi saya harus menggunakan tanda kutip dan TIDAK ada ruang untuk membuatnya berfungsi (kata sandi itu sendiri tidak mengandung spasi atau karakter khusus):mysql -u yourusername -p"yourpassword"
TmTron
1
Jika Anda tidak ingin kata sandi Anda ada di prompt, saya yakin metode yang diuraikan di sini akan berfungsi: stackoverflow.com/questions/9293042/…
alex9311
59

Pilihan favorit saya untuk melakukan itu adalah:

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

Saya menggunakannya dengan cara ini karena ketika Anda merangkai dengan "" Anda menghindari jalan yang salah dan kesalahan dengan spasi dan - dan mungkin lebih banyak masalah dengan karakter yang tidak saya temui.


Dengan @elcuco komentar saya sarankan menggunakan perintah ini dengan [spasi] sebelum jadi memberitahu bash untuk mengabaikan menyimpannya dalam sejarah, ini akan bekerja di luar kotak di sebagian besar bash.

jika masih menyimpan perintah Anda dalam sejarah, silakan lihat solusi berikut:

Jalankan perintah tanpa menyimpannya dalam sejarah


edit keamanan ekstra

Untuk berjaga-jaga jika Anda ingin ekstra aman, Anda dapat menggunakan perintah berikut dan memasukkan kata sandi di input baris perintah:

mysql --user="username" --database="databasename" -p < "filepath"
taliboni
sumber
18
Saya tidak akan merekomendasikan meneruskan kata sandi ke baris perintah, karena akan disimpan dalam ~ / .bash_history, dan dapat diakses oleh program lain melalui / proc /.
elcuco
Saran bagus dari @elcuco! Juga, mungkin menggunakan flag lain setelah -p (atau menjadikannya arg terakhir) sehingga parameter lain tidak secara keliru dianggap sebagai kata sandi yang dimaksud.
davernator
Harap perhatikan bahwa, argumen baris perintah masih terlihat oleh pengguna lain. Contoh: untuk i in / proc / * / cmdline; lakukan echo $ i; kucing $ i; selesai
elcuco
Ini BUKAN kembali saat Anda mengekspos kata sandi server Anda ke sejarah konsol
Alexius DIAKOGIANNIS
@AlexiusDiakogiannis dapatkah Anda memberi saya contoh bagaimana Anda bisa melihat perintah dari sejarah ketika Anda menjalankannya dengan [spasi] sebelum perintah?
talsibony
56

Semua jawaban teratas itu baik. Tapi kalau-kalau seseorang ingin menjalankan kueri dari file teks pada server jauh DAN menyimpan hasil ke file (alih-alih ditampilkan di konsol), Anda dapat melakukan ini:

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

Semoga ini bisa membantu seseorang.

Bhushan
sumber
10
Saya pikir seharusnya tidak ada ruang di antara -pdan kata sandi
webNeat
Jika tujuan menulis ke file adalah mengambil data dump, saya kira SELECT ... INTO OUTFILE /path/to/file.csvcara yang lebih efisien. Lihat opsi dan sintaksis di sini - dev.mysql.com/doc/refman/5.7/en/select-into.html
Anis
20

Berikan path file .sql sebagai:

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

Lihat Di Gambar:

Shubham Verma
sumber
Terima kasih banyak! ini berfungsi bahkan jika pengguna Anda tidak memiliki hak SUDO dan pada Amazon RDS jarak jauh
Volatil3
20

Saya datang ke sini mencari jawaban ini juga, dan inilah yang saya temukan bekerja paling baik untuk saya: Catatan saya menggunakan Ubuntu 16.xx

  1. Akses mysql menggunakan:

mysql -u <your_user> - p

  1. Pada prompt mysql, masukkan:

source file_name.sql

Semoga ini membantu.

Zac Smith
sumber
2
Alih-alih meluncurkan prompt, bahkan mungkin berguna untuk hanya menggabungkan dua langkah dalam satu perintah:mysql -u<user> -p -e 'source filename.sql'
junix
Terima kasih, @ junix! The Sumber pilihan yang digunakan dengan cara ini adalah apa yang saya cari.
ManuelJE
14
mysql> source C:\Users\admin\Desktop\fn_Split.sql

Jangan menentukan kutipan tunggal.

Jika perintah di atas tidak berfungsi, salin file ke c: drive dan coba lagi. seperti yang ditunjukkan di bawah ini,

mysql> source C:\fn_Split.sql
Shankar Kalyankar
sumber
13

Tidak pernah merupakan praktik yang baik untuk meneruskan argumen kata sandi langsung dari baris perintah, itu disimpan dalam ~/.bash_historyfile dan dapat diakses dari aplikasi lain.

Gunakan ini sebagai gantinya:

mysql -u user --host host --port 9999 database_name < /scripts/script.sql -p
Enter password:
Jorge E. Hernández
sumber
10
mysql -uusername -ppassword database-name < file.sql
Мартин Петров
sumber
9

Sangat mungkin, Anda hanya perlu mengubah slash / blackslash: dari

 \home\sivakumar\Desktop\test.sql

untuk

 /home/sivakumar/Desktop/test.sql

Jadi perintahnya adalah:

source /home/sivakumar/Desktop/test.sql
Ben Lin
sumber
6

gunakan perintah berikut dari command prompt mysql -

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

Gunakan tanpa kutip. Bahkan jika path berisi spasi (''), jangan gunakan kutipan sama sekali .

Rajesh Paul
sumber
5

alih-alih pengalihan saya akan melakukan hal berikut

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

Ini akan mengeksekusi file path-to-sql-file

DataGuru
sumber
5

Begitu banyak cara untuk melakukannya.

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

Jika Anda mendapatkan kesalahan dari baris perintah, pastikan Anda sudah menjalankan sebelumnya

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

Ini harus dijalankan dari dalam direktori mysqld.exe, maka dari itu CD.

Semoga ini bermanfaat dan tidak hanya berlebihan.

DonkeyKong
sumber
3

Sejak mysql -u yourusername -p yourpassword yourdatabase < text_file tidak berfungsi pada server jarak jauh (Amazon EC2) ...

Pastikan bahwa Database dibuat terlebih dahulu.

Kemudian:

mysql --host=localhost --user=your_username --password=your_password your_database_name < pathTofilename.sql
Damir Olejar
sumber
3

Untuk referensi di masa mendatang, saya telah menemukan ini berfungsi vs metode yang disebutkan di bawah, di Windows di konsol msql Anda:

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

Jika root drive Anda tidak disebut "c" maka hanya pertukaran dengan apa yang disebut drive Anda. Pertama coba backslash, jika tidak berhasil, coba tebas ke depan. Jika mereka juga tidak berfungsi, pastikan Anda memiliki jalur file lengkap, ekstensi .sql pada nama file, dan jika versi Anda bersikeras dengan semi-titik dua, pastikan ada di sana dan coba lagi.

Chad Mx
sumber
0

Saya memiliki kesalahan ini, dan mencoba semua saran yang saya dapat tetapi tidak berhasil.

Akhirnya, masalahnya adalah folder saya memiliki ruang dalam nama folder yang muncul sebagai garis miring di path folder, setelah saya menemukan dan menghapusnya, itu berfungsi dengan baik.

pengguna3753416
sumber