Làm cách nào để nhập tệp SQL bằng dòng lệnh trong MySQL?


2035

Tôi có một .sqltập tin với một xuất từ phpMyAdmin. Tôi muốn nhập nó vào một máy chủ khác bằng dòng lệnh.

Tôi có cài đặt Windows Server 2008 R2. Tôi đã đặt .sqltập tin vào ổ C và tôi đã thử lệnh này

database_name < file.sql

Nó không làm việc. Tôi nhận được lỗi cú pháp.

  • Làm thế nào tôi có thể nhập tệp này mà không có vấn đề?
  • Tôi có cần tạo cơ sở dữ liệu trước không?


2
bản sao có thể có của stackoverflow.com/questions/11407349/
Mạnh

7
Có chuyện gì với những kẻ trùng lặp này? Đây thực sự là một câu hỏi hữu ích với mục đích riêng của nó
Valentino Pereira

@ValentinoPereira bạn đã kiểm tra ngày câu hỏi ban đầu trước khi xác định kẻ trùng lặp
AZinkey

Bạn có thể chia sẻ một ví dụ tái tạo? database < file.sqlkhông giống bất kỳ lệnh nào đối với tôi và nếu bạn thấy một số lỗi cú pháp, vui lòng chia sẻ chúng
Nico Haase

Câu trả lời:


3774

Thử:

mysql -u username -p database_name < file.sql

Kiểm tra tùy chọn MySQL .

Lưu ý-1: Tốt hơn là sử dụng đường dẫn đầy đủ của tệp SQL file.sql.

Lưu ý-2: Sử dụng -R--triggersđể giữ các thói quen và kích hoạt cơ sở dữ liệu gốc. Chúng không được sao chép theo mặc định.

Lưu ý-3 Bạn có thể phải tạo cơ sở dữ liệu (trống) từ mysql nếu nó chưa tồn tại và SQL đã xuất không chứa CREATE DATABASE(xuất với --no-create-dbhoặc -ntùy chọn), trước khi bạn có thể nhập nó.


2
Khi tôi chạy tệp từ một chương trình như Con cóc, tôi không gặp lỗi nhưng khi tôi chạy nó từ dòng lệnh tôi nhận được lỗi tôi đã đề cập
Jaylen

110
Lưu ý rằng có, bạn phải tạo cơ sở dữ liệu (trống) từ mysql nếu nó chưa tồn tại, trước khi bạn có thể nhập nó.
Skippy le Grand Gourou

17
Yups, hãy nhớ tạo một Cơ sở dữ liệu trống (nếu db không tồn tại trước đó), từ bảng điều khiển MySQL như sau:CREATE DATABASE db-name;
Qasim

3
Hãy chắc chắn kiểm tra xem tệp sao lưu không có "sử dụng 'original_db'" trong đó. Mặc dù tôi đã chỉ định khôi phục cho DB mới "mysql new_db <dump.sql", tệp kết xuất sql có trong đó và nó ghi đè lên DB trực tiếp của tôi. Không chắc chắn nếu có tùy chọn buộc nó sử dụng DB được chỉ định và bỏ qua "sử dụng 'original_db'" trong tệp sql
Shaakir

7
@Joe, vâng, nếu bạn có khoảng trắng giữa '-p' và 'password', nó nghĩ rằng 'mật khẩu' là tên cơ sở dữ liệu. Ngoài ra, bạn có thể nhập '-p' mà không cần mật khẩu và sau đó bạn sẽ được nhắc nhập mật khẩu khi bạn nhấn enter.
NotJay

765

Một cách sử dụng phổ biến của mysqldump là để tạo bản sao lưu toàn bộ cơ sở dữ liệu:

shell> mysqldump db_name > backup-file.sql

Bạn có thể tải tệp kết xuất trở lại máy chủ như thế này:

UNIX

shell> mysql db_name < backup-file.sql

