MySQL'deki komut satırını kullanarak bir SQL dosyasını nasıl alabilirim?


2035

'Den .sqlbir dışa aktarma dosyam var phpMyAdmin. Komut satırını kullanarak farklı bir sunucuya aktarmak istiyorum.

Bir var Windows Server 2008 R2 kurulumunu. .sqlDosyayı C sürücüsüne yerleştirdim ve bu komutu denedim

database_name < file.sql

Çalışmıyor. Sözdizimi hataları alıyorum.

  • Bu dosyayı sorunsuz bir şekilde nasıl alabilirim?
  • Önce bir veritabanı oluşturmam gerekir mi?



7
Bu mükerrer adamlarla ne oluyor? Bu gerçekten de kendi amacı ile yardımcı bir soru
Valentino Pereira

@ValentinoPereira yinelenen çocuklar belirlemeden önce orijinal soru tarihlerini kontrol
ettiniz

Tekrarlanabilir bir örneği paylaşabilir misiniz? database < file.sqlbana herhangi bir komut gibi görünmüyor ve bazı sözdizimi hataları görüyorsanız lütfen bunları paylaşın
Nico Haase

Yanıtlar:


3773

Deneyin:

mysql -u username -p database_name < file.sql

MySQL Seçeneklerini kontrol edin .

Not-1: SQL dosyasının tam yolunu kullanmak daha iyidir file.sql.

Not-2: Orijinal veritabanının rutinlerini ve tetikleyicilerini korumak için -Rve tuşlarını kullanın --triggers. Varsayılan olarak kopyalanmazlar.

Not-3 Eğer zaten mevcut değilse ve dışa aktarılan SQL içermiyorsa CREATE DATABASE(dışa aktarma --no-create-dbveya -nseçenek) içermiyorsa, mysql'den (boş) veritabanı oluşturmanız gerekebilir .


2
Toad gibi bir programdan dosyayı çalıştırdığımda hata
almıyorum

110
Evet, içe aktarmadan önce mysql'den (boş) veritabanını oluşturmanız gerektiğini unutmayın.
Skippy le Grand Gourou

17
Evet, MySQL konsolundan şu şekilde boş bir Veritabanı (db önceden mevcut değilse) oluşturmayı unutmayın:CREATE DATABASE db-name;
Qasim

3
Yedekleme dosyasında "original_db 'kullan" olup olmadığını kontrol ettiğinizden emin olun. Her ne kadar yeni DB "mysql new_db <dump.sql" için geri yükleme belirtilen, sql dökümü dosya vardı ve benim canlı DB üzerine yazdı. Belirtilen DB kullanmaya zorlamak ve sql dosyasındaki "original_db 'kullan" dikkate almak için bir seçenek olup olmadığından emin değilim
Shaakir

7
@Joe, evet, '-p' ve 'şifre' arasında bir boşluk varsa, 'şifre'nin veritabanı adı olduğunu düşünüyor. Alternatif olarak, şifreniz olmadan '-p' yazabilir ve enter tuşuna bastığınızda bir şifre girmeniz istenir.
NotJay

765

MySQLdump'in yaygın kullanımı, tüm veritabanının yedeğini almak içindir:

shell> mysqldump db_name > backup-file.sql

Döküm dosyasını sunucuya şu şekilde yükleyebilirsiniz:

UNIX

shell> mysql db_name < backup-file.sql

Windows komut isteminde aynı :

mysql -p -u [user] [database] < backup-file.sql

Güç kalkanı

C:\> cmd.exe /c "mysql -u root -p db_name < backup-file.sql"

MySQL komut satırı

mysql> use db_name;
mysql> source backup-file.sql;

@Mike mysql>Komut satırında başlatmaya mı çalışıyorsunuz ? Bunun yerine kabuk kullanmalısınız.
vladkras

Shell'i nasıl kullanırım? Windows Server 2008'de mysql5.6 kullanıyorum
Jaylen

MySQL db_name <file.sql yazarak Windows PowerShell kullanarak '<' operatörü ayrılmış köknar gelecekteki kullanım
Jaylen

31
Özellikle kodlama üzerinde kontrol istiyorsanız, mysqldump çıktısını bir dosyaya yönlendirmek için> komutunu kullanmaya dikkat edin. Bunun yerine, muhtemelen --result-file parametresini kullanmak istersiniz, böylece kodlama kabuk / OS tarafından denetlenmez.
Bernard Chen

