Bagaimana cara mengimpor file SQL menggunakan baris perintah di MySQL?

2036

Saya punya .sqlfile dengan ekspor dari phpMyAdmin. Saya ingin mengimpornya ke server yang berbeda menggunakan baris perintah.

Saya memiliki instalasi Windows Server 2008 R2. Saya menempatkan .sqlfile pada drive C , dan saya mencoba perintah ini

database_name < file.sql

Ini tidak bekerja. Saya mendapatkan kesalahan sintaksis.

  • Bagaimana saya bisa mengimpor file ini tanpa masalah?
  • Apakah saya perlu membuat database terlebih dahulu?
Jaylen
sumber
7
kemungkinan duplikat Pulihkan File Dump MYSQL dengan Command Line
Bill Karwin
2
kemungkinan duplikat stackoverflow.com/questions/11407349/…
AZinkey
8
Apa dengan orang-orang duplikat ini? Ini memang pertanyaan yang sangat membantu dengan tujuannya sendiri
Valentino Pereira
@ValentinoPereira Anda sudah memeriksa tanggal pertanyaan asli sebelum menentukan orang duplikat
AZinkey
Bisakah Anda membagikan contoh yang dapat direproduksi? database < file.sqltidak terlihat seperti perintah untuk saya, dan jika Anda melihat beberapa kesalahan sintaksis, silakan bagikan
Nico Haase

Jawaban:

3775

Mencoba:

mysql -u username -p database_name < file.sql

Periksa Opsi MySQL .

Catatan-1: Lebih baik menggunakan path lengkap file SQL file.sql.

Catatan-2: Gunakan -Rdan --triggersuntuk menjaga rutinitas dan pemicu basis data asli. Mereka tidak disalin secara default.

Catatan-3 Anda mungkin harus membuat database (kosong) dari mysql jika belum ada dan SQL yang diekspor tidak mengandung CREATE DATABASE(diekspor dengan --no-create-dbatau -nopsi), sebelum Anda dapat mengimpornya.

bansi
sumber
2
Ketika saya menjalankan file dari program seperti Toad saya tidak mendapatkan kesalahan tetapi ketika saya menjalankannya dari baris perintah saya mendapatkan kesalahan yang saya sebutkan
Jaylen
110
Perhatikan bahwa ya, Anda harus membuat database (kosong) dari mysql jika belum ada, sebelum Anda dapat mengimpornya.
Skippy le Grand Gourou
17
Yups, ingatlah untuk membuat Database kosong (jika db sebelumnya tidak ada), dari konsol MySQL seperti:CREATE DATABASE db-name;
Qasim
3
Pastikan untuk memeriksa bahwa file cadangan tidak memiliki "gunakan 'original_db'" di dalamnya. Meskipun saya menentukan mengembalikan ke DB baru "mysql new_db <dump.sql", file dump sql memilikinya, dan itu menimpa DB langsung saya. Tidak yakin apakah ada opsi untuk memaksanya menggunakan DB yang ditentukan dan mengabaikan "use 'original_db'" dalam file sql
Shaakir
7
@ Jo, ya, jika Anda memiliki spasi antara '-p' dan 'kata sandi', ia berpikir bahwa 'kata sandi' adalah nama basis data. Atau, Anda dapat mengetik '-p' tanpa kata sandi dan Anda akan dimintai kata sandi saat menekan enter.
NotJay
765

Penggunaan mysqldump yang umum adalah untuk membuat cadangan seluruh database:

shell> mysqldump db_name > backup-file.sql

Anda dapat memuat file dump kembali ke server seperti ini:

UNIX

shell> mysql db_name < backup-file.sql

Hal yang sama pada prompt perintah Windows :

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

PowerShell

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

Baris perintah MySQL

mysql> use db_name;
mysql> source backup-file.sql;
vladkras
sumber
@ Mike Apakah Anda mencoba meluncurkannya di mysql>command line? Anda harus menggunakan shell sebagai gantinya.
vladkras
Bagaimana cara saya menggunakan Shell? Saya menggunakan mysql5.6 di windows Server 2008
Jaylen
Menggunakan Windows PowerShell mengetik MySQL db_name <file.sql Saya mendapatkan kesalahan berikut ini operator '<' dicadangkan terlebih dahulu
Jaylen
31
Hati-hati menggunakan> untuk mengarahkan output mysqldump ke file, terutama jika Anda ingin mengontrol encoding. Sebagai gantinya, Anda mungkin ingin menggunakan parameter --result-file sehingga pengkodean tidak dikontrol oleh shell / OS.
Bernard Chen
1
Benar, tapi ... kenapa tidak lari saja mysqldari Powershell?
Charles Wood
330