Điều tương tự trong dấu nhắc lệnh của Windows :

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

PowerShell

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

Dòng lệnh MySQL

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

@Mike Bạn đang cố gắng khởi chạy nó trong mysql>dòng lệnh? Bạn nên sử dụng vỏ thay thế.
vladkras

Làm cách nào để sử dụng Shell? Tôi đang sử dụng mysql5.6 trên windows Server 2008
Jaylen

Sử dụng Windows PowerShell khi gõ MySQL db_name <file.sql Tôi gặp lỗi sau đây, toán tử '<' được bảo lưu sử dụng trong tương lai
Jaylen

31
Hãy cẩn thận về việc sử dụng> để chuyển hướng đầu ra mysqldump sang một tệp, đặc biệt nếu bạn muốn kiểm soát mã hóa. Thay vào đó, bạn có thể muốn sử dụng tham số --result-file để mã hóa không được điều khiển bởi shell / OS.
Bernard Chen

1
Phải, nhưng ... tại sao không chạy mysqlthẳng từ Powershell?
Charles Wood

330

Về thời gian nhập các tệp lớn: quan trọng nhất là mất nhiều thời gian hơn vì cài đặt mặc định của MySQL là autocommit = true. Bạn phải tắt nó trước khi nhập tệp của mình và sau đó kiểm tra cách nhập hoạt động như một viên ngọc.

Bạn chỉ cần làm những điều sau đây:

mysql> use db_name;

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

5
Có cách nào để làm điều đó trong một dòng lệnh trên lệnh mysql được sử dụng để nhập không?
Volomike

Câu trả lời hay nhất Đó là sourcemệnh lệnh tôi đã quên. Hầu hết chúng ta muốn làm điều này trong khi chúng tôi đang đăng nhập như lệnh độc lập giữa các lệnh khác, không phải đăng nhập chuẩn> bơm> logout oneliner trong top của Google SERPs.
davidkonrad 10/03/2016

19
Tôi đồng ý rằng đây là câu trả lời tốt nhất . Các autocommit=0phần tạo ra một thế giới của sự khác biệt về tốc độ.
aexl

2
sẽ autocommit=0làm việc trên các tập tin lớn hơn? như tập tin sql 8gb.
newbie

3
Không phải lúc nào cũng cần phải tắt autocommit. Thật đáng để kiểm tra kết xuất cơ sở dữ liệu trong một trình soạn thảo, nó có thể đã bắt đầu bằng SET autocommit=0;.
hashchange

127

Trong số tất cả các câu trả lời, cho vấn đề trên, đây là câu trả lời hay nhất:

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

khuyên ở trên thất bại về lỗi mà db đã tồn tại nhưng điều này dường như hoạt động
luky

74

Chúng ta có thể sử dụng lệnh này để nhập SQL từ dòng lệnh:

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

Ví dụ: nếu tên người dùng rootvà mật khẩu là password. Và bạn có một tên cơ sở dữ liệu bankvà tệp SQL là bank.sql. Sau đó, chỉ cần làm như thế này:

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

Hãy nhớ nơi tập tin SQL của bạn. Nếu tệp SQL của bạn nằm trong Desktopthư mục / thư mục thì hãy vào thư mục máy tính để bàn và nhập lệnh như thế này:

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

Và nếu bạn đang ở trong Projectthư mục và tệp SQL của bạn nằm trong Desktopthư mục. Nếu bạn muốn truy cập nó từ Projectthư mục thì bạn có thể làm như thế này:

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

22
Không nên có khoảng trống giữa -ppassword
Ejaz

Jap. Điều này sẽ không hoạt động. Đúng sẽ làmysql -u root -p"password" bank < bank.sql
Armin

4
Tại sao bạn chỉ đơn giản là không thể trả lời trong một dòng? mysql -u username -ppassword db_name < file.sql
Naveed

