MySQL'de SQL betiği nasıl çalıştırılır?


409

MySQL'de SQL sorguları içeren bir metin dosyası yürütmek istiyorum.

Çalıştırmayı denedim source /Desktop/test.sqlve hatayı aldım :

mysql>. \ home \ sivakumar \ Desktop \ test.sql HATA: '\ home \ sivakumar \ Desktop \ test.sql' dosyası açılamadı, hata: 2

Neyi yanlış yaptığım hakkında bir fikrin var mı?



temelde bu sorunun cevabı olduğunu düşünüyorum: \. /home/sivakumar/Desktop/test.sql
talsibony

Yanıtlar:


433

MySQL komut satırındaysanız mysql>, SQL dosyasını olarak bildirmeniz gerekir source.

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

29
Mac'teki mysql 5.6.10 için, dosya yolu için tek tırnak gerekmez.
RNA

3
Windows için, '\' yerine '/' kullanmak benim için doğru çalıştı. Başlangıçta '/' kullandığımda hatalar aldım. Bu benim için işe yaradı ... kaynak C: /Users/macombers/Downloads/midcoast_db.sql;
Zack Macomber

Tırnakları ubuntu'ya da bırakın (mysql Ver 14.14 debian-linux-gnu (x86_64) EditLine wrapper kullanarak)
Siddhartha

1
@kapil Neye göre? Bu noktada MySQL'in içindesiniz, bu yüzden korkarım akraba yok.
Thomas Edwards

1
@Sarah Boşluktan \ önce kullanabilir veya dosya adını ile sarabilirsiniz ".
Thomas Edwards

165

Çok fazla seçeneğiniz var:

  • MySQL komut satırı istemcisini kullanın: mysql -h hostname -u user database < path/to/test.sql
  • MySQL GUI araçlarını yükleyin ve SQL dosyanızı açın, ardından yürütün
  • Veritabanı web sunucunuz üzerinden kullanılabilirse phpmysql kullanın

3
Kullanıcının şifresi ne olacak (-p seçeneği)?
Amir Katz

@AmirKatz Parola -pseçenekle birlikte verilebilirken , bu önerilmez: Aynı ana bilgisayardaki diğer kullanıcılar psbu durumda okumak gibi sistem araçlarını kullanabilir .
Eugen Rieck

1
@EugenRieck -pbağımsız değişken olmadan bir sonraki satıra şifre girilmesini ister
Bobby Jack

130

bir metin dosyasına yazılan mysql deyimlerini aşağıdaki komutu kullanarak yürütebilirsiniz:

mysql -u yourusername -p yourpassword yourdatabase < text_file

veritabanınız henüz oluşturulmadıysa, önce şunu kullanarak mysql'nize giriş yapın:

mysql -u yourusername -p yourpassword yourdatabase

sonra:

mysql>CREATE DATABASE a_new_database_name

sonra:

mysql -u yourusername -p yourpassword a_new_database_name < text_file

bunu yapmalı!

Daha fazla bilgi için: http://dev.mysql.com/doc/refman/5.0/en/mysql-batch-commands.html


7
Windows'da: şifre için tırnak işareti ve çalışmak için boşluk kullanmam gerekiyordu (şifrenin kendisi boşluk veya özel karakter içermiyordu):mysql -u yourusername -p"yourpassword"
TmTron

1
Parolanızın istemde bulunmasını istemiyorsanız, burada özetlenen yöntemin işe yarayacağına inanıyorum: stackoverflow.com/questions/9293042/…
alex9311

59

Bunu yapmak için en sevdiğim seçenek:

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

Bu şekilde kullanıyorum çünkü "" ile bağladığınızda boşluklarla yanlış yollardan ve hatalardan kaçınıyorsunuz - ve muhtemelen karşılaşmadığım karakterlerle ilgili daha fazla problem.


@Elcuco yorumu ile bu komutu daha önce [space] ile kullanmanızı öneririm, bu yüzden bash'a geçmişte kaydetmeyi görmezden gelmesini söyler, bu çoğu bash'da kutudan çıkar.

komutunuzu geçmişte saklaması durumunda lütfen aşağıdaki çözümleri inceleyin:

Komutu geçmişte tutmadan yürütün


ekstra güvenlik düzenlemesi

Ekstra güvende olmak istiyorsanız, aşağıdaki komutu kullanabilir ve komut satırı girişine şifreyi girebilirsiniz:

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

18
Ben ~ / .bash_history kaydedilecek ve / proc / yalak diğer programlar tarafından erişilebilir gibi, komut satırına parola geçirilmesini tavsiye etmem.
elcuco

@Elcuco mükemmel tavsiye! Ayrıca, muhtemelen -p'den sonra başka bir bayrak kullanın (veya son argümanı kullanın), bu nedenle başka bir parametre yanlışlıkla istenen şifre olarak alınmaz.
Davernator