Mengenai waktu yang diperlukan untuk mengimpor file besar: yang paling penting, ini membutuhkan lebih banyak waktu karena pengaturan default MySQL autocommit = true. Anda harus mematikannya sebelum mengimpor file Anda dan kemudian memeriksa bagaimana impor bekerja seperti permata.

Anda hanya perlu melakukan hal berikut:

mysql> use db_name;

mysql> SET autocommit=0 ; source the_sql_file.sql ; COMMIT ;
Paresh Behede
sumber
5
Apakah ada cara untuk melakukan itu dalam satu baris perintah pada perintah mysql yang digunakan untuk impor?
Volomike
Jawaban terbaik. Itu adalah sourceperintah yang saya lupa. Sebagian besar dari kita ingin melakukan hal ini sementara kita sedang login sebagai perintah mandiri antara perintah lain, tidak login standar> inject> logout oneliner di atas google SERPs.
davidkonrad
19
Saya setuju bahwa ini adalah jawaban terbaik . The autocommit=0porsi membuat dunia perbedaan dalam hal kecepatan.
aexl
2
akankah autocommit=0akan bekerja pada file yang lebih besar? seperti file 8GB sql.
newbie
3
Tidak selalu perlu mematikan autocommit. Ada baiknya memeriksa dump database di editor, mungkin sudah dimulai dengan SET autocommit=0;.
hashchange
127

Di antara semua jawaban, untuk masalah di atas, ini adalah yang terbaik:

 mysql> use db_name;
 mysql> source file_name.sql;
Manoj Kumar
sumber
saran di atas gagal karena kesalahan bahwa db sudah ada tetapi ini tampaknya berhasil
luky
74

Kita dapat menggunakan perintah ini untuk mengimpor SQL dari baris perintah:

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

Misalnya, jika nama pengguna rootdan kata sandi password. Dan Anda memiliki nama basis data bankdan file SQL bank.sql. Kemudian, lakukan seperti ini:

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

Ingat di mana file SQL Anda. Jika file SQL Anda ada di Desktopfolder / direktori maka buka direktori desktop dan masukkan perintah seperti ini:

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

Dan jika Anda berada di Projectdirektori dan file SQL Anda ada di Desktopdirektori. Jika Anda ingin mengaksesnya dari Projectdirektori maka Anda dapat melakukannya seperti ini:

~/Project ? mysql -u root -p password bank < ~/Desktop/bank.sql
Amrit Dhungana
sumber
22
Seharusnya tidak ada ruang antara -pdanpassword
Ejaz
Jepang Ini tidak akan berhasil. Yang benar adalahmysql -u root -p"password" bank < bank.sql
Armin
4
mengapa Anda tidak bisa menjawab dalam satu baris? mysql -u username -ppassword db_name < file.sql
Naveed
6
sementara ini sama sekali tidak terkait dengan pertanyaan / jawaban ini, ketika Anda bekerja dengan database non-sepele, lebih suka TIDAK memasukkan kata sandi pada perintah yang sama dalam teks biasa. Tidak menentukan kata sandi sebagai bagian dari perintah akan meminta Anda untuk kata sandi yang dapat Anda masukkan dengan aman
asgs
3
Terutama karena.bash_history
Neil Chowdhury
64

Cara termudah untuk mengimpor ke skema Anda:

Login ke mysql dan berikan perintah menyebutkan di bawah ini.

mysql> use your_db_name;

mysql> source /opt/file.sql;
Ammad
sumber
5
Ini akan bekerja tanpa perintah 'use' untuk dump dengan multilpe db di dalamnya
Hayden Thring
1
Saya mencoba mengimpor dump dari database dengan nama yang berbeda tetapi dengan struktur yang sama, jawaban yang tepat yang dipilih oleh penulis tidak berfungsi, itu menciptakan database baru bernama setelah database dalam file dump. Jawaban di sini melakukan apa yang saya inginkan, terima kasih
kawan
1
Bagus! exaclty apa yang saya cari!
Sergei Zahharenko
2
ini juga memantau eksekusi skrip, jauh lebih baik daripada jawaban lainnya
refex
61

Jika Anda sudah memiliki database, gunakan yang berikut ini untuk mengimpor dumpatau sqlfile:

mysql -u username -p database_name < file.sql

jika Anda tidak, Anda perlu membuat database yang relevan (kosong) di MySQL, untuk itu pertama masuk ke MySQLkonsol dengan menjalankan perintah berikut di terminal atau di cmd

mysql -u userName -p;

Dan ketika diminta berikan kata sandi.

Selanjutnya, buat database dan gunakan:

mysql>create database yourDatabaseName;
mysql>use yourDatabaseName;

Kemudian impor sqlatau dumpfile ke database dari

mysql> source pathToYourSQLFile;

Catatan: jika terminal Anda tidak di lokasi di mana dumpatau sqlfile yang ada, gunakan path relatif di atas.

Kasun Siyambalapitiya
sumber
Jawaban Anda memiliki solusi dari bawah untuk pemula MySQL seperti saya: 1.Buat Basis Data, jika tidak ada. 2.Arahkan file sumber ke Database yang dibuat untuk mengimpor data / meta-data.
Sumanth Lazarus
60
  1. Buka baris perintah MySQL
  2. Ketikkan path direktori mysql bin Anda dan tekan Enter
  3. Rekatkan file SQL Anda di dalam binfolder server mysql.
  4. Buat database di MySQL.
  5. Gunakan database tertentu di mana Anda ingin mengimpor file SQL.
  6. Jenis source databasefilename.sqldanEnter
  7. Unggah file SQL Anda.
pengguna4412947
sumber
2
ype path direktori mysql bin Anda dan tekan
Ramesh Pareek
46

Solusi yang bekerja untuk saya adalah di bawah ini:

Use your_database_name;
SOURCE path_to_db_sql_file_on_your_local;
Syik
sumber
Ini bekerja untuk saya menggunakan MySQL Command Line Client, setelah menempatkan file sql saya di jendela / direktori yang tepat tampilan bin explorer. Terima kasih
klewis
3
Agak lambat tetapi tidak berhenti di antaranya dan tidak mengatakan bahwa server MySQL telah pergi.
Jaskaran Singh
39

Untuk membuang database ke file SQL gunakan perintah berikut.

mysqldump -u username -p database_name > database_name.sql

Untuk mengimpor file SQL ke dalam database (pastikan Anda berada di direktori yang sama dengan file SQL atau menyediakan path lengkap ke file), lakukan:

mysql -u username -p database_name < database_name.sql
Adeleke Akinade
sumber
37

Pergi ke direktori di mana Anda memiliki MySQL yang dapat dieksekusi. -uuntuk nama pengguna dan -puntuk meminta kata sandi:

C:\xampp\mysql\bin>mysql -u username -ppassword databasename < C:\file.sql
Tanmay Patel
sumber
5
Saya pikir akan lebih membantu untuk OP dan pertanyaan lebih lanjut, ketika Anda menambahkan beberapa penjelasan untuk kehebatan Anda.
Reporter
Itu akan bekerja hanya jika Anda memiliki mysql.exe didefinisikan dalam variabel lingkungan windows Anda. Jika tidak, Anda harus mengetikkan semua path ke file mysql.exe. Dan sintaks Anda salah. Misalnya: "d: \ wamp \ bin \ mysql \ mysql5.5.8 \ bin \ mysql.exe -u YOUR_USERNAME -p DB_NAME <FILENAME.SQL" Info selengkapnya di sini: wpy.me/en/blog/…
wappy
31

Saya pikir perlu disebutkan bahwa Anda juga dapat memuat file gzipped (terkompresi) dengan zcatseperti yang ditunjukkan di bawah ini:

zcat database_file.sql.gz | mysql -u username -p -h localhost database_name
Francesco Casula
sumber
28

Untuk mengimpor satu basis data, gunakan perintah berikut.

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

Untuk mengimpor beberapa dump database, gunakan perintah berikut.

mysql -u username -p password < dump.sql
Leopathu
sumber
20
mysql --user=[user] --password=[password] [database] < news_ml_all.sql
pengguna3546602
sumber
17

Untuk mengimpor beberapa file SQL sekaligus, gunakan ini:

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

Untuk mengimpor sederhana:

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

Untuk WAMP :

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

Untuk XAMPP:

C:\xampp\mysql\bin\mysql -u root -pPassword DataBase < data.sql
Abdul Rehman Janjua
sumber
16

Anda tidak perlu menentukan nama database pada baris perintah jika file .sql berisi CREATE DATABASE IF NOT EXISTS db_namedan USE db_namepernyataan.

Pastikan Anda terhubung dengan pengguna yang memiliki izin untuk membuat database, jika database yang disebutkan dalam file .sql tidak ada.

Ruben
sumber
14

Impor basis data

  1. Pergi ke drive:

    command: d:
  2. Login MySQL

    command: c:\xampp\mysql\bin\mysql -u root -p
  3. Ia akan meminta pwd. Masukkan:

    pwd
  4. Pilih basis data

    use DbName;
  5. Berikan nama file

    \.DbName.sql
Pritam Chaudhari
sumber
11