6
trong khi điều này hoàn toàn không liên quan đến câu hỏi / câu trả lời này, khi bạn đang làm việc với các cơ sở dữ liệu không tầm thường, không nên nhập mật khẩu trên cùng một lệnh trong văn bản thuần túy. Không chỉ định mật khẩu là một phần của lệnh sẽ nhắc bạn nhập mật khẩu mà bạn có thể nhập an toàn
vào

3
Đặc biệt là vì.bash_history
Neil Chowdhury

64

Cách dễ nhất để nhập vào lược đồ của bạn:

Đăng nhập vào mysql và vấn đề dưới đây đề cập đến các lệnh.

mysql> use your_db_name;

mysql> source /opt/file.sql;

5
Điều này sẽ hoạt động mà không có lệnh 'sử dụng' cho các bãi chứa với db đa cấp trong đó
Hayden Thring

1
Tôi đã cố gắng nhập một kết xuất từ ​​cơ sở dữ liệu có tên khác nhưng với cùng cấu trúc, câu trả lời đúng của tác giả đã không hoạt động, nó đã tạo ra một cơ sở dữ liệu mới được đặt tên theo cơ sở dữ liệu trong tệp kết xuất. Câu trả lời này ngay tại đây đã làm những gì tôi muốn, cảm ơn người đàn ông
Wuelber Castillo

1
tuyệt quá! exaclty những gì tôi đang tìm kiếm!
Sergei Zahharenko

2
điều này cũng giám sát việc thực thi tập lệnh, tốt hơn nhiều so với các câu trả lời khác
refex

61

Nếu bạn đã có cơ sở dữ liệu, hãy sử dụng cách sau để nhập tệp dumphoặc sqltệp:

mysql -u username -p database_name < file.sql

nếu bạn không cần phải tạo cơ sở dữ liệu có liên quan (trống) trong MySQL, lần đầu tiên đăng nhập vào MySQLbàn điều khiển bằng cách chạy lệnh sau trong terminal hoặc trong cmd

mysql -u userName -p;

Và khi được nhắc cung cấp mật khẩu.

Tiếp theo, tạo một cơ sở dữ liệu và sử dụng nó:

mysql>create database yourDatabaseName;
mysql>use yourDatabaseName;

Sau đó nhập tệp sqlhoặc dumptệp vào cơ sở dữ liệu từ

mysql> source pathToYourSQLFile;

Lưu ý: nếu thiết bị đầu cuối của bạn không ở vị trí có tệp dumphoặc sqltồn tại, hãy sử dụng đường dẫn tương đối ở trên.


Câu trả lời của bạn đã có một giải pháp cơ bản cho những người mới bắt đầu sử dụng MySQL như tôi: 1.Tạo cơ sở dữ liệu, nếu không tồn tại. 2.Trỏ tệp nguồn vào Cơ sở dữ liệu đã tạo để nhập dữ liệu / siêu dữ liệu.
Sumanth Lazarus

60
  1. Mở dòng lệnh MySQL
  2. Nhập đường dẫn của thư mục bin mysql của bạn và nhấn Enter
  3. Dán tệp SQL của bạn vào binthư mục của máy chủ mysql.
  4. Tạo một cơ sở dữ liệu trong MySQL.
  5. Sử dụng cơ sở dữ liệu cụ thể mà bạn muốn nhập tệp SQL.
  6. Nhập source databasefilename.sqlEnter
  7. Tải lên tệp SQL của bạn thành công.

2
mở đường dẫn của thư mục bin mysql của bạn và nhấn
Ramesh Pareek

46

Một giải pháp hiệu quả với tôi là dưới đây:

Use your_database_name;
SOURCE path_to_db_sql_file_on_your_local;

Điều này làm việc cho tôi bằng cách sử dụng MySQL Command Line Client, sau khi đặt tệp sql của tôi vào thư mục thích hợp / bin xem windows explorer. Cảm ơn
klewis