1
Doğru, ama ... neden sadece mysqldoğrudan Powershell'den kaçmıyorsun?
Charles Wood

329

Büyük dosyaların içe aktarılması için geçen süre ile ilgili olarak: en önemlisi, MySQL'in varsayılan ayarı olduğundan daha fazla zaman alır autocommit = true. Dosyanızı içe aktarmadan önce bunu ayarlamanız ve ardından içe aktarmanın mücevher gibi nasıl çalıştığını kontrol etmeniz gerekir.

Sadece aşağıdakileri yapmanız gerekir:

mysql> use db_name;

mysql> SET autocommit=0 ; source the_sql_file.sql ; COMMIT ;

5
Bunu içe aktarma için kullanılan mysql komutunda tek bir komut satırında yapmanın bir yolu var mı?
Volomike

En iyi cevap inho. O oldu sourceben unutmuş komut. Çoğumuz ederken bunu yapmak istiyor olan diğer komutlar arasında bağımsız komutu, standart giriş olarak giriş> iğne yapmak> çıkış oneliner google SERPs üst.
davidkonrad

19
Bunun en iyi cevap olduğuna katılıyorum . Bölüm autocommit=0, hız açısından bir dünya yarattı.
aexl

2
olacak autocommit=0büyük dosyalar üzerinde çalışacak? 8GB sql dosyası gibi.
acemi

3
Kapatmak her zaman gerekli değildir autocommit. Bir editördeki veritabanı dökümünü kontrol etmeye değer, zaten başlayabilir SET autocommit=0;.
hashchange

127

Tüm cevaplar arasında, yukarıdaki sorun için, bu en iyisi:

 mysql> use db_name;
 mysql> source file_name.sql;

Yukarıdaki tavsiye db zaten var hata başarısız oldu ama bu işe yarıyor gibi görünüyor
luky

74

SQL'i komut satırından içe aktarmak için bu komutu kullanabiliriz:

mysql -u username -p password db_name < file.sql

Örneğin, kullanıcı adı rootve parola ise password. Ve bir veritabanı adı var bankve SQL dosyası bank.sql. Sonra, sadece bunu yapın:

mysql -u root -p password bank < bank.sql

SQL dosyanızın nerede olduğunu unutmayın. SQL dosyanız Desktopklasörde / dizinde ise, masaüstü dizinine gidin ve şu şekilde komutu girin:

~ ? cd Desktop
~/Desktop ? mysql -u root -p password bank < bank.sql

Ve Projectdizinde iseniz ve SQL dosyanız Desktopdizinde ise. Eğer dizinden erişmek istiyorsanız o Projectzaman bunu yapabilirsiniz:

~/Project ? mysql -u root -p password bank < ~/Desktop/bank.sql

22
-pVepassword
Ejaz

Jap. Bu işe yaramaz. Doğru olurmysql -u root -p"password" bank < bank.sql
Armin

4
neden tek bir hatta cevap veremiyorsunuz? mysql -u username -ppassword db_name < file.sql
Naveed

6
bu soru / cevapla tamamen ilgisiz olsa da, önemsiz olmayan veritabanlarıyla çalışırken, aynı komutta parolayı düz metin olarak girmemeyi tercih edin. Parolanın komutun bir parçası olarak belirtilmemesi, güvenli bir şekilde girebileceğiniz bir parola girmenizi ister
14:17

3
Özellikle nedeniyle.bash_history
Neil Chowdhury

64

Şemanıza aktarmanın en kolay yolu:

MySQL'e giriş yapın ve aşağıdaki komutlardan bahsedin.

mysql> use your_db_name;

mysql> source /opt/file.sql;

5
Bu, içinde
Hayden Thring

1
Farklı bir ada sahip bir veritabanından bir döküm almaya çalışıyordum, ancak aynı yapıya sahip, yazarın aldığı doğru cevap işe yaramadı, döküm dosyasındaki veritabanından sonra yeni bir veritabanı oluşturdu. Bu cevap tam burada istediğimi yaptı, teşekkürler dostum
Wuelber Castillo

1
harika! exaclty ne aradığını!
Sergei Zahharenko