Pergi ke direktori tempat Anda memiliki MySQL.

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

Juga untuk membuang semua database, gunakan -all-databasesopsi, dan tidak ada nama database yang perlu ditentukan lagi.

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

Atau Anda dapat menggunakan beberapa klien GUI seperti SQLyog untuk melakukan ini.

Sathish D
sumber
11

Menggunakan:

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

Gunakan bantuan MySQL untuk detail - mysql --help.

Saya pikir ini akan menjadi opsi yang berguna dalam konteks kita:

[~]$ 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.

Apa yang menyenangkan, jika kita mengimpor basis data besar dan tidak memiliki bilah kemajuan. Gunakan Pipe Viewer dan lihat transfer data melalui pipa

Untuk Mac, brew install pv

Untuk Debian / Ubuntu apt-get install pv,.

Untuk yang lain, lihat pv - Pipe Viewer

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
Siva Praveen
sumber
Untuk Centos:yum install pv
Jonny
10

Tambahkan --forceopsi :

mysql -u username -p database_name --force < file.sql
ktaria
sumber
9

Sementara sebagian besar jawaban di sini hanya menyebutkan perintah sederhana

mysql -u database_user -p [db_name] <database_file.sql

hari ini cukup umum bahwa database dan tabel memiliki collation utf8 di mana perintah ini tidak cukup. Memiliki collation utf8 di tabel yang diekspor itu diperlukan untuk menggunakan perintah ini:

mysql -u database_user -p --default-character-set = utf8 [db_name] <database_file.sql

Surley ini bekerja untuk rangkaian karakter lain juga, cara menunjukkan notasi yang tepat dapat dilihat di sini:

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

Satu komentar juga menyebutkan bahwa jika sebuah database tidak pernah ada, sebuah database kosong harus dibuat terlebih dahulu. Ini mungkin benar dalam beberapa kasus, tetapi tergantung pada file ekspor. Jika file yang diekspor termasuk sudah perintah untuk membuat database maka database tidak harus dibuat dalam langkah terpisah, yang bahkan dapat menyebabkan kesalahan pada impor. Jadi pada impor disarankan untuk melihat terlebih dahulu di file untuk mengetahui perintah mana yang termasuk di sana, pada ekspor disarankan untuk mencatat pengaturan, terutama jika file tersebut sangat besar dan sulit dibaca di editor.

Masih ada lebih banyak parameter untuk perintah yang terdaftar dan dijelaskan di sini:

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

Jika Anda menggunakan versi database lain, pertimbangkan untuk mencari versi manual yang sesuai juga. Tautan yang disebutkan merujuk ke MySQL versi 5.7.

David
sumber
9

Untuk mengekspor database:

mysqldump -u username -p database_name > file.sql

Untuk mengimpor basis data:

mysql -u username -p database_name < file.sql
pengguna777388
sumber
8

Perintah berikut ini berfungsi untuk saya dari baris perintah (cmd) pada Windows 7 di WAMP .

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

Saya pikir ini bisa bermanfaat bagi mereka yang menggunakan Mac OS X :

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

Ganti xamppdengan mampatau server web lainnya.

Giri
sumber
6

Terkadang port yang ditentukan serta alamat IP server dari basis data itu juga penting ...

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

Impor ke dalam basis data:

mysql -u username -p database_name </ file path / file_name.sql

Ekspor dari database:

mysqldump -u username -p database_name> / path file / file_name.sql

Setelah perintah ini, sebuah prompt akan menanyakan kata sandi MySQL Anda.

NeeruKSingh
sumber
5

Untuk tujuan pencadangan, buat file BAT dan jalankan file BAT ini menggunakan Penjadwal Tugas . Ini akan mengambil cadangan dari basis data; cukup salin baris berikut dan rekatkan di Notepad lalu simpan file .bat, dan jalankan di sistem Anda.

@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
pengguna3728517
sumber
5

Langkah-langkah berikut membantu mengunggah file.sqlke database MySQL.

Langkah 1: Upload file.sql.zipke direktori manapun dan unzip ada
Catatan : sudo apt-get install unzip : sudo apt-get unzip file.sql.zip
Langkah 2: Sekarang navigasi ke direktori tersebut. Contoh:cd /var/www/html

Langkah 3: mysql -u username -p database-name < file.sql
Masukkan kata sandi dan tunggu sampai pengunggahan selesai.

Ramesh Sinha
sumber
5

Saya terus mengalami masalah di mana database tidak dibuat.

Saya memperbaikinya seperti ini

mysql -u root -e "CREATE DATABASE db_name"
mysql db_name --force < import_script.sql
David Silva Smith
sumber