3
Chậm một chút nhưng không dừng lại ở giữa và đừng nói rằng máy chủ MySQL đã biến mất.
Jaskaran Singh

39

Để kết xuất cơ sở dữ liệu vào tệp SQL, sử dụng lệnh sau.

mysqldump -u username -p database_name > database_name.sql

Để nhập tệp SQL vào cơ sở dữ liệu (đảm bảo bạn đang ở cùng thư mục với tệp SQL hoặc cung cấp đường dẫn đầy đủ đến tệp), hãy:

mysql -u username -p database_name < database_name.sql

37

Chuyển đến thư mục nơi bạn có thể thực thi MySQL. -ucho tên người dùng và -pnhắc mật khẩu:

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

5
Tôi nghĩ rằng nó sẽ hữu ích hơn cho OP và các câu hỏi thêm, khi bạn thêm một số giải thích cho cường độ của bạn.
Phóng viên

Điều đó sẽ chỉ hoạt động nếu bạn có mysql.exe được xác định trong các biến môi trường windows của bạn. Nếu không, bạn nên gõ tất cả đường dẫn đến tệp mysql.exe. Và cú pháp của bạn sai. Ví dụ như: "d: \ wamp \ bin \ mysql \ mysql5.5.8 \ bin \ mysql.exe -u -p your_username db_name <FILENAME.SQL" Thông tin thêm ở đây: wpy.me/en/blog/...
wappy

31

Tôi nghĩ rằng điều đáng nói là bạn cũng có thể tải một tệp được nén (nén) với zcatnhư hiển thị bên dưới:

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

28

Để nhập một cơ sở dữ liệu, sử dụng lệnh sau.

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

Để nhập nhiều bãi chứa cơ sở dữ liệu, sử dụng lệnh sau.

mysql -u username -p password < dump.sql


17

Để nhập nhiều tệp SQL cùng một lúc, hãy sử dụng:

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

Để nhập đơn giản:

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

Đối với WAMP :

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

Đối với XAMPP:

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

16

Bạn không cần chỉ định tên của cơ sở dữ liệu trên dòng lệnh nếu tệp .sql chứa CREATE DATABASE IF NOT EXISTS db_namevà các USE db_namecâu lệnh.

Chỉ cần đảm bảo rằng bạn đang kết nối với người dùng có quyền tạo cơ sở dữ liệu, nếu cơ sở dữ liệu được đề cập trong tệp .sql không tồn tại.


14

Nhập cơ sở dữ liệu

  1. Đi đến ổ đĩa:

    command: d:
  2. Đăng nhập MySQL

    command: c:\xampp\mysql\bin\mysql -u root -p
  3. Nó sẽ yêu cầu pwd. Nhập nó:

    pwd
  4. Chọn cơ sở dữ liệu

    use DbName;
  5. Cung cấp tên tệp

    \.DbName.sql

11

Chuyển đến thư mục mà bạn có MySQL.

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

Ngoài ra để kết xuất tất cả các cơ sở dữ liệu, hãy sử dụng -all-databasestùy chọn và không cần chỉ định tên cơ sở dữ liệu nữa.

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

Hoặc bạn có thể sử dụng một số máy khách GUI như SQLyog để làm điều này.


11

Sử dụng:

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

Sử dụng trợ giúp MySQL để biết chi tiết - mysql --help.

Tôi nghĩ rằng đây sẽ là những lựa chọn hữu ích trong bối cảnh của chúng tôi:

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

Điều gì là thú vị, nếu chúng ta đang nhập một cơ sở dữ liệu lớn và không có thanh tiến trình. Sử dụng Trình xem ống và xem truyền dữ liệu qua đường ống

Đối với máy Mac brew install pv

Đối với Debian / Ubuntu , apt-get install pv.

Đối với những người khác, tham khảo pv - Trình xem ống

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

Dành cho Centos:yum install pv
Jonny


9

Trong khi hầu hết các câu trả lời ở đây chỉ đề cập đến lệnh đơn giản