2
Bu aynı zamanda komut dosyası yürütme izler, diğer cevaplardan çok daha iyi
refex

61

Zaten veritabanınız varsa, dumpveya sqldosyayı almak için aşağıdakileri kullanın :

mysql -u username -p database_name < file.sql

MySQL'de ilgili veritabanını (boş) oluşturmanız gerekmiyorsa, bunun için önce MySQLterminalde veya cmd'de aşağıdaki komutu çalıştırarak konsola oturum açın

mysql -u userName -p;

İstendiğinde parolayı girin.

Ardından, bir veritabanı oluşturun ve kullanın:

mysql>create database yourDatabaseName;
mysql>use yourDatabaseName;

Ardından sqlveya dumpdosyayı veritabanından

mysql> source pathToYourSQLFile;

Not: terminaliniz dumpveya sqldosyanın bulunduğu konumda değilse, yukarıdaki göreli yolu kullanın.


Cevabınız benim gibi MySQL yeni başlayanlar için temel bir çözüme sahipti: 1.Eğer yoksa, Veritabanını oluşturun. 2.Verileri / meta verileri almak için kaynak dosyayı oluşturulan veritabanına yönlendirin.
Sumanth Lazarus

60
  1. MySQL komut satırını açın
  2. Mysql bin dizininizin yolunu yazın ve Enter
  3. SQL dosyanızı binmysql sunucusu klasörünün içine yapıştırın .
  4. MySQL'de bir veritabanı oluşturun.
  5. SQL dosyasını almak istediğiniz veritabanını kullanın.
  6. Tür source databasefilename.sqlveEnter
  7. SQL dosyanız başarıyla yüklendi.

2
mysql bin dizininizin yolunu seçin ve basın
Ramesh Pareek

46

Benim için çalışan bir çözüm aşağıdadır:

Use your_database_name;
SOURCE path_to_db_sql_file_on_your_local;

Bu benim sql dosya / bin dizin görünümü windows explorer yerleştirdikten sonra, MySQL komut satırı istemcisi kullanarak benim için çalıştı. Thanks
klewis

3
Biraz yavaş ama aralarında durmuyor ve MySQL sunucusunun gittiğini söylemiyor.
Jaskaran Singh

39

Bir veritabanını SQL dosyasına dökmek için aşağıdaki komutu kullanın.

mysqldump -u username -p database_name > database_name.sql

Bir SQL dosyasını veritabanına içe aktarmak için (SQL dosyasıyla aynı dizinde olduğunuzdan veya dosyanın tam yolunu sağladığınızdan emin olun), şunları yapın:

mysql -u username -p database_name < database_name.sql

37

MySQL yürütülebilir dosyasının bulunduğu dizine gidin. -ukullanıcı adı ve -pşifre sormak için:

C:\xampp\mysql\bin>mysql -u username -ppassword databasename < C:\file.sql

5
Ben niyetinize biraz açıklama eklemek OP ve daha fazla soru için daha yararlı olacağını düşünüyorum.
Muhabir

Bu yalnızca Windows ortam değişkenlerinizde tanımlanmış mysql.exe varsa çalışır. Değilse, mysql.exe dosyasının tüm yolunu yazmalısınız. Ve sentaksın yanlış. Örneğin: "d: \ wamp \ bin \ mysql \ mysql5.5.8 \ bin \ mysql.exe -u YOUR_USERNAME -p DB_NAME <FILENAME.SQL" Daha fazla bilgi için: wpy.me/en/blog/…
wappy

31

Ben de aşağıda gösterildiği gibi bir gzip (sıkıştırılmış) dosya yükleyebilirsiniz bahsetmeye değer olduğunu düşünüyorum zcat:

zcat database_file.sql.gz | mysql -u username -p -h localhost database_name

28

Tek bir veritabanını içe aktarmak için aşağıdaki komutu kullanın.

mysql -u username -p password dbname < dump.sql

Birden çok veritabanı dökümünü içe aktarmak için aşağıdaki komutu kullanın.

mysql -u username -p password < dump.sql

20
mysql --user=[user] --password=[password] [database] < news_ml_all.sql

17

Tek seferde birden fazla SQL dosyasını içe aktarmak için şunu kullanın:

# Unix-based solution
for i in *.sql;do mysql -u root -pPassword DataBase < $i;done

Basit içe aktarma için:

# Unix-based solution
mysql -u root -pPassword DataBase < data.sql

İçin WAMP :

#mysqlVersion replace with your own version
C:\wamp\bin\mysql\mysqlVersion\bin\mysql.exe -u root -pPassword DataBase < data.sql

XAMPP için:

C:\xampp\mysql\bin\mysql -u root -pPassword DataBase < data.sql

16

.Sql dosyası CREATE DATABASE IF NOT EXISTS db_nameve USE db_nameifadeleri içeriyorsa, komut satırında veritabanının adını belirtmeniz gerekmez .

.Sql dosyasında belirtilen veritabanı yoksa, veritabanı oluşturma izinlerine sahip bir kullanıcıyla bağlantı kurduğunuzdan emin olun.


14

Veritabanını içe aktarma

  1. Sürüşe gidin:

    command: d:
  2. MySQL girişi

    command: c:\xampp\mysql\bin\mysql -u root -p
  3. Pwd isteyecek. Girin:

    pwd
  4. Veritabanını seçin

    use DbName;
  5. Dosya adını girin

    \.DbName.sql

11

MySQL'in bulunduğu dizine gidin.

 c:\mysql\bin\> mysql -u username -p password database_name <
 filename.sql

Ayrıca tüm veritabanlarını dökmek için -all-databasesseçeneği kullanın ve artık veritabanlarının adının belirtilmesi gerekmez.

mysqldump -u username -ppassword all-databases > dump.sql

Veya bunu yapmak için SQLyog gibi bazı GUI istemcilerini kullanabilirsiniz.


11

kullanın:

mysql -u root -p password -D database_name << import.sql

Ayrıntılar için MySQL yardımını kullanın - mysql --help.

Bunların bağlamımızda faydalı seçenekler olacağını düşünüyorum:

[~]$ mysql --help
mysql  Ver 14.14 Distrib 5.7.20, for osx10.12 (x86_64) using  EditLine wrapper
Copyright (c) 2000, 2017, Oracle and/or its affiliates. All rights reserved.
Usage: mysql [OPTIONS] [database]
  -?, --help          Display this help and exit.
  -I, --help          Synonym for -?
  --bind-address=name IP address to bind to.
  -D, --database=name Database to use.
  --delimiter=name    Delimiter to be used.
  --default-character-set=name Set the default character set.
  -f, --force         Continue even if we get an SQL error.
  -p, --password[=name] Password to use when connecting to server.
  -h, --host=name     Connect to host.
  -P, --port=#        Port number to use for connection or 0 for default to, in order of preference, my.cnf, $MYSQL_TCP_PORT, /etc/services, built-in default (3306).
  --protocol=name     The protocol to use for connection (tcp, socket, pipe,
  -s, --silent        Be more silent. Print results with a tab as separator, each row on new line.
  -v, --verbose       Write more. (-v -v -v gives the table output format).
  -V, --version       Output version information and exit.
  -w, --wait          Wait and retry if connection is down.

Eğlenceli olan, eğer büyük bir veritabanını içe aktarıyor ve bir ilerleme çubuğuna sahip değilseniz. Boru Görüntüleyicisi'ni kullanın ve borudan veri aktarımını görün

Mac için, brew install pv

Debian / Ubuntu için apt-get install pv,.

Diğerleri için bkz. Pv - Boru Görüntüleyicisi

pv import.sql | mysql -u root -p password -D database_name

1.45GiB 1:50:07 [339.0KiB/s]   [=============>      ] 14% ETA 11:09:36
1.46GiB 1:50:14 [ 246KiB/s]     [=============>      ] 14% ETA 11:09:15
1.47GiB 1:53:00 [ 385KiB/s]     [=============>      ] 14% ETA 11:05:36

Centos için:yum install pv
Jonny


9

Buradaki cevapların çoğu basit komuttan bahsederken

mysql -u veritabanı_kullanıcı -p [db_name] <veritabanı_dosyası.sql

Günümüzde veritabanlarının ve tabloların bu komutun yeterli olmadığı yerlerde utf8-harmanlaması olması oldukça yaygındır. Dışa aktarılan tablolarda utf8-collation olması, bu komutu kullanmak için gereklidir:

mysql -u veritabanı_kullanıcı -p - varsayılan-karakter-set = utf8 [db_name] <veritabanı_dosyası.sql

Surley bu diğer karakter kümeleri için de işe yarıyor, doğru gösterimin nasıl gösterileceği burada görülebilir:

https://dev.mysql.com/doc/refman/5.7/en/show-collation.html

Bir yorumda, eğer bir veritabanı asla mevcut değilse, önce boş bir veritabanı oluşturulması gerektiğinden de bahsedilmiştir. Bu bazı durumlarda doğru olabilir, ancak dışa aktarma dosyasına bağlıdır. Dışa aktarılan dosya zaten veritabanını oluşturma komutunu içeriyorsa, veritabanının hiçbir zaman ayrı bir adımda oluşturulması gerekmez, bu da içe aktarmada hataya neden olabilir. Bu yüzden içe aktarma sırasında, orada hangi komutların dahil olduğunu bilmek için dosyaya bir göz atmanız önerilir, dışa aktarma sırasında, özellikle dosya çok büyük ve bir düzenleyicide okunması zorsa, ayarları not edin.

Komut için burada listelenen ve açıklanan daha fazla parametre var:

https://dev.mysql.com/doc/refman/5.7/en/mysql-command-options.html

Başka bir veritabanı sürümü kullanıyorsanız, kılavuzun ilgili sürümünü de aramayı düşünün. Sözü edilen bağlantılar MySQL sürüm 5.7 ile ilgilidir.


9

Bir veritabanını dışa aktarmak için:

mysqldump -u username -p database_name > file.sql

Bir veritabanını içe aktarmak için:

mysql -u username -p database_name < file.sql

8

Aşağıdaki komut benim için WAMP üzerinde Windows 7'deki komut satırından (cmd) çalışır .

d:/wamp/bin/mysql/mysql5.6.17/bin/mysql.exe -u root -p db_name < database.sql


7

Mac OS X kullananlar için yararlı olabileceğini düşündüm :

/Applications/xampp/xamppfiles/bin/mysql -u root -p database < database.sql

Değiştir xamppile mampya da diğer web sunucuları.


6

Bazen bu portun tanımlanan portu ve sunucu IP adresi de önemlidir ...

mysql -u user -p user -h <Server IP> -P<port> (DBNAME) < DB.sql 

6

Veritabanına aktar:

mysql -u kullanıcı adı -p veritabanı_adı </ dosya yolu / dosya_adı.sql

Veritabanından dışa aktar:

mysqldump -u kullanıcı adı -p veritabanı_adı> / dosya yolu / dosya_adı.sql

Bu komutlardan sonra, bir istem MySQL şifrenizi soracaktır.


5

Yedekleme amacıyla bir BAT dosyası oluşturun ve Görev Zamanlayıcısı'nı kullanarak bu BAT dosyasını çalıştırın . Veritabanının bir yedeğini alacaktır; sadece aşağıdaki satırı kopyalayıp Not Defteri'ne yapıştırın ve .bat dosyasını kaydedin ve sisteminizde çalıştırın.

@echo off
for /f "tokens=1" %%i in ('date /t') do set DATE_DOW=%%i
for /f "tokens=2" %%i in ('date /t') do set DATE_DAY=%%i
for /f %%i in ('echo %date_day:/=-%') do set DATE_DAY=%%i
for /f %%i in ('time /t') do set DATE_TIME=%%i
for /f %%i in ('echo %date_time::=-%') do set DATE_TIME=%%i

"C:\Program Files\MySQL\mysql server 5.5\bin\mysqldump" -u username -ppassword mysql>C:/%DATE_DAY%_%DATE_TIME%_database.sql

5

Aşağıdaki adımlar file.sqlMySQL veritabanına yüklenmeye yardımcı olur .

1. Adım: Yükleme file.sql.zipherhangi bir dizine ve orada unzip
Not : sudo apt-get install unzip : sudo apt-get unzip file.sql.zip
Adım 2: Şimdi gezinme o dizine. Misal:cd /var/www/html

3. Adım: mysql -u username -p database-name < file.sql
Parolayı girin ve yükleme tamamlanana kadar bekleyin.


5

Veritabanının oluşturulmadığı bir sorunla karşılaşmaya devam ettim.

Böyle sabitledim

mysql -u root -e "CREATE DATABASE db_name"
mysql db_name --force < import_script.sql
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.