Lütfen komut satırı argümanlarının hala diğer kullanıcılar tarafından görülebildiğini unutmayın. Örnek: / proc / * / cmdline'da i için; echo $ i yap; cat $ i; tamamlandı
elcuco

Sunucu parolanızı konsolun geçmişine gösterdiğiniz için bu bir tavsiye DEĞİLDİR
Alexius DIAKOGIANNIS

@AlexiusDiakogiannis bana örnek verebilir misiniz? Komuttan önce [boşluk] ile yürüttüğünüzde komutu tarihe göre nasıl görüntüleyebilirsiniz?
talsibony

56

En iyi cevaplar iyi. Ancak, birinin sorguyu uzak sunucudaki bir metin dosyasından çalıştırmak VE sonuçları bir dosyaya (konsolda göstermek yerine) kaydetmek istemesi durumunda şunları yapabilirsiniz:

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

Umarım bu birine yardımcı olur.


10
Sanırım -pve şifre arasında boşluk olmamalı
webNeat

Dosyaya yazmanın amacı veri dökümü alıyorsa, sanırım SELECT ... INTO OUTFILE /path/to/file.csvdaha etkili bir yol. Seçenekleri ve sözdizimini buradan görebilirsiniz - dev.mysql.com/doc/refman/5.7/en/select-into.html
Anis

20

.Sql dosyasının yolunu şu şekilde verin:

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

Resimde Gör:


Bir ton teşekkürler! Bu, kullanıcı SUDO haklarına sahip olmasa ve uzak Amazon RDS'de olsa bile çalışır
Volatil3

20

Bu yanıtı da aramaya geldim ve işte bulduğum şey benim için en iyisi: Not Ubuntu 16.xx kullanıyorum

  1. Mysql'e aşağıdakileri kullanarak erişin:

mysql -u <your_user> - p

  1. Mysql komut istemine şunu girin:

source file_name.sql

Bu yardımcı olur umarım.


2
İstemi başlatmak yerine, iki adımı tek bir komutta birleştirmek bile yararlı olabilir:mysql -u<user> -p -e 'source filename.sql'
18:33

Teşekkürler @junix! Kaynak bu şekilde kullanılan seçenek aradığım şeydir.
ManuelJE

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

Tek tırnak belirtmeyin.

Yukarıdaki komut çalışmıyorsa, dosyayı c: sürücüsüne kopyalayın ve tekrar deneyin. Aşağıda gösterildiği gibi,

mysql> source C:\fn_Split.sql

13

Parola bağımsız değişkenini doğrudan komut satırından geçirmek iyi bir uygulamadır, ~/.bash_history dosyaya ve diğer uygulamalardan erişilebilir.

Bunun yerine şunu kullanın:

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


9

Büyük olasılıkla, eğik çizgiyi / kara eğik çizgiyi değiştirmeniz yeterlidir:

 \home\sivakumar\Desktop\test.sql

için

 /home/sivakumar/Desktop/test.sql

Yani komut şöyle olur:

source /home/sivakumar/Desktop/test.sql

6

mysql komut isteminden aşağıdakileri kullanın -

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

Tırnak kullanmayın. Yolda boşluk ('') olsa bile hiç tırnak kullanmayın .


5

yönlendirme yerine aşağıdakileri yaparım

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

Bu işlem, sql dosya yolunu yürütür


5

Bunu yapmanın pek çok yolu var.

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

Komut satırından hata alırsanız, daha önce çalıştırdığınızdan emin olun.

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

Bu, mysqld.exe dizininden, dolayısıyla CD'den çalıştırılmalıdır.

Umarım bu yardımcı olur ve sadece gereksiz değildir.


3

Yana mysql -u yourusername -p yourpassword yourdatabase < text_filebir uzak sunucu (Amazon'un EC2) işe yaramadı ...

Önce Veritabanının oluşturulduğundan emin olun.

Sonra:

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

3

Gelecekte başvurmak için, bunu msql konsolunuzda Windows altında, yukarıda belirtilen yöntemlerle çalışmak için buldum:

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

Kök sürücünüz "c" olarak adlandırılmazsa, sürücünüzün adı ile değiştirin. İlk önce ters eğik çizgileri deneyin, eğer işe yaramazlarsa, eğik çizgiyi deneyin. Ayrıca çalışmazlarsa, tam dosya yolunuzu, dosya adındaki .sql uzantısını kullandığınızdan emin olun ve sürümünüz noktalı virgüllerde ısrar ediyorsa, orada olduğundan emin olun ve tekrar deneyin.


0

Bu hatayı vardı ve boşuna alabilirsiniz tüm tavsiyeler çalıştı.

Son olarak, sorun benim klasör klasör klasöründe bir eğik çizgi olarak görünen klasör adında bir boşluk vardı, bir kez buldum ve kaldırıldı, iyi çalıştı.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.