mysql -u cơ sở dữ liệu_user -p [db_name] <cơ sở dữ liệu_file.sql

ngày nay khá phổ biến là cơ sở dữ liệu và bảng có đối chiếu utf8 trong đó lệnh này không đủ. Có đối chiếu utf8 trong các bảng đã xuất, bắt buộc phải sử dụng lệnh này:

mysql -u cơ sở dữ liệu_user -p --default-character-set = utf8 [db_name] <database_file.sql

Surley này cũng hoạt động cho các bộ ký tự khác, làm thế nào để hiển thị ký hiệu đúng có thể được nhìn thấy ở đây:

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

Một bình luận cũng đề cập rằng nếu cơ sở dữ liệu không bao giờ tồn tại thì cơ sở dữ liệu trống phải được tạo trước tiên. Điều này có thể đúng trong một số trường hợp, nhưng phụ thuộc vào tệp xuất. Nếu tệp đã xuất bao gồm lệnh tạo cơ sở dữ liệu thì cơ sở dữ liệu không bao giờ phải được tạo trong một bước riêng biệt, thậm chí có thể gây ra lỗi khi nhập. Vì vậy, khi nhập, bạn nên xem trước trong tệp để biết các lệnh được bao gồm ở đó, khi xuất, bạn nên lưu ý các cài đặt, đặc biệt là nếu tệp rất lớn và khó đọc trong trình chỉnh sửa.

Vẫn còn nhiều tham số cho lệnh được liệt kê và giải thích ở đây:

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

Nếu bạn sử dụng phiên bản cơ sở dữ liệu khác, hãy cân nhắc tìm kiếm phiên bản tương ứng của hướng dẫn sử dụng. Các liên kết được đề cập đề cập đến phiên bản MySQL 5.7.


9

Để xuất cơ sở dữ liệu:

mysqldump -u username -p database_name > file.sql

Để nhập cơ sở dữ liệu:

mysql -u username -p database_name < file.sql

8

Lệnh sau hoạt động với tôi từ dòng lệnh (cmd) trên Windows 7 trên WAMP .

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


7

Tôi nghĩ rằng nó có thể hữu ích cho những người đang sử dụng Mac OS X :

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

Thay thế xamppbằng mamphoặc các máy chủ web khác.


6

Đôi khi cổng được xác định cũng như địa chỉ IP máy chủ của cơ sở dữ liệu đó cũng có vấn đề ...

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

6

Nhập vào cơ sở dữ liệu:

mysql -u tên người dùng -p cơ sở dữ liệu </ đường dẫn tệp / file_name.sql

Xuất từ ​​cơ sở dữ liệu:

mysqldump -u tên người dùng -p cơ sở dữ liệu_name> / đường dẫn tệp / file_name.sql

Sau những lệnh này, một dấu nhắc sẽ hỏi mật khẩu MySQL của bạn.


5

Đối với mục đích sao lưu, tạo tệp BAT và chạy tệp BAT này bằng Trình lập lịch tác vụ . Nó sẽ sao lưu cơ sở dữ liệu; chỉ cần sao chép dòng sau và dán vào Notepad , sau đó lưu tệp .bat và chạy nó trên hệ thống của bạ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

Các bước sau đây để tải lên file.sqlcơ sở dữ liệu MySQL.

Bước 1: Tải lên file.sql.zipvới bất kỳ thư mục và giải nén có
Lưu ý : sudo apt-get install unzip : sudo apt-get unzip file.sql.zip
Bước 2: Bây giờ điều hướng đến thư mục đó. Thí dụ:cd /var/www/html

Bước 3: mysql -u username -p database-name < file.sql
Nhập mật khẩu và đợi cho đến khi tải lên hoàn tất.


5

Tôi tiếp tục gặp vấn đề trong đó cơ sở dữ liệu không được tạo.

Tôi đã sửa nó như thế